Внешняя резервная копия - ошибка «cp: невозможно создать обычный файл»

6

Я всегда резервировал свой домашний каталог на внешний жесткий диск, используя команду cp -r .

До недавнего времени он работал нормально, но теперь я регулярно получаю сообщение об ошибке cp: cannot create regular file , за которым следует invalid argument или cp: cannot create symbolic link , за которым следует operation not permitted .

Я пробовал sudo cp -r , но проблема не устранена. Что я делаю неправильно?

    
задан Lolwhites 02.03.2011 в 14:09
источник

4 ответа

4

cp -rv должно, по крайней мере, рассказать вам, в каком файле он боится.

Проблема, с которой вы сталкиваетесь, звучит так, будто вы копируете символическую ссылку (то есть файл, который просто указывает на другую) в файловую систему, которая не поддерживает символические ссылки. Для этого есть три варианта:

  • Поверните резервный том в файловую систему, которая принимает символические ссылки (например, переформатируйте ее с FAT или NTFS на EXT3 или EXT4). Может быть боль в зависимости от того, сколько данных у вас там (что вам, возможно, придется жонглировать, пока вы это делаете).

  • Просто игнорируйте символические ссылки, а не копируйте их. Это может повредить вещи, если вы попытаетесь восстановить их, поскольку некоторые файлы будут отсутствовать.

  • Разверните символические ссылки, чтобы они содержали копию фактических данных. Это занимает больше места.

Первое было бы моим выбором, но если вам нужен диск для другой системы, которая не поддерживает тома EXTx, это проблема.

Независимо от того, являются ли второй второй реалистичными варианты, я бы выполнил cp со своим подробным флагом, чтобы узнать, с чем вы имеете дело. Если это один файл, возможно, простая копия будет в порядке, если это не так, и это всего лишь помощник помощника, возможно, без него все будет хорошо.

Но, как примечание, большинство людей предпочитают использовать rsync для создания резервных копий. У этого есть много вариантов, которые делают его идеальным для работы. Здесь вы можете прочитать версию его man-страницы . Он имеет различные варианты (как описано выше) о том, как обращаться с символическими ссылками.

    
ответ дан Oli 02.03.2011 в 15:03
3

Конфликт между исходными именами файлов и файловой системой назначения может привести к ошибке 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 в своих именах. См. Также « Как я могу закрепить / сжать символическую ссылку? «

Замена файловой системы vfat чем-то более дружественным к Linux - например, ext4 - облегчит вашу проблему, но за счет снижения переносимости. Почти любая система Linux смогла бы подключить диск, но для других общих систем потребуется дополнительная работа. Видеть " Создание раздела ext4 с консоли " и mke2fs manpage для получения подробной информации о завершении процесса создания. Видеть  " Как читать разделы ext4 в Windows? "," Как смонтировать файловую систему ext4 в OS X? " и " Как подключить Ext4 с помощью предохранителя OS X ", если вам нужно переместить этот диск в другие операционные системы.

    
ответ дан wyrm 21.07.2015 в 10:46
1

См. ваш dmesg . Обычная проблема - проблема файловой системы или отказ жесткого диска (и, следовательно, проблема файловой системы).

Вы можете umounting внешний диск, а затем запустить fsck . Например

umount /dev/sdb1
fsck -f /dev/sdb1
    
ответ дан Olli 02.03.2011 в 14:20
0

Я просто столкнулся с той же проблемой (фактически на Cent OS через VirtualBox), и проблема связана с разрешениями. У меня был общий каталог с моей локальной машиной (Mac на OSX Mavericks), попытался cp , и он отказался от Protocol error . На моей локальной машине я изменил владельца каталога на обычного пользователя (меня) (из root ) и группы на нечто более общее, чем wheel . Таким образом, это была основная проблема с разрешениями.

    
ответ дан cdmo 21.01.2015 в 15:52