Non so se qualcuno abbia poi fatto un tentativo seguendo gli step soprariportati.
Dal canto mio non ho trovato altro che parted e fatresize. Che poi stringi stringi lavorano allo stesso modo in quanto il secondo si basa sul primo.
Il discorso è abbastanza ingarbugliato, ma penso di essere venuto a capo del problema.
Abbiamo la nostra immagine da 100MB, formattata in fat.
Non basta per definire la situazione in modo completo: di FAT ve ne sono 3 tipi e ciascuno presenta limitazioni importanti.
Quello che ho provato è la formattazione dell'immagine con mkdosfs in modo da ottenere un filesystem FAT16 di 100 MB.
Ne ho riempito 30MB di dati e poi ho tentato il resize stringendo il filesystem a 50 MB, bene, sono riuscito, sembra che fatresize così come parted su cui si basa, sia in grado di effettuare questa operazione. Alla fine ottengo un file di 100MB al cui interno è presente un filesystem fat16 da 50MB.
Ok, il problema qual è allora?
Bè ho provato a riportare il filesystem alla dimensione di partenza ma non vi sono riuscito, l'errore dice:
"No Implementation: GNU Parted cannot resize this partition to this size. We're working on it!"
Ho letto un po' il manuale di parted e a quanto pare lo shrink del fat16 è sempre possibile, il problema è però il contrario, cioè il "grow".
Infatti lavorando con dosfsck e con fatresize sembra che il filesystem di aprtenza creato con mkdosfs avesse dei clusters da 2048 bytes.
fatresize durnante lo shrink ha preso l'iniziativa di cambiare la dimensione del singolo cluster portandola a 1024 bytes e riorganizzando il numerodi clusters per coprire i 50 MB.
Purtroppo fat16 ha la seguente caratteristica, non può superare la seguente dimensione:
nel mio caso
Pertanto se provo con faresize a allargare ilfilesystema anche a 65 bytes, funziona.
Ma se invece tento di arrivare a 100MB mi dà l'errore visto sopra.
Leggendo qua e la pare che fat32 non abbia problemi di questo genere.
Bene, allora all'atto della creazione del filesystem ho dato:
E ho creato un filesystem FAT32 di 100MB.
Tentando lo shrink eooco il pasticcio:
# fatresize -v -s 50000000 -p fatimage
fatresize 1.0.2 (03/21/10)
.Error: FAT32 partition must be bigger than 512Mb.
Questo errore mostra come mkdosfs sia di gran lunga più elastico di fatresize/parted, infatti il primo non ha fatto una piega a creare un filesystem di 100 MB, mentre il secondo si lamenta che una partizione FAT32 debba essere almeno di 512 MB.
La soluzione potrebbe essere quella di usare un filesystem FAT16 e poter modificare il clustersize a piacimento senza perdita di dati. fatresize è in grado di stringere la dimensione dei cluster ma lo fa in modo automatico e allo stesso tempo non è poi più in grado di allargarli.
Tutte questi test confermano tutti i miei dubbi circa l'assenza di un tool ad hoc per fat filesystem non basato su parted.