¿Cómo 'Manualmente' borrar el bit 'sucio' FAT32?

2

De acuerdo con la "especificación" de Microsoft FAT32, los volúmenes FAT32 deben tener su indicador "limpio" (ClnShutBit) borrado cuando se monta y establece cuando se desmonta / expulsa.

De hecho, este es el comportamiento en Linux & amp; Mac OS X: montar un dispositivo USB FAT32 de lectura / escritura lo marca como 'sucio' y al desmontarlo lo marca 'limpio'. Si el dispositivo se retira sin desmontar / expulsar, el indicador permanece borrado (no está limpio / sucio).

Si se inserta una unidad USB marcada como "sucia" en Windows 10, aparece un mensaje emergente para el usuario que dice "Puede haber un problema ..." y solicita un Scan & amp; Fijar. Esto es técnicamente cierto: podría haber un problema, pero también podría no serlo (por ejemplo, si las escrituras en la unidad se vaciaron completamente antes de la extracción manual). Windows no se adhiere a la 'especificación': parece que marca los discos USB limpios incluso cuando están montados para que no reciban este aviso si se los quita y reinserta manualmente (tal vez se marca como sucio antes de las operaciones de escritura y ¿Limpio después de terminar? - No sé

¿Cómo puedo forzar que esta bandera esté limpia en Linux?

(por favor, no hay respuestas sobre por qué no hacerlo, etc.)

los Entrada del diseño del sistema de archivos FAT de Wikipedia. habla sobre entradas especiales en una FAT y hay un documento de Microsoft que flota alrededor de las InterWebs llamado "Especificación FAT de Microsoft" (FAT32 Spec (SDA Contribution) .pdf) que habla sobre la ClnShutBitMask.

Sin embargo, no tengo claro cómo encontrarlo. Si instalo un volumen USB FAT32 (en Linux) como de solo lectura, copio el contenido a un archivo usando dd, luego vuelva a montarlo como lectura-escritura y lo copio de nuevo, los bytes son iguales.

p.ej. La memoria USB de 8GB df informa como en / 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

Informes de nada diferente. Para tu información:

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        "

¿Algunas ideas?

(para los curiosos, tenemos un dispositivo integrado que ejecuta Debian9 que permite a los usuarios insertar y extraer manualmente unidades USB, pero no tiene una interfaz de usuario para "expulsar". ; mensaje de reparación 'en Windows)

¡Gracias!

DavidJ
fuente
Un poco de información aquí ... github.com/dosfstools/dosfstools/issues/38
Moab
Pregunta similar en Unix & amp; Linux SE.
Kamil Maciorowski