Resize FAT32 filesystem
Moderatore: Staff
Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
- joe
- Iper Master

- Messaggi: 3986
- Iscritto il: ven 27 apr 2007, 11:21
- Slackware: 15.0
- Kernel: 5.15.38
- Desktop: dwm
Resize FAT32 filesystem
Sapreste indicarmi un tool in grado di ridimensionare questo tipo di filesystem. Qualcosa di equivalente a resize2fs per ext o ntfsresize per ntfs.
L'unica cosa che trovo in rete è parted, ma non vogli basarmi sulla tabella delle partizioni, voglio solo lavorare sul filesystem.
grazie in anticipo.
L'unica cosa che trovo in rete è parted, ma non vogli basarmi sulla tabella delle partizioni, voglio solo lavorare sul filesystem.
grazie in anticipo.
- andy-x
- Linux 1.x

- Messaggi: 139
- Iscritto il: lun 13 lug 2009, 11:19
- Slackware: 12.2
- Kernel: 2.6.27.7
- Desktop: kde
Re: Resize FAT32 filesystem
Ciao.
Prova a leggere questo post viewtopic.php?f=6&t=30131
a suo tempo mi avevano consigliato di usare gparted.
Provato e' forte e ora non posso piu' farne a meno....
Spero ti possa essere utile.
Prova a leggere questo post viewtopic.php?f=6&t=30131
a suo tempo mi avevano consigliato di usare gparted.
Provato e' forte e ora non posso piu' farne a meno....
Spero ti possa essere utile.
- joe
- Iper Master

- Messaggi: 3986
- Iscritto il: ven 27 apr 2007, 11:21
- Slackware: 15.0
- Kernel: 5.15.38
- Desktop: dwm
Re: Resize FAT32 filesystem
Due domande:
1- parted è in grado di ridimensionare solo il filesystem senza toccare la partizione che lo contiene?
2- sto facendo alcune prove su l'immagine di un disco, senza l'uso di macchine virtuali o altro. In pratica le partizioni presenti nell'immagine non sono mappate contro un file speciale corrispondente. Per lavorare sulla partizione dove sta il filesystem mi basta usare losetup e accedervi specificandone l'offset (byte di inizio partizione):
Da quanto invece mi pare di intuire parted (o GParted che mi pare ne si basi in qualche modo sul primo) si basa sulla tabella delle partizioni e immagino che si aspetti di trovare un file speciale associato alla partizione, nel mio caso voglio provare a ridimensionare e maniploare le partizioni e i filesystem mappando a mano le varie partizioni col comando sopra.
EDIT:
Prima diinviare il messaggio ho fatto una prova e dato un'occhiata al manuale.
Sembra che parted non si fidi della tabella delle partizioni che ho creato con fdisk. Infatti, agganciando l'immagine del disco (ottenuto da una sd da 512MB) al /dev/loop0 e dato in pasto questo device a parted eccone il risultato. Notare di seguito cosa dice invece fdisk:
Tuttavia forse può tornarmi utile infatti è possibile dargli in pasto anche una partizione singola. Ho provato a dargli la partizione "3" collegandola al device /dev/loop3:
Ovviamente la numerazione dei settori salta, ma il numero di settori su cui si estende la partizione è corretto.
Ora bisogna capire come sia possibile ridimensionarne il filesystem fat che vi è sopra... farò qualche prova.
1- parted è in grado di ridimensionare solo il filesystem senza toccare la partizione che lo contiene?
2- sto facendo alcune prove su l'immagine di un disco, senza l'uso di macchine virtuali o altro. In pratica le partizioni presenti nell'immagine non sono mappate contro un file speciale corrispondente. Per lavorare sulla partizione dove sta il filesystem mi basta usare losetup e accedervi specificandone l'offset (byte di inizio partizione):
Codice: Seleziona tutto
# losetup -o ${startbyte} --sizelimit ${partition_size} /dev/loop${partition_number} diskimageEDIT:
Prima diinviare il messaggio ho fatto una prova e dato un'occhiata al manuale.
Sembra che parted non si fidi della tabella delle partizioni che ho creato con fdisk. Infatti, agganciando l'immagine del disco (ottenuto da una sd da 512MB) al /dev/loop0 e dato in pasto questo device a parted eccone il risultato. Notare di seguito cosa dice invece fdisk:
Codice: Seleziona tutto
# losetup /dev/loop0 parted_sdcard
# parted /dev/loop0 unit s print
Model: Unknown (unknown)
Disk /dev/loop/0: 1002496s
Sector size (logical/physical): 512B/512B
Partition Table: loop
Number Start End Size File system Flags
1 0s 1002495s 1002496s fat16
# fdisk -lu /dev/loop0
Disk /dev/loop0: 513 MB, 513277952 bytes
4 heads, 16 sectors/track, 15664 cylinders, total 1002496 sectors
Units = sectors of 1 * 512 = 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/loop0p1 16 100031 50008 83 Linux
/dev/loop0p2 100032 295359 97664 7 HPFS/NTFS
/dev/loop0p3 295360 1002495 353568 c W95 FAT32 (LBA)Codice: Seleziona tutto
# parted /dev/loop3 unit s print
Model: Unknown (unknown)
Disk /dev/loop/3: 707136s
Sector size (logical/physical): 512B/512B
Partition Table: loop
Number Start End Size File system Flags
1 0s 707135s 707136s fat32Ora bisogna capire come sia possibile ridimensionarne il filesystem fat che vi è sopra... farò qualche prova.
- joe
- Iper Master

- Messaggi: 3986
- Iscritto il: ven 27 apr 2007, 11:21
- Slackware: 15.0
- Kernel: 5.15.38
- Desktop: dwm
Re: Resize FAT32 filesystem
Non riesco perchè ottengo un errrore.
Prima ho controllato e sembra che ci siano circa 13 MB di roba che ovviamente vorrei non perdere nel processo di ridimensionamento del filesystem.
Fatti i conti coi settori (dosfsck da info utili a proposito di come è riempito il filesystem e se ne deduce con qualche calcolo la dimensione dei "cluster" utilizzati) 30000 settori sono 30000*512bytes/settore.
Però a monte di tutto questo mi chiedo come mai sia così difficile trovare un tool specifico per il filesystem FAT in grado di effettuarne il resize senza perdita di dati. Tanto per dire, mi pare che dovrebbe essere più improbabile trovare un tool che gestisca ntfs, invece è saltato subito fuori ntfsresize.
Al momento ho scandagliato la rete con google, ma non riesco ad ottenere risultati, più che altro il punto è che una azione di resize del filesystem è accompagnata quasi sempre da un ridimensionamento anche della partizione in cui il filesystem si trova e questo mi complica un po' la ricerca perchè salta fuori sempre parted, gparted e compagnia.
Codice: Seleziona tutto
# parted /dev/loop3
GNU Parted 1.8.8
Using /dev/loop/3
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) u s
(parted) p
Model: Unknown (unknown)
Disk /dev/loop/3: 707136s
Sector size (logical/physical): 512B/512B
Partition Table: loop
Number Start End Size File system Flags
1 0s 707135s 707136s fat32
(parted) resize 1 0 30000
Error: Unable to satisfy all constraints on the partition
Fatti i conti coi settori (dosfsck da info utili a proposito di come è riempito il filesystem e se ne deduce con qualche calcolo la dimensione dei "cluster" utilizzati) 30000 settori sono 30000*512bytes/settore.
Però a monte di tutto questo mi chiedo come mai sia così difficile trovare un tool specifico per il filesystem FAT in grado di effettuarne il resize senza perdita di dati. Tanto per dire, mi pare che dovrebbe essere più improbabile trovare un tool che gestisca ntfs, invece è saltato subito fuori ntfsresize.
Al momento ho scandagliato la rete con google, ma non riesco ad ottenere risultati, più che altro il punto è che una azione di resize del filesystem è accompagnata quasi sempre da un ridimensionamento anche della partizione in cui il filesystem si trova e questo mi complica un po' la ricerca perchè salta fuori sempre parted, gparted e compagnia.
- joe
- Iper Master

- Messaggi: 3986
- Iscritto il: ven 27 apr 2007, 11:21
- Slackware: 15.0
- Kernel: 5.15.38
- Desktop: dwm
Re: Resize FAT32 filesystem
Visto che l'argomento potrebbe sembrare piuttosto spigoloso, proverei a semplificarlo in modo da focalizzare meglio il punto.
Poniamo di creare un file vuoto con dd e formattarlo fat16 per esempio, con mkdosfs.
Otteniamo un file formattato in fat16 che possiamo montare in loop, e copiarvi sopra alcuni dati. Per esempio poniamo di creare un file di 100 MB e copiarvi sopra, un po' di dati, mettiamo che riempiano al 30% il filesystem.
Vediamo di tradurre il tutto in comandi:
Ok, a questo punto ho creato un file formattato in FAT16 di circa 100 MB, l'ho montato e vi ho copiato dei dati, nell'esempio si trattava di documentazione riguardante firewall e roba simile.
Alla fine ho lanciato nuovamente dosfsck per capire quanto fosse precisamente riempito il filesystem.
Ci sono 13743 cluster occupati su un totale di 51091 clusters. Ciascun cluster ha una dimensione espressa in bytes di 2048.
Pertanto la parte del filesystem occupata è di 28145664 bytes su un totale di 104634368 bytes.
Il punto è il seguente:
Come ridimensionare il filesystem in modo da ottenerlo di dimensione pari a 35000000 bytes e senza ovviamente perdere i dati?
Francamente non ho ancora trovato una applicazione che mi abbia consentito di ottenere un risultato.
Parted l'ho provato ma rstituisce un errore. Fatresize l'ho provato ma è sempre basato in qualche modo su parted e restituisce lo stesso errore.
La butto lì, se aveste voglia, potreste fare la stessa rapida prova anche voi, i comandi sono in bella vista nel codice che ho riportato.
Con strumenti come ntfsresize e resize2fs si riesco senza problemi se si ha a che fare con filesystem rispettivamente NTFS e EXT2/3.
Per il filesystem fat invece non ho ancora trovato un tool equivalente. E mi sembra molto strano vista la diffusione di tale filesystem pur con tutti i suoi limiti sicuramente.
NOTA:
Non vale
spostare i dati in uno spazio di appoggio, ricreare il file più piccolo e riformattarlo, quello non sarebbe più un resize.
In ogni caso grazie se potete darmi una risposta
Poniamo di creare un file vuoto con dd e formattarlo fat16 per esempio, con mkdosfs.
Otteniamo un file formattato in fat16 che possiamo montare in loop, e copiarvi sopra alcuni dati. Per esempio poniamo di creare un file di 100 MB e copiarvi sopra, un po' di dati, mettiamo che riempiano al 30% il filesystem.
Vediamo di tradurre il tutto in comandi:
Codice: Seleziona tutto
# dd if=/dev/zero of=fatimage bs=512K count=200
200+0 records in
200+0 records out
104857600 bytes (105 MB) copied, 2.24514 s, 46.7 MB/s
# mkdosfs fatimage
mkdosfs 2.11 (12 Mar 2005)
# dosfsck -v fatimage
dosfsck 2.11 (12 Mar 2005)
dosfsck 2.11, 12 Mar 2005, FAT32, LFN
Checking we can access the last sector of the filesystem
Boot sector contents:
System ID "mkdosfs"
Media byte 0xf8 (hard disk)
512 bytes per logical sector
2048 bytes per cluster
1 reserved sector
First FAT starts at byte 512 (sector 1)
2 FATs, 16 bit entries
102400 bytes per FAT (= 200 sectors)
Root directory starts at byte 205312 (sector 401)
512 root directory entries
Data area starts at byte 221696 (sector 433)
51091 data clusters (104634368 bytes)
32 sectors/track, 64 heads
0 hidden sectors
204800 sectors total
Checking for unused clusters.
fatimage: 0 files, 0/51091 clusters
# mount -o loop -t auto fatimage mountpoint
# cp -a /media/doc/doc.old/firewall mountpoint/
# umount fatimage
# dosfsck -v fatimage
dosfsck 2.11 (12 Mar 2005)
dosfsck 2.11, 12 Mar 2005, FAT32, LFN
Checking we can access the last sector of the filesystem
Boot sector contents:
System ID "mkdosfs"
Media byte 0xf8 (hard disk)
512 bytes per logical sector
2048 bytes per cluster
1 reserved sector
First FAT starts at byte 512 (sector 1)
2 FATs, 16 bit entries
102400 bytes per FAT (= 200 sectors)
Root directory starts at byte 205312 (sector 401)
512 root directory entries
Data area starts at byte 221696 (sector 433)
51091 data clusters (104634368 bytes)
32 sectors/track, 64 heads
0 hidden sectors
204800 sectors total
Checking for unused clusters.
fatimage: 235 files, 13743/51091 clusters
Alla fine ho lanciato nuovamente dosfsck per capire quanto fosse precisamente riempito il filesystem.
Ci sono 13743 cluster occupati su un totale di 51091 clusters. Ciascun cluster ha una dimensione espressa in bytes di 2048.
Pertanto la parte del filesystem occupata è di 28145664 bytes su un totale di 104634368 bytes.
Il punto è il seguente:
Come ridimensionare il filesystem in modo da ottenerlo di dimensione pari a 35000000 bytes e senza ovviamente perdere i dati?
Francamente non ho ancora trovato una applicazione che mi abbia consentito di ottenere un risultato.
Parted l'ho provato ma rstituisce un errore. Fatresize l'ho provato ma è sempre basato in qualche modo su parted e restituisce lo stesso errore.
La butto lì, se aveste voglia, potreste fare la stessa rapida prova anche voi, i comandi sono in bella vista nel codice che ho riportato.
Con strumenti come ntfsresize e resize2fs si riesco senza problemi se si ha a che fare con filesystem rispettivamente NTFS e EXT2/3.
Per il filesystem fat invece non ho ancora trovato un tool equivalente. E mi sembra molto strano vista la diffusione di tale filesystem pur con tutti i suoi limiti sicuramente.
NOTA:
Non vale
spostare i dati in uno spazio di appoggio, ricreare il file più piccolo e riformattarlo, quello non sarebbe più un resize.
In ogni caso grazie se potete darmi una risposta
- joe
- Iper Master

- Messaggi: 3986
- Iscritto il: ven 27 apr 2007, 11:21
- Slackware: 15.0
- Kernel: 5.15.38
- Desktop: dwm
Re: Resize FAT32 filesystem
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.
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:
Codice: Seleziona tutto
(clustersize) * 2^16Codice: Seleziona tutto
1024 * 2^16 = 67108864 bytesMa 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:
Codice: Seleziona tutto
# mkdosfs -F 32 fatimageTentando 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.