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를 읽어야 하는 이유가 무엇인지 궁금합니다. 이렇게 시간이 많이 걸리는 작업을 피하는 방법은 무엇입니까?

관련 정보