您如何比较两个根文件系统-但忽略挂载点?


1

我有rootfs,//mnt/another_rootfs其中有第二个已挂载的rootfs。

我想比较它们中的文件...但是当我做类似的事情时:diff -r / /mnt/another_rootfs我开始比较所有挂载点(对此我不太感兴趣),但是/rootfs也将包含第二个挂载/mnt/another_rootfs...也会引起问题。

所以我真的只想比较实际挂载/的文件与挂载的文件/mnt/another_rootfs,而不递归到其他挂载。

那可能吗?


我可以建议使用FreeFileSync-与Meld结合使用,请参见以下答案以获取屏幕截图
N0rbert

@ N0rbert我看不到(在答案中)如何解决安装点问题?
code_fodder

您可以根据需要在FFS中设置忽略过滤器。您也可以忽略或包括符号链接。
N0rbert

喔好吧。虽然对我来说有点手动。有很多挂载点:(...但是我想可以完成-谢谢:)
code_fodder

1
可能最简单的方法是/在实时会话中将两个-filesystems 挂载在其各自的挂载点下,并比较这些挂载点。
mook765 '18 -10-1

Answers:


1

当您将问题反转为“我要diff /mnt/another_rootfs /” 时,命令行解决方案很容易:

find /mnt/another_rootfs -xdev -type f -print0 | \
    xargs -0 -r $HOME/bin/diffwithslash

哪里$HOME/bin/diffwithslash是这样的:

#!/bin/bash
while [[ $# -gt 0 ]] ; do
   afile="$1"
   shift
   bfile="${afile#/mnt/another_rootfs}"
   if [[ -f "$afile" ]] && [[ -f "$bfile" ]] ; then
       diff "$bfile" "$afile"
   fi
done
exit 0

这会工作:) -但它更多的是脚本的解决方案,我真的不想写一个脚本,如果我能避免它:○
code_fodder

1

您可以将保存/当前引导安装的-file-system 的分区安装到第二个安装点,并将该安装点与另一个/-file-system的安装点进行比较。

使用lsblk -f检查哪个分区安装在/

然后用

sudo mount -t ext4 /dev/sdXY /mnt (replace XY with the found value)

/mnt文件夹与另一个/-file-system 的安装点进行比较。

卸下 sudo umount /mnt


这很有帮助-但是子安装点仍然存在(例如/ proc和/ sys等...),有没有办法不递归到这些安装点?
code_fodder

安装点/ proc/sys是磁盘上的空文件夹。它们仅在运行的系统中填充。例如,procfs内核提供的将安装到/proc
mook765 '18 -10-2
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.