VFATファイルシステムをアンマウントすると、FAT全体が読み取られるのはなぜですか?

VFATファイルシステムをアンマウントすると、FAT全体が読み取られるのはなぜですか?

DSLRで使用しているSDカードのファイルシステムをマウント解除するたびに、コマンドが完了するまで数秒待つ必要がありますumount。 FSを読み取り専用でマウントしてすぐにマウント解除した場合も同様です。マウントコマンドは簡単です。

mount /dev/sdd1 /mnt/tmp -oro

私は何が起こっているかを確認するために設定しようとしましたが、vm.block_dump=1これが私が発行したときに見ましたumount /mnt/tmp

$ tail -n9999 /var/log/kern.log | grep sdd1
<...>
Jul  7 16:56:42 IntegralH kernel: [143924.204781] umount(16203): READ block 1635 on sdd1 (1 sectors)
Jul  7 16:56:42 IntegralH kernel: [143924.210786] umount(16203): READ block 1636 on sdd1 (1 sectors)
Jul  7 16:56:42 IntegralH kernel: [143924.216805] umount(16203): READ block 1637 on sdd1 (1 sectors)
Jul  7 16:56:42 IntegralH kernel: [143924.222841] umount(16203): READ block 1638 on sdd1 (1 sectors)
Jul  7 16:56:42 IntegralH kernel: [143924.228867] umount(16203): READ block 1639 on sdd1 (1 sectors)
<...>
Jul  7 16:57:34 IntegralH kernel: [143976.105848] umount(16203): READ block 9006 on sdd1 (1 sectors)
Jul  7 16:57:34 IntegralH kernel: [143976.111932] umount(16203): READ block 9007 on sdd1 (1 sectors)
Jul  7 16:57:34 IntegralH kernel: [143976.117915] umount(16203): READ block 9008 on sdd1 (1 sectors)

ブロック1639の後のスキップされた部分は、1639と9006の間の各ブロックに対する単一のブロック読み取りから構成される。私の疑いが正しいことを確認するために、FSの最初のセクターをチェックしました。

$ sudo head -c 40 /dev/sdd1 | xxd -g1
0000000: eb 00 90 43 41 4e 4f 4e 45 4f 53 00 02 40 62 06  ...CANONEOS..@b.
0000010: 02 00 00 00 00 f8 00 00 3f 00 ff 00 00 20 00 00  ........?.... ..
0000020: 00 18 9a 03 cf 1c 00 00                          ........

予約されたセクタ(FATの最初のセクタを表す、オフセット0x0Eの2バイト)の数が0x662、つまり1634であることがわかります。 FATのサイズ(オフセット0x24から4バイト)は0x1ccf、つまり7375 = 9008 + 1-1634です。つまり、ドライバは最初のセクタを除くFAT全体を読み込みます。

今、ドライバがファイルシステムをアンマウントするためにFAT全体を読む必要があるのはなぜですか?このように時間がかかる作業を避ける方法は?

ベストアンサー1

おすすめ記事