我正在尝试创建一个 Makefile 来自动重新制作 Knoppix 发行版。
我正在尝试将文件系统从只读压缩循环设备复制到普通文件系统,以便能够修改它,然后压缩它以替换旧的文件系统。这就是 Knoppix 重新制作的意义所在。我必须保留有关文件系统的所有详细信息,从一个文件系统到另一个文件系统重新创建硬链接结构。我粘贴的 ls -li 是两个不同文件系统中的同一文件,以显示源具有硬链接而目标已丢失它们。
$ ls -li */bin/dnsdomainname
10419 -rwxr-xr-x 4 root root 12992 2010-01-19 10:40 KNOPPIX_V6.2.1CD-2010-01-31-EN.cloop/bin/dnsdomainname
10641687 -rwxr-xr-x 1 root root 12992 2010-01-19 10:40 KNOPPIX_V6.2.1CD-2010-01-31-EN.tree/bin/dnsdomainname
Run Code Online (Sandbox Code Playgroud)
这显然是可能的——如果 rsync 能够保留不同主机之间的硬链接,那么它应该能够在同一主机上的文件干之间执行此操作。
由于某种奇怪的原因,使用我知道应该完成这项工作的三种方法都不起作用,我很困惑出了什么问题。我花了几乎一个工作日来创建脚本、测试它,这似乎是阻止它完全工作的最后一部分。
方法有:
sudo nice tar -C $(NAME).cloop -cf - . | sudo nice tar -C $(NAME).tree -xvpf -
sudo cp -av --preserve=all $(NAME).cloop $(NAME).tree
sudo rsync -x -a -H --progress --delete $(NAME).cloop/ $(NAME).tree
Run Code Online (Sandbox Code Playgroud)
我有一个集成的测试套件(make changes),其中一部分正在计算两个文件系统的 md5sum,并且 diff 为空 - 这意味着文件系统之间每个文件的内容完全相同。但是,权限和硬链接号之间的差异表明,引用共享(硬链接)inode 的每个文件现在都是一个单独的inode,这不是我想要的。所有三种方法都做同样的事情错误,这真的很可疑,我已经没有想法了。
为了供您查看,这里有完整的 …