我正在尝试将目录复制到外部硬盘。我安装了设备然后输入:cd root tar -cf - * | (cd /mnt ; tar -xpf -)
我收到此错误消息:“懦弱地拒绝创建空存档”
当我ls
对同一个根目录执行操作时(它根本不是空的),我需要的所有文件都在那里。
为什么会出现这种情况?
答案1
如果您想复制根文件系统并担心特殊文件和设备,最好的方法是:
- 首先使用挂载的绑定选项将 / 挂载到子目录中,这样您就不必担心 /proc、/dev、/sys 和其他挂载的文件系统
- 然后使用知道如何处理特殊文件的命令,例如 cp -a 或 rsync -a
假设您已将外部驱动器安装在 /mnt/external 下
mkdir /mnt/root
mount / /mnt/root -o bind
cp -a /mnt/root/* /mnt/external/
或者
rsync -aP /mnt/root/ /mnt/external/
或者(如果你非常喜欢 tar,顺便说一句,这是最糟糕的选择)
tar -C /mnt/root -cf - ./ | tar -C /mnt/external -xpf -
将 -v 添加到上述任何一项以获得详细输出,但它会减慢该过程
答案2
你为什么不直接使用呢cp -pr source destination
?
反正:
cd ~/tmp/source/;tar -cpf - * | (cd ~/tmp/destination;tar -xpf -)
工作得很好。
答案3
我发现复制整个目录结构的最佳方法是rsync
# rsync -avP /path/to/source/* /path/to/destination/
这还有一个优点,您可以通过 ssh 与远程目录进行交互。
答案4
请使用 POSIX帕克克斯公用事业。
与cp不同,pax 在每个系统上的工作方式都相同。使用 pax,您始终可以安全地复制包含特殊文件(例如设备节点)的文件系统。
要将一个文件系统 /mnt/foo 复制到 /mnt/bar,请保留权限、时间戳和特殊文件:
# cd /mnt/foo
pax -rw -pe -X . /mnt/bar/