Sicuramente vi siete chiesti "Ma se io ho creato una distro per il Raspberry Pi su una microSD da 16GB e voglio condividerla, come posso ridurre i GB della distro stessa???"
Tre anni fa mi sono posto la stessa domanda, anche perchè bisognerebbe fare il dd dell'intera microSD e non basta ridurre la partizione di root (quella con il sistema operativo, quindi la seconda) per fare questo, perchè il dd dell'intero device vi copierà anche lo spazio non partizionato.
Cercando in rete trovai una soluzione formidabile.
Prima di tutto createvi la vostra distro, customizzatela quanto volete ed alla fine spegnete il vostro raspi con un bel poweroff da terminale.
Un consiglio, prima di spegnere il raspi cancellate il file "/etc/udev/rules.d/70-persistent-net.rules".
Quel file mappa le unità di rete (eth0, wlan0, ecc...) e se non lo eliminate il vostro amico non potrà navigare su internet a meno che non si cancella da solo a mano quel file e riavvia il sistema oppure abilita la seconda unità di rete con il comando:
# ifconfig eth1 up
perchè appunto eth0 è la vostra scheda di rete.
Ritorniamo a noi. Mettiamo il caso che il sistema è OK ed avete spento il Raspberry Pi. Estraete la microSD, mettetela nel PC ed in via precauzionale fate il "dd" dell'intera microSD. Ricordatevi di smontare le partizioni, il dd si fa sempre a partizioni smontate, e smontatele dalla riga di comando con il comando "umount", perchè spesso quando smontate una partizione da un ambiente desktop ve la disalimenterà, e quindi non sarete più in grado di vederla. Mettiamo il caso che la microSD è "/dev/sdb" , diamo il comando:
# umount /dev/sdb1 && umount /dev/sdb2
Ora che abbiamo smontato le unità facciamo il "dd" dell'intera partizione con il comando:
# dd if=/dev/sdb of=backup.img && sync
backup.img è il nome del file che genererà. Dategli il nome che volete, ed abbiate pazienza, ci metterà parecchio tempo.
Vi sconsiglio di farlo con un card reader USB, ci metterete molto più tempo, meglio su un pc portatile recente con lettore SD integrato, va molto più veloce.
Quando ha finito aprite Gparted e riducete lo spazio della partizione di sistema (la seconda, quella con il file system ext4 per intenderci). Gparted vi colorerà di giallo la parte dove ci sono i dati e di bianco quella dove non c'è nulla. Lasciate almeno 200-300mb in più rispetto ai dati, poi il vostro amico si farà l'expand della partizione con il raspi-config o con Gparted.
Adesso scarichiamo questo programma chiamato raspi-builder: You are not allowed to view links.
Register or
LoginDopo averlo scaricato, estraetelo col comando:
$ tar -xvzf raspi-builder.tar.gz
Vi ritroverete davanti una cartella chiamata raspi-builder ed al suo interno tre file: genimage.sh, ptgen.c ed il README che tra l'altro è abbastanza chiaro.
Entrate nella cartella raspi-builder e sempre con la microSD smontata salvate la prima partizione chiamandola "boot.img" e la seconda (quella di sistema) "root.img" sempre con il "dd", digitando quindi:
# dd if=/dev/sdb1 of=boot.img && dd if=/dev/sdb2 of=root.img && sync
Ora che abbiamo creato questi due file ci basta soltanto lanciare lo script "genimage.sh" senza alcun parametro. Si occuperà lui di compilare il sorgente in C "ptgen.c" e di unire le due partizioni formando finalmente il nostro file immagine, e lo chiamerà "image.bin". Quindi lanciamo lo script digitando:
# ./genimage.sh
Quando lo script avrà finito come vi dicevo prima genererà il file "image.bin", ma con i permessi di root, quindi digitiamo:
# chmod 777 image.bin
Adesso potete dargli il nome che volete, magari comprimetelo (io uso sempre il formato 7z) e passatelo a chi volete.
Spero abbiate gradito l'articolo, se ci sono incomprensioni ditemelo così chiarisco il tutto. Buona fortuna!!!