Я всегда выполнял резервное копирование своего домашнего каталога на внешний жесткий диск с помощью команды cp -r
.
До недавнего времени это работало нормально, но теперь я регулярно получаю сообщение об ошибке cp: cannot create regular file
, затем invalid argument
или cp: cannot create symbolic link
, а затем operation not permitted
.
Я пытался sudo cp -r
, но проблема сохраняется. Что я делаю не так?
cp -rv
должен, по крайней мере, сказать вам, в каком файле он хранится.
Проблема, с которой вы столкнулись, звучит так, будто вы копируете символическую ссылку (это файл, который просто указывает на другую) в файловую систему, которая не поддерживает символические ссылки. Для этого есть три варианта:
Превратить ваш резервный том в файловую систему, которая принимает символические ссылки (например, переформатировать его из FAT или NTFS в EXT3 или EXT4). Это может быть неприятно в зависимости от того, сколько данных у вас есть (что вам, возможно, придется жонглировать, пока вы это делаете).
Просто игнорируйте символические ссылки и не копируйте их. Это может привести к поломке, если вы попытаетесь восстановить, так как в нем будут отсутствовать некоторые файлы.
Расширьте символические ссылки, чтобы они содержали копию фактических данных. Это занимает больше места.
Первый - мой выбор, но если вам нужен диск для другой системы, не поддерживающей тома EXTx, это проблема.
Независимо от того, являются ли вторые два реалистичными вариантами, я бы запустил cp
с его подробным флагом, чтобы увидеть, с чем вы имеете дело. Если это один файл, возможно, простая копия будет в порядке, если это не так, и это просто бесполезный помощник, возможно, пропустить его будет хорошо.
Но, как замечание, большинство людей предпочитают использовать rsync
для создания резервных копий. У этого есть много вариантов, которые делают его идеальным для работы. Вы можете прочитать версию ее справочной страницы здесь . У этого есть различные варианты (как обрисовано в общих чертах выше) о том, как обращаться с символическими ссылками.
Я только что столкнулся с той же проблемой (на самом деле на Cent OS через VirtualBox), и проблема была связана с разрешениями. У меня был общий каталог с моей локальной машиной (Mac на OSX Mavericks), я попытался cp
и он отказался от Protocol error
. На моей локальной машине я изменил владельца каталога на обычного пользователя (меня) (из root
), а группу на что-то более общее, чем wheel
. Итак, оказалась основная проблема с разрешениями.
Конфликт между исходными именами файлов и целевой файловой системой может вызвать ошибку cannot create regular file
. Если вы копируете на флэш-накопитель USB, вы, вероятно, используете файловую систему vfat или fat32, на которую распространяются обычные ограничения именования Windows .
Чтобы убедиться в этом, попробуйте создать файл с именем :
, который является зарезервированным символом Windows.
$ cp /dev/null /path/to/dest/:
cp: cannot create regular file '/path/to/dest/:': Invalid argument
Чтобы увидеть ошибку Operation not permitted
отдельно, попробуйте создать символическую ссылку без копирования.
$ ln -s somesillysymlink /path/to/dest/symlink
ln: failed to create symbolic link '/path/to/dest/symlink': Operation not permitted
Если вы видите эти ошибки, это, вероятно, является причиной вашей проблемы.
Вероятно, самый простой подход - создать архив, свободный от ограничений именования, с которыми вы столкнулись, а также сохраняющий символические ссылки. По умолчанию tar
и 7z
сохраняют символические ссылки. zip
сохраняет символические ссылки с соответствующим флагом. Каждый из них может хранить файлы, в именах которых есть зарезервированные символы Windows. См. Также & ldquo; Как мне сжать / сжать символическую ссылку? & rdquo;
Замена файловой системы vfat чем-то более дружественным для Linux & ndash; такие как ext4 & ndash; облегчит вашу проблему, но за счет снижения мобильности. Почти любая система Linux сможет смонтировать диск, но другие распространенные системы потребуют дополнительной работы. Смотрите & ldquo; Создание раздела ext4 из консоли & rdquo; и справочную страницу mke2fs
для получения подробной информации о завершении процесса создания. См. & Ldquo; Как читать разделы ext4 в Windows? & rdquo ;, & ldquo; Как мне смонтировать файловую систему ext4 в OS X? & rdquo; и & ldquo; Как подключить Ext4 с помощью OS X Fuse & rdquo; если вам нужно переместить этот диск в другие операционные системы.