我正在使用树莓派。
似乎有各种各样的linux发行版,都是.img格式,我使用Win32DiskImager来刻录到SD卡。
我如何找出哪些文件已更改(有人说,此图像是从发行版 X 制作的,因此我可以使用 dist.X 作为一个文件,将其作为另一个文件并进行比较)以及如何确定是否是自定义发行版是否恶意?
我想找出 Windows 7 下的差异。不过,发行版始终是 Linux。
答案1
.img 文件是完整磁盘的映像文件。因此它可能包含超过 1 个分区。鉴于它是磁盘映像,您可以使用磁盘管理工具,例如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 类型的分区。第二个分区 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 分区(第二个):
$ 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 文件的内容
所以这是一个想法。您可以挂载 2 个 .img 文件/mnt1
,/mnt2
然后对每个 .img 文件中包含的 2 个目录树执行递归比较。
安装了 2 个 .img 文件后,您可以运行这样的命令来进行比较:
$ diff -qr /mnt1 /mnt2
这将导致输出显示一个文件以及它在两个目录树中是否不同和/或丢失。
kpartx - 安装分区的替代方法
如果您懒得执行上述数学运算,fdisk
则可以使用kpartx
分区并将其映射到可以轻松安装/卸载的环回设备。命令会像这样:
挂载 .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
挂载 .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