Piero V.

exFAT: occhio al cluster size

Contestualizzazione

Di recente, ho aiutato una persona che conosco a risolvere un problema con dei file di sistema di Windows corrotti. Speravo fosse la volta buona che riuscissi a risolvere un problema con sfc. Invece, dopo una giornata di tentativi, ho deciso di procedere con la formattazione e confermare l’inutilità di quegli strumenti 😓️.

Abbiamo colto l’occasione per cambiare l’HDD con un’SSD e quindi ci siamo trovati con un lento disco da 500GB in più tra le mani. Così abbiamo deciso di usarlo per creare un backup da mettere via e sperare che non serva mai usare.

500GB non sono molti, sicuramente non è abbastanza per poter fare versionamenti. Anzi, i dati originali sono un po’ più di 500GB, quindi sapevamo in partenza che sarebbe servito fare dei sacrifici. Ma avere una copia del genere è sempre meglio che avere un disco e non usarlo o svenderlo.

Ci sono mille modi di fare un backup, ma ho deciso di tenere le cose semplici, e fare un rsync -a delle directory da copiare. Detto schiettamente: se mai dovesse servire, vorrebbe dire che tutti gli altri sistemi “più seri” avrebbero fallito. E doversi preoccupare di come recuperare i dati sarebbe solamente l’ennesimo problema…

Inoltre ho parlato di rsync perché il server in questione è Linux, ma tutti gli altri computer della rete in questione sono Windows.

Nonostante se ne parli da un po’, il modulo NTFS nativo di Paragon non è ancora arrivato nel kernel, e per grosse quantità di file il peso sulla CPU della soluzione con FUSE si sente ancora anche sulle CPU più nuove.

In passato ho apprezzato parecchio FAT32 per i dispositivi tipo chiavette USB, memory card, etc, per via della sua estrema compatibilità con fondamentalmente tutti i dispositivi, non solo i computer. Tuttavia, ad un certo punto ho ridotto molto il suo utilizzo, poiché le sue limitazioni si facevano sentire sempre più frequentemente. Ne avevo già parlato quasi 10 anni fa 😄️ .

Quindi sono rimasto estremamente felice quando ho scoperto exFAT e lo uso ogni volta che so che un certo dispositivo dovrà essere usato solo per trasferire dati e tra OS diversi. Allora ho deciso di usarlo anche per questo caso.

Il problema

Avevo previsto che non sarei riuscito a mettere tutti i dati nel backup, ma ho riempito il disco ben prima di quando mi sarei aspettato.

In particolare, ho notato che una directory di poco meno di 700MB, ne stava occupando quasi il doppio. E ho così imparato che il comando du è letteralmente usage, nel senso che non riporta la dimensione dei file, ma quanto stanno occupando.

Infatti, molti filesystem non sono quantizzati al byte, ma al cluster, utilizzando la terminologia di Microsoft, o al blocco usando il lessico di Linux.

L’opzione predefinita per questa dimensione è di 4kiB, sia per ext4 che per NTFS, invece per FAT dipende dalla dimensione del volume.

Con exFAT, in particolare, sopra ai 32GB il cluster size di default è 128kB. Questo significa che per ogni MB ci possono essere al più 8 file! E il numero di queste unità occupate da un file è arrotondato per eccesso, quindi se un file di 129kB occupa 2 cluster.

Se si hanno tanti file piccoli, avere un cluster size troppo elevato porta a uno spreco di spazio vuoto del dispositivo di archiviazione. D’altra parte ci sono anche svantaggi ad avere blocchi piccoli, in particolare, una maggior frammentazione. Oppure, nel caso di memorie flash, alla scrittura dello stesso settore più volte, e di conseguenza un’usura maggiore.

In ogni caso, se non si fa attenzione a scegliere la giusta dimensione in fase di formattazione, il modo più sicuro per sistemare è copiare tutto il contenuto su un’altra partizione, e riformattare il volume. Ci sono dei tool che consentono di evitare la formattazione, ma non li ho provati, però da quanto ho capito si rischia la perdita o corruzione di alcuni dati.