我有一个正在编程的设备的文件系统,我想为其制作一个精确的副本。理想情况下,我希望此副本与从中复制的文件夹相同。我尝试使用cp -r
cp -a
andrsync -azvP
来实现这一目标。虽然每个文件夹都会产生不同大小的文件夹(使用du -s
),但最终,即使我的设备从原始文件夹中运行,它也不会从我复制的文件夹中运行。
- 我使用的命令没有考虑到什么?
- 复制文件系统/文件夹时是否可以保持所有内容相同?如果是这样,我该怎么做呢?
PS我在上面发布了类似的问题堆栈溢出但很快意识到我在错误的交易所询问了它
编辑:这可能没有帮助,但无论我使用哪种方法复制的目录总是会导致有问题的机器出现内核恐慌并显示以下输出。
VFS:无法通过 NFS 挂载根文件系统,正在尝试软盘。 VFS: 无法打开根设备“nfs”或未知块(2,0) 请附加正确的“root=”启动选项;以下是可用的分区: 1f00
64 mtdblock0(驱动程序?) 1f02 64 mtdblock2(驱动程序?) 1f04 2432 mtdblock4(驱动程序?) 1f05 128 mtdblock5(驱动程序?) 1f06 4352 mtdblock6(驱动程序?) 1f07 204928 mtdblock7(驱动程序?) 50304 mtdblock8(驱动程序?)0800
8388608 sda 驱动程序:sd 内核恐慌 - 不同步:VFS:无法在未知块(2,0)上安装根文件系统
答案1
我通常使用以下替代方案之一:
rsync -aHAX
(添加 v 以获得详细信息)确保在复制时保留目标文件夹中的所有链接结构和 x-attrs。不要忘记a
意味着存档并保留时间、所有权和权限。tar cvf
如果第一个由于某种原因不能满足我的需要并且我没有时间,我会使用简单(不要压缩以节省时间,只需将它们压缩),但我总是尝试第一个。
要检查一切是否按预期进行,您可以diff -r <folder1> <folder2>
根据需要随后运行。
答案2
阅读评论中的回复,听起来您可能正在尝试复制根文件夹(“我的设备不会使用复制的目录启动”)。在这种情况下,您应该做几件事。
$ cd /
$ mkdir backups
$ tar -cvpf /backups/fullbackup.tar --directory=/ --exclude=proc --exclude=sys \
--exclude=dev/pts --exclude=backups .
将根文件夹复制到新系统后,您需要在启动之前更新 grub。
$ grub-install --recheck /dev/sdX (Where X is the partition number)
$ update-grub
答案3
你可以尝试FS存档器。它是类似partimage 的后继者,现已不再维护。我过去使用过partimage 和FSArchiver,它们都工作得很好。据我所知,它们都会制作与原始文件系统尽可能接近相同的文件系统副本。我认为 FSArchiver 比partimage 更强大一些。例如,它适用于 ext4,而partimage 则不行。看FSArchiver/partimage 比较表。
答案4
这有点取决于你所说的“相同”是什么意思。
rsync
大多数时候只要去做就可以了。有时您想tar
将所有内容打包到一个文件中并将其提取到其他位置。- 如果您想要完整文件系统的克隆,您可以使用它
dd
来复制整个文件系统本身。
如果您有办法调试您的设备,请尝试找出它当前无法运行的确切问题是什么。