Внешнее резервное копирование - & ldquo; cp: не удается создать обычный файл & rdquo; ошибка

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

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

Я пытался sudo cp -r, но проблема сохраняется. Что я делаю не так?

6
задан 13 March 2014 в 22:02

4 ответа

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

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

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

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

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

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

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

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

0
ответ дан 13 March 2014 в 22:02

Конфликт между исходными именами файлов и целевой файловой системой может вызвать ошибку 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; если вам нужно переместить этот диск в другие операционные системы.

0
ответ дан 13 March 2014 в 22:02

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

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

umount /dev/sdb1
fsck -f /dev/sdb1
0
ответ дан 13 March 2014 в 22:02

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

0
ответ дан 13 March 2014 в 22:02

Другие вопросы по тегам:

Похожие вопросы: