Ecco come creare partizioni di ripristino con Raspberry PI

Tutti (o quasi) i sistemi operativi moderni offrono partizioni di ripristino, che sono utilizzate (da come ben si può evincere dal nome) per ripristinare il sistema in caso di problemi.

Vi è una versione alternativa di Raspbian che permette di ripristinare il Raspberry PI o altri device senza dover cancellare i dati all’interno della scheda SD, scaricare ulteriori immagini o senza utilizzare un altro computer.

 

 

Per fare ciò occorre:

partizioni

In seguito vi sarà un tutorial che descriverà la procedura per creare un’immagine di avvio con una partizione di ripristino (disponibile anche qui).

Una volta assicurati di aver installato uuidgen (nel caso eseguire sudo apt install uuid-runtime) creare una cartella di lavoro nella quale saranno installate le immagini di Raspbian Stretch Full e Raspbian Stretch Lite.

Il passo seguente è calcolare la dimensione dell’immagine e per scoprire quanti settori sono utilizzati da tali partizioni si deve procedere in questa maniera:

fdisk -lu 2019-04-08-raspbian-stretch-full.img
fdisk -lu 2019-04-08-raspbian-stretch-lite.img

partizioni

In seguito si deve creare un file per contenere le immagini e per farlo la prima mossa costituisce nel convertire il numero di settori da 512 KB richiesti in blocchi da 4 MB in tale modo:

  • 24.426.283 × 512 byte = 12.506.256.896 byte
  • 12.506.256.896 / 4.194.304 = 2.982 blocchi da 4 megabyte (arrotondati per eccesso)

Per creare l’immagine target procedere in tal maniera:

dd if=/dev/zero bs=4M count=2982 status=progress > 2019-04-08-raspbian-stretch-full.restore.img

Le immagini si devono naturalmente partizionare e per farlo si utilizza la seguente procedura:

UUID_RESTORE=$(uuidgen)
UUID_ROOTFS=$(uuidgen)
PARTUUID=$(tr -dc 'a-f0-9' < /dev/urandom 2>/dev/null | head -c8)

sfdisk 2019-04-08-raspbian-stretch-full.restore.img <<EOL
label: dos
label-id: 0x${PARTUUID}
unit: sectors

2019-04-08-raspbian-stretch-full.restore.img1 : start=8192, size=87851, type=c
2019-04-08-raspbian-stretch-full.restore.img2 : start=96043, size=13877248, type=83
2019-04-08-raspbian-stretch-full.restore.img3 : start=13973291, size=10452992, type=83
EOL

Ora è possibile accedere al file creato in precedenza :

losetup -v -f 2019-04-08-raspbian-stretch-full.restore.img
partx -v --add /dev/loop0
losetup --show -f -P 2019-04-08-raspbian-stretch-lite.img
losetup --show -f -P 2019-04-08-raspbian-stretch-full.img

dd if=/dev/loop2p1 of=/dev/loop0p1 status=progress bs=4M
dd if=/dev/loop2p2 of=/dev/loop0p3 status=progress bs=4M

dd if=/dev/loop1p2 of=/dev/loop0p2 status=progress bs=4M

Ora si procede alla configurazioni delle partizioni, assegnando ID univoci e rinominandole in tal modo da distinguerle:

tune2fs /dev/loop0p2 -U ${UUID_RESTORE}
e2label /dev/loop0p2 recoveryfs
tune2fs /dev/loop0p3 -U ${UUID_ROOTFS}

e2fsck -f /dev/loop0p2
resize2fs /dev/loop0p2

mkdir -p mnt/restore_boot
mkdir -p mnt/restore_recovery
mkdir -p mnt/restore_rootfs

mount /dev/loop0p1 mnt/restore_boot
mount /dev/loop0p2 mnt/restore_recovery
mount /dev/loop0p3 mnt/restore_rootfs

Attualmente l’immagine non si avvia poiché non è stata selezionata la partizione da utilizzare. Una volta eseguito questo comando è consigliato prendere noto degli otto caratteri dopo ‘Disk identifier: 0x’.

fdisk -lu 2019-04-08-raspbian-stretch-full.restore.img

Ora modificare il file cmdline.txt per ripristinarlo: 

nano mnt/restore_boot/cmdline.txt

Una volta eseguito il comando cambiare il codice di otto caratteri dopo PARTUUID da -02 a -03, in tal modo si avvii dalla terza partizione.

partizioni

Per ripristinare Raspbian vi è data la neccesità di avviare il sistema dalla seconda partizione, contente Raspbian Lite, quindi sovrascrivendo la terza partizione con un’immagine istantanea. Per automatizzare processo è possibile utilizzare il seguente script:

chmod +x mnt/restore_boot/boot_to_root
chmod +x mnt/restore_boot/boot_to_recovery
chmod +x mnt/restore_boot/restore_root

nano mnt/restore_recovery/etc/rc.local

/boot/restore_root

Per adattarsi al nuovo scopo ciascuna delle partizioni deve disabilitare il file fsyab:

UUID_BOOT=$(blkid -o export /dev/loop0p1 | egrep '^UUID=' | cut -d'=' -f2)

cat << EOF > mnt/restore_rootfs/etc/fstab
proc /proc proc defaults 0 0
UUID=${UUID_BOOT} /boot vfat defaults 0 2
UUID=${UUID_ROOTFS} / ext4 defaults,noatime 0 1
EOF

cat << EOF > mnt/restore_recovery/etc/fstab
proc /proc proc defaults 0 0
UUID=${UUID_BOOT} /boot vfat defaults 0 2
UUID=${UUID_RESTORE} / ext4 defaults,noatime 0 1
EOF

partizioni

A seguito di queste procedure si dovrà possedere un’immagine completa e pronta all’uso. Ora è possibile copiarlo su una scheda SD, in modo da ottimizzare i tempi per il ripristino di un gran numero di computer o altri device, come accade nelle aule scolastiche.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.