外部备份 - “cp:无法创建常规文件”错误

外部备份 - “cp:无法创建常规文件”错误

我一直使用该命令将我的主目录备份到外部硬盘上cp -r

直到最近,它还运行良好,但现在我经常会收到错误消息,cp: cannot create regular file后跟invalid argument或。cp: cannot create symbolic linkoperation not permitted

我尝试过sudo cp -r,但问题仍然存在。我做错了什么?

答案1

源文件名和目标文件系统之间的冲突可能会导致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

如果您看到这些错误,那么这很可能就是问题的原因。

最简单的方法可能是创建一个不受您遇到的命名限制的存档,同时保留符号链接。默认情况下,tar7z保留符号链接。zip使用适当的标志保留符号链接。这些中的每一个都可以存储名称中包含 Windows 保留字符的文件。另请参阅“我如何压缩符号链接?

将 vfat 文件系统替换为更适合 Linux 的文件系统(例如 ext4)可以缓解您的问题,但代价是可移植性降低。几乎任何 Linux 系统都能够安装该驱动器,但其他常见系统则需要额外的工作。请参阅“从控制台创建 ext4 分区” 和mke2fs手册页,了解创建过程的详情。请参阅“如何在 Windows 上读取 ext4 分区?”,“如何在 OS X 上安装 ext4 文件系统?“, 和 ”如何使用 OS X Fuse 挂载 Ext4“如果您需要将该驱动器移动到其他操作系统。

答案2

cp -rv至少应该告诉您它在哪个文件上出现问题。

您遇到的问题听起来像是您正在将符号链接(即指向另一个文件的文件)复制到不支持符号链接的文件系统。对此有三种选择:

  • 将备份卷转换为接受符号链接的文件系统(例如将其从 FAT 或 NTFS 重新格式化为 EXT3 或 EXT4)。这可能会很麻烦,具体取决于您那里有多少数据(您可能需要在执行此操作时处理这些数据)。

  • 只需忽略符号链接而不复制它们。如果您尝试恢复,这可能会破坏某些文件,因为它会丢失一些文件。

  • 扩展符号链接,使其包含实际数据的副本。这会占用更多空间。

第一个是我的选择,但如果您需要另一个不支持 EXTx 卷的系统驱动器,那就有问题了。

无论后两个选项是否可行,我都会cp使用其详细标志来查看您要处理的是什么。如果是单个文件,也许普通副本就可以了,如果不是,并且它只是一个垃圾助手,也许省略它就可以了。

但顺便说一句,大多数人似乎更喜欢使用它rsync来备份。它有很多选项,非常适合这项工作。您可以阅读它的手册页在这里。它有多种处理符号链接的选项(如上所述)。

答案3

看看你的dmesg。通常的问题是文件系统问题或硬盘故障(因此是文件系统问题)。

您可以卸载外部磁盘然后运行fsck。例如

umount /dev/sdb1
fsck -f /dev/sdb1

答案4

我刚刚遇到了同样的问题(实际上是在 Cent OS 上通过 VirtualBox 遇到的),问题与权限有关。我与本地计算机(OSX Mavericks 上的 Mac)共享了一个目录,尝试了,cp但它却无法访问Protocol error。在我的本地计算机上,我将目录的所有者更改为普通用户(我)(从root),并将组更改为比更通用的组wheel。所以,结果是一个基本的权限问题。

相关内容