web-dev-qa-db-fra.com

Comment comparez-vous deux systèmes de fichiers racine - mais ignorez les points de montage?

J'ai rootfs / Mais à l'intérieur de cela j'ai /mnt/another_rootfs Qui contient un deuxième rootfs monté.

Je veux comparer les fichiers qu'ils contiennent ... mais quand je fais quelque chose comme: diff -r / /mnt/another_rootfs Je commence à obtenir tous les points de montage comparés (ce qui ne m'intéresse pas tellement) mais aussi le / rootfs contiendra également le deuxième /mnt/another_rootfs ... qui pose également problème.

Je veux donc vraiment faire la différence entre les fichiers qui sont réellement montés sur / Et les fichiers montés sur /mnt/another_rootfs Et ne pas rentrer dans d'autres montages.

Est-ce possible?

1
code_fodder

Vous pouvez monter la partition qui contient le /- système de fichiers de l'installation actuellement démarrée à un deuxième point de montage et comparer ce point de montage avec le point de montage de l'autre /-système de fichiers.

Utilisation lsblk -f pour vérifier quelle partition est montée sur /.

Montez ensuite la partition avec

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

Comparer /mnt avec le dossier qui est le point de montage de l'autre /-système de fichiers.

Démonter avec Sudo umount /mnt

1
mook765

Une solution en ligne de commande est simple, lorsque vous inversez la question "Je veux diff /mnt/another_rootfs / ":

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

$HOME/bin/diffwithslash est quelque chose comme:

#!/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
1
waltinator