web-dev-qa-db-ja.com

分布を比較する方法は?

RaspberryPiを使用しています。

あらゆる種類のLinuxディストリビューションがあり、すべて.img形式で、Win32DiskImagerを使用してSDカードに書き込みます。

どのファイルが変更されたかを確認する方法(このイメージはディストリビューションXから作成されたため、dist。Xを1つのファイルとして使用し、彼をもう1つのファイルとして使用して比較できる)、およびカスタムディストリビューションかどうかを確認する方法悪意があるかどうか?

Windows 7での違いを理解したいと思います。ただし、ディストリビューションは常にLinuxです。

4
Zurechtweiser

.imgファイルは、完全なディスクのイメージファイルです。したがって、複数のパーティションが含まれる場合があります。ディスクイメージの場合、fdiskなどのディスク管理ツールを使用して、含まれているパーティションの種類を確認できます。

Archlinux-hf-2013-06-06.imgの内容

$ fdisk -l archlinux-hf-2013-06-06.img

Disk archlinux-hf-2013-06-06.img: 1960 MB, 1960837120 bytes
64 heads, 32 sectors/track, 1870 cylinders, total 3829760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0004f23a

                      Device Boot      Start         End      Blocks   Id  System
archlinux-hf-2013-06-06.img1   *        2048      186367       92160    c  W95 FAT32 (LBA)
archlinux-hf-2013-06-06.img2          186368     3667967     1740800   83  Linux

したがって、出力を見ると、.imgファイル内に2つのパーティションがあることがわかります。最初のrchlinux-hf-2013-06-06.img1は、FAT32タイプのパーティションです。 2番目のパーティションarchlinux-hf-2013-06-06.img2はLinuxパーティションです。

2つのパーティション(2048および186368)の開始セクターをメモします。後で必要になります。また、特定のセクターに含まれるバイト数(512バイト)にも注意してください。

パーティションの取り付け

Linuxパーティションをマウントするには、最初にバイト単位で開始位置を計算する必要があります。したがって、次の計算を行います。

part1:   2048 sectors * 512 bytes/sector =  1048576 bytes
part2: 186368 sectors * 512 bytes/sector = 95420416 bytes

したがって、Linuxパーティション(2番目のパーティション)をマウントするには、次のようにします。

$ Sudo mount -o loop,offset=95420416 archlinux-hf-2013-06-06.img /mnt/

注:FAT32パーティションをマウントするには、次のコマンドを使用できます。

$ Sudo mount -t vfat -o loop,offset=1048576 archlinux-hf-2013-06-06.img /mnt/

これで、内容を確認できます。

$ ls /mnt|columns -c 4
bin                   boot                  dev                   etc
home                  lib                   lost+found            media
mnt                   opt                   proc                  root
run                   sbin                  srv                   sys
tmp                   usr                   var

アンマウント

完了したらパーティションをアンマウントするには、次のコマンドを実行します。

$ Sudo umount /mnt

.imgファイルのコンテンツの比較

だからここにアイデアがあります。たとえば/mnt1/mnt2に2つの.imgファイルをマウントしてから、各.imgファイルに含まれる2つのディレクトリツリーの再帰的な比較を実行できます。

2つの.imgファイルがマウントされている状態で、次のようなコマンドを実行して比較を行うことができます。

$ diff -qr /mnt1 /mnt2

これにより、ファイルと、2つのディレクトリツリーでファイルが異なるか欠落しているかどうかを示す出力が生成されます。

kpartx-パーティションをマウントする別の方法

fdiskを使用して上記の計算を実行するのが面倒な場合は、kpartxを使用して、簡単にマウント/アンマウントできるループバックデバイスにパーティションをマップできます。コマンドは次のようになります。

mount .imgファイル#1

$ Sudo kpartx -av your-image1.img 
add map loop0p1 (252:5): 0 117187 linear /dev/loop0 1
add map loop0p2 (252:6): 0 3493888 linear /dev/loop0 118784
$ Sudo mount /dev/mapper/loop0p2 /mnt1

mount .imgファイル#2

$ Sudo kpartx -av your-image2.img 
add map loop1p1 (252:5): 0 117187 linear /dev/loop1 1
add map loop1p2 (252:6): 0 3493888 linear /dev/loop1 118784
$ Sudo mount /dev/mapper/loop1p2 /mnt2

参考文献

2
slm