当 4.9 Linux 内核启动并识别 MMC 分区的存在时,如果未安装该分区,它是否会以任何方式更改该分区?
我在构建时预先计算了“filesystem.img”的 sha256(ext4)。
我将文件系统应用到 MMC 分区,如下所示:
dd if=myfilesystem.img of=/dev/mmcblk0p2 bs=4096 count=XYZABC
我可以读回分区并验证闪存是否正确:
dd if=/dev/mmcblk0p2 bs=496 count=XYZABC | sha256sum
日记功能被禁用。我可以手动将文件系统挂载为只读,并根据需要卸载。 sha256 保持不变。
但是,如果我重新启动并再次运行校验和,分区上的 sha256 会出现不同的结果。我在重新启动之前写入的分区未安装。但被内核识别为mmcblk0p2。
在安装分区之前,内核是否会以任何方式更改分区中的数据?
答案1
您正在启动哪个发行版/环境?
它可以像文件系统检查一样简单,仅更新上次检查的时间戳。与其获取哈希和,不如制作 1:1 副本,然后逐字节比较它们 ( cmp -l
) 以找出到底发生了什么变化。
通常,修改文件系统的不是内核,而是您引导到的任何用户区。大多数 LiveCD(Live-USB-Stick),即使是那些用于救援目的的,也会通过挂载文件系统来搜索自己的实时数据来修改文件系统。对于 systemd/udev,在后台还会发生很多您可能没有意识到的魔法。
如果您能够修改 initramfs/early boot,请尝试/proc/sys/vm/block_dump
在进行其他操作之前进行设置,您可能会对 .txt 中写入的内容感到惊讶dmesg
。
注意:如果您已经将内核消息记录到磁盘,这将导致问题,因为每次写入都会单独导致日志的另一次写入。
我可以手动将文件系统挂载为只读,并根据需要卸载。
即使是只读挂载也并不总是保证不发生变化:
# truncate -s 100M foobar.iso
# losetup --find --show foobar.iso
/dev/loop0
# mkfs.ext4 foobar.iso
# md5sum foobar.iso
59dea589bb84855e282d1415b3238230 foobar.iso
# mount -o ro /dev/loop0 loop/
# md5sum /dev/loop0
47c89177d619b55b701a1ddbde352c90 /dev/loop0
这里发生了什么?不知道,真的...
--- a.txt 2018-12-26 20:39:13.578096660 +0100
+++ b.txt 2018-12-26 20:39:18.444742584 +0100
@@ -1536,11 +1536,10 @@
*
03000400 c0 3b 39 98 00 00 00 04 00 00 00 00 00 00 04 00 |.;9.............|
03000410 00 00 10 00 00 00 00 01 00 00 00 01 00 00 00 00 |................|
-03000420 00 00 00 00 00 00 00 00 00 00 00 12 00 00 00 00 |................|
+03000420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
03000430 15 de d5 f7 6f 52 43 9b a9 18 9b 3d 28 65 2d 51 |....oRC....=(e-Q|
03000440 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-03000450 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-03000460 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
+03000450 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
03800400 58 64 00 00 00 90 01 00 00 14 00 00 40 6d 01 00 |Xd..........@m..|
03800410 4d 64 00 00 01 00 00 00 00 00 00 00 00 00 00 00 |Md..............|
如果你想稍微强化只读的想法,请使用mount -o loop,ro
,它在两者之间添加了一个只读循环设备。但即便如此也不能保证任何事情。