2

В соответствии с «спецификацией» Microsoft FAT32, для томов FAT32 их флаг «очистки» (ClnShutBit) должен быть очищен при монтировании и установлен при отключении / извлечении.

Действительно, это поведение в Linux и Mac OS X - при подключении устройства чтения / записи USB-устройства FAT32 оно помечается как «грязное», а при отключении - «чистое». Если устройство удалено без демонтажа / извлечения, флажок остается очищенным (не чистым / грязным).

Если USB-накопитель, помеченный как «грязный», вставлен в Windows 10, для пользователя выскакивает сообщение «Возможно, проблема ...» и появляется запрос на сканирование и исправление. Технически это верно - проблема может быть, но может и не возникать (например, если записи на диск были полностью очищены перед удалением вручную). Windows не придерживается «спецификации» - кажется, что USB-накопители помечены как чистые, даже когда они подключены, чтобы они не получали этого приглашения, если они были вручную удалены и вставлены (возможно, помечены как грязные до операций записи и чистить после завершения? - не знаю).

Как я могу заставить этот флаг быть чистым в Linux?

(пожалуйста, никаких ответов о том, почему бы не сделать это и т. д.)

Элемент дизайна файловой системы Wikipedia FAT говорит о специальных записях в FAT, и существует документ Microsoft, плавающий вокруг InterWebs под названием "Спецификация Microsoft FAT" (FAT32 Spec (SDA Contribution) .pdf), в котором говорится о ClnShutBitMask.

Однако мне неясно, как его найти. Если я подключаю том USB FAT32 (в Linux) только для чтения, копирую содержимое в файл с помощью dd, затем снова монтирую его в режиме чтения-записи и снова копирую, байты совпадают.

например, 8 Гб USB-накопитель df сообщает как /dev /sdd1

sudo mount -o remount,ro /media/user/USB/
sudo dd if=/dev/sdd of=/tmp/usbbytes-ro bs=1024 count=8388608
sudo mount -o remount,rw /media/user/USB/
sudo dd if=/dev/sdd of=/tmp/usbbytes-rw bs=1024 count=8388608
cmp -l /tmp/usbbytes-ro /tmp/usbbytes-rw

Отчеты ничем не отличаются. FYI:

sudo file -s /dev/sdd   
/dev/sdd: DOS/MBR boot sector; partition 1 : ID=0xc, active, start-CHS (0x0,32,33), end-CHS (0x3d3,48,29), startsector 2048, 15728640 sectors
sudo file -s /dev/sdd1   
/dev/sdd1: DOS/MBR boot sector, code offset 0x58+2, OEM-ID "SYSLINUX", sectors/cluster 8, Media descriptor 0xf8, sectors/track 62, heads 248, hidden sectors 2048, sectors 15728640 (volumes > 32 MB), FAT (32 bit), sectors/FAT 15336, reserved 0x1, serial number 0x98d03da8, label: "USB        "

Есть идеи?

(для любопытства у нас есть встроенное устройство под управлением Debian9, которое позволяет пользователям вставлять и извлекать USB-накопители вручную, но не имеет возможности пользовательского интерфейса для «извлечения». Пользователи жалуются, что любой USB, вставленный и извлеченный из устройства, впоследствии выдает запрос «scan & fix» в Windows)

Спасибо!

0