A volte può capitare di avere a disposizione un file immagine di dimensioni superiori alla dimensione della propria scheda MicroSD, in questo caso, non sarà possibile scrivere l'immagine in nostro possesso direttamente sulla scheda ma, usando Linux e qualche comando avanzato è possibile, previa cancellazione di una quantità di dati sufficiente all'interno dell'immagine, andare a ridimensionare effettivamente l'immagine in maniera da poterla scrivere senza problemi sulla nostra MicroSD.
Per questo procedimento abbiamo bisogno di copiare la nostra immagine all'interno di un sistema Linux, nel mio caso ho utilizzato Linux Mint, che è un derivato di Ubuntu, ma in generale, essendo i comandi della guida abbastanza universali, si potranno eseguire senza grossi problemi anche in altre distribuzioni.
Se utilizzate Linux all'interno di una VM, è consigliabile copiare l'immagine all'interno del sistema operativo virtualizzato utilizzando una comunissima share samba che vi permetta di fare "ponte" da Windows al Linux dentro la VM, una semplice ricerca su Google vi potrà indirizzare su come fare per condividere una cartella via samba da Linux, uno dei primi risultati è il seguente: https://forums.linuxmint.com/viewtopic.php?t=224391.
Una volta copiata l'immagine all'interno del nostro sistema Linux possiamo procedere a montarla per potervi accedere e cominciare a cancellare il contenuto "superfluo" per far si che la dimensione dello spazio effettivamente occupato scenda al di sotto della dimensione massima della MicroSD a nostra disposizione:
Col comando fdisk andiamo a visualizzare il numero e le caratteristiche delle partizioni presenti nella nostra immagine:
Codice: Seleziona tutto
sudo fdisk -l imagename.img
Codice: Seleziona tutto
Device Boot Start End Blocks Id System
imagename.img1 8192 122879 57344 c W95 FAT32 (LBA)
imagename.img2 122880 15415295 7646208 83 Linux
Pertanto dopo esserci annotati il valore corrispondente alla colonna "START" ovvero 122880 nel nostro esempio, andremo a montare la partizione dell'immagine con i seguenti comandi:
Codice: Seleziona tutto
sudo losetup /dev/loop0 imagename.img -o $((START*512))
Creiamo quindi un mount point attraverso cui montare la partizione:
Codice: Seleziona tutto
sudo mkdir -p /retropie_img
sudo mount /dev/loop0 /retropie_img
Codice: Seleziona tutto
/home/pi/RetroPie/roms
Codice: Seleziona tutto
df -h
Una volta che la quantità di dati è stata sufficientemente ridotta per poterla scrivere sulla nostra MicroSD dobbiamo procedere con i comandi necessari a ridurre il File-System ext4 della partizione appena montata in maniera tale che non sia superiore alla dimensione massima consentita dalla nostra MicroSD.
Per fare ciò abbiamo bisogno di un programma specifico ovvero gparted.
gparted è una sorta di "Partition Magic" che gli informatici più navigati ricorderanno sicuramente, per installarlo su Linux Mint o Ubuntu digitare il seguente comando:
Codice: Seleziona tutto
sudo apt-get update && sudo apt-get install gparted
Codice: Seleziona tutto
sudo unmount /retropie_img
sudo gparted /dev/loop0
Comparirà una finestra con una serie di valori da inserire, l'unico che dovremo modificare è il valore "New size (MiB)" che dovremo portare ad un valore prossimo al "Minimum Size" visualizzato in alto, per essere sicuri, suggerisco di andare ad inserire circa 500 MB in più rispetto al valore minimo possibile, così se ad esempio il valore di Minimum Size è pari a: 20000MiB il valore di "New size" lo imposteremo a 20500MiB.
Inserito il valore New size andremo ad applicare la modifica cliccando sulla voce di Menu "Edit" e poi "Apply all operations".
Il procedimento di ridimensionamento del file-system avrà inizio e comparirà una finestra di stato che mostrerà l'avanzamento della procedura simile a quella di seguito:
NOTA: E' importantissimo annotare il valore in K della nuova dimensione del file-system perchè ci servirà tra poco, dovrete quindi esplodere i dettagli della schermata cliccando sui vari triangolini neri a sinistra fino a visualizzare l'output del comando resize2fs che viene eseguito, e annotarvi il valore numerico espresso in K che segue, nel caso dell'immagine allegata è pari a 1790976K
Eseguita questa operazione manca l'ultimo step, ovvero quello di andare a definire la nuova dimensione della partizione contente il file-system appena ridimensionato, per fare ciò useremo nuovamente il comando fdisk ma non più sulla singola partizione ma sull'intera immagine, non abbiamo quindi più bisogno del device /dev/loop0 attuale e lo rimuoviamo col seguente comando:
Codice: Seleziona tutto
sudo losetup -d /dev/loop0
Codice: Seleziona tutto
sudo losetup /dev/loop0 imagename.img
Codice: Seleziona tutto
sudo fdisk /dev/loop0
Codice: Seleziona tutto
d 2
Poi:
Codice: Seleziona tutto
n p 2
Inseriremo come valore di START della seconda partizione il valore annotato per primo ovvero lo "START" che nel nostro esempio era pari a:
Codice: Seleziona tutto
122880
Codice: Seleziona tutto
+1790976K
Codice: Seleziona tutto
w
Non abbiamo ancora finito, l'ultimo step è quello di "tagliare via" lo spazio oramai inutilizzato del file immagine che ancora risulta occupare su disco la sua dimensione originaria, per fare ciò andremo a digitare i seguenti comandi:
Codice: Seleziona tutto
sudo fdisk -l /dev/loop0
Codice: Seleziona tutto
sudo fdisk -l /dev/loop0
Disk /dev/loop0: 2077 MB, 2077229056 bytes
4 heads, 32 sectors/track, 31696 cylinders, total 4057088 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x10d58467
Device Boot Start End Blocks Id System
/dev/loop0p1 * 8192 124927 58368 e W95 FAT16 (LBA)
/dev/loop0p2 124928 4055039 1965056 83 Linux
Codice: Seleziona tutto
sudo losetup -d /dev/loop0
Codice: Seleziona tutto
truncate -s $(((END+1)*512)) imagename.img
Ecco fatto, abbiamo ridotto la nostra immagine ad una dimensione tale da poter essere scritta sulla nostra MicroSD e utilizzata nella nostra Raspberry Pi, ben fatto!
La guida è stata scritta prendendo spunto dalla seguente guida in inglese disponibile http://www.aoakley.com/articles/2015-10 ... images.php.
Un saluto a tutti.
Giorgio