Linux 内核是否会更改未挂载的 ext4 分区?

Linux 内核是否会更改未挂载的 ext4 分区?

当 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,它在两者之间添加了一个只读循环设备。但即便如此也不能保证任何事情。

相关内容