
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
それらの間に読み取り専用ループデバイスを追加するを使用してください。しかし、それでさえ何も保証しません。