Cloner sa SD ou son SSD en 3 lignes de commandes

https://forum.jeedom.com/viewtopic.php?t=31252

Message par bronche » 07 nov. 2017, 18:28

Dans la rubrique pépite du net, je viens de découvrir le script de Billw2.
Je ne résiste pas à l'envie de vous présenter cette merveille...

1/ C'est quoi ?
Un script qui va vous permettre de cloner à la volée (et donc sans éteindre sa jeedom, sortir la carte ou le SSD, la le mettre sur un pc) :
une Sd vers une autre SD (via adaptateur USB ==> SD bien sur)
Une SD vers un périphérique USB (SSD ou clé USB)
Un SSD vers un autre SSD..

Mais ce n'est pas tout...
Ce script gère également la taille et le redimesionnement des partitions il permet :
De passer d'une SD de 4 GO vers une 8 GO ( et n'importe quelles tailles)
Plus fort d'une 8 GO vers une 4 GO ( Si la taille utilisée est inférieure à 4Go bien sur)
Il gère également la synchronisation incrémentée ! il faudra une fois le premier clone réalisé, supprimer le paramètre -f, beaucoup plus rapide (moins d'une minute pour avoir un clone à jour !) !

Enfin, il permet de donner un nom à votre partition: Part /masauvegarde

Bref, vous avez compris, on peut très facilement sauvegarder toutes ses données.
Une panne ? Je remets mon dispositif cloné (SD ou SSD), et terminé...

2/ Installation
On lance une console SSH
On récupère le script et on le copie dans /usr/local/sbin :

Code : Tout sélectionner

git clone https://github.com/billw2/rpi-clone.git 
cd rpi-clone
sudo cp rpi-clone rpi-clone-setup /usr/local/sbin

3/ Utilisation

On stoppe les services !

il est impératif de stopper les services suivants avant de lancer un clonage ou une synchro de ce clonage.
Si vous ne faites pas, vous risquez de corrompre votre installation !!!! (écriture en base pendant la copie)

Code : Tout sélectionner

sudo service mysql stop
sudo service cron stop
sudo service apache2 stop

ou pour les serveurs anciens nginx

Code : Tout sélectionner

sudo service nginx stop


Lors de la première utilisation, et si vos deux supports ont des tailles différentes, il faudra utiliser le paramètre -f. C'est lui qui se chargera de redimensionner vos partitions. Ensuite, vous pouvez l'enlever. Si vous le conservez,ce n'est pas grave mais vous resterez en mode clone et vous ne passerez pas en mode synchronisation. (un clone 20 minutes pour 4Go, une synchro 1 minute...

Première utilisation (initialisation complète de votre support qui contient le clone) on lance donc simplement :

Pour une copie SD vers USB (clone vers sda)

Code : Tout sélectionner

sudo rpi-clone sda -f

Pour une copie SSD vers autre SSD (clone vers sdb)

Code : Tout sélectionner

 rpi-clone sdb -f

Pour une copie SSD vers SD (clone vers mmcblk0)

Code : Tout sélectionner

rpi-clone mmcblk0 -f

Etc... vous avez compris le principe.

On redémarre les services

Code : Tout sélectionner

sudo service mysql start
sudo service cron start
sudo service apache2 start

ou pour les serveurs anciens nginx

Code : Tout sélectionner

sudo service nginx start


Il y a plein d'options a découvrir sur le github de Billw2

Quelques infos :

Le paramètre -f force la réécriture des partitions et force le mode clone. Sur une clé vierge, il sera lancé même sans ce paramètre. Pour passer d'un clonage à une synchronisation plus rapide, supprimer le. Par exemple :

Code : Tout sélectionner

 rpi-clone sdb

Le paramètre -v affichera tout le travail du script. Sympa et pédagogique

Code : Tout sélectionner

 rpi-clone sdb -v

Il faut compter entre 10 minutes pour une copie de 4GO + redimensionnement. 1 minute pour une synchro.

Comme je suis joueur (sur un Pi3 de test), je viens de faire :

copie de mon SSD 8 GO vers une clé USB de 4GO.
Jeedom en marche, introduction d'une clé USB, lancement du script.
Arrêt jeedom propre (sudo halt)
Redémarrage sur cette clé.

Copie de cette clé vers mon SSD de 8GO
Jeedom en marche, branchement de mon SSD, lancement du script
Arrêt jeedom propre (sudo halt)
Redémarrage sur ce SSD.

Marche nickel.


Premier lancement :
Un exemple : passage d'un SSD 4 GO vers un 8 :

Booted disk: sda 4.0GB Destination disk: sdb 8.0GB
---------------------------------------------------------------------------
Part Size FS Label Part Size FS Label
1 /boot 43.5MB fat32 -- 1 43.5MB fat32 --
2 root 4.0GB ext4 -- 2 8.0GB ext4 --
---------------------------------------------------------------------------
== Initialize: IMAGE sda partition table to sdb - forced by option ==
1 /boot (21.5MB used) : IMAGE to sdb1 FSCK
2 root (3.5GB used) : RESIZE(8.0GB) MKFS SYNC to sdb2
---------------------------------------------------------------------------
-l SD to USB boot mode : -l ignored. Src or dst is not a SD card slot.
Run setup script : no
Verbose mode : no
-----------------------:
** WARNING ** : All destination disk sdb data will be overwritten!
: The partition structure will be imaged from sda.
-----------------------:

Initialize and clone to the destination disk sdb? (yes/no): yes
Optional destination ext type file system label (16 chars max):

Initializing
Imaging past the start of /boot partition 2.
=> dd if=/dev/sda of=/dev/sdb bs=1M count=50 ...
Resizing last partition to end of disk ...
Resize success.
Changing destination Disk ID ...
Delaying so partprobe can update /dev entries ...
=> fsck -p /dev/sdb1 ...
=> mkfs -t ext4 /dev/sdb2 ...

Syncing file systems (can take a long time)
Syncing mounted partitions:
Mounting /dev/sdb2 on /mnt/clone
=> rsync // /mnt/clone with-root-excludes ...
Mounting /dev/sdb1 on /mnt/clone/boot
=> rsync /boot/ /mnt/clone/boot ...

Editing /mnt/clone/boot/cmdline.txt PARTUUID to use 4d38a70c
Editing /mnt/clone/etc/fstab PARTUUID to use 4d38a70c
===============================
Done with clone to /dev/sdb
Start - 16:45:52 End - 16:54:15 Elapsed Time - 8:23

Cloned partitions are mounted on /mnt/clone for inspection or customizing.

Hit Enter when ready to unmount the /dev/sdb partitions ...
unmounting /mnt/clone/boot
unmounting /mnt/clone
===============================Si on regarde le temps de copie : Start - 16:45:52 End - 16:54:15 Elapsed Time - 8:23


Deuxième lancement sans paramètre -f pour la synchronisation :
Synchro vers une clé USB de 16GO
pi@raspberrypi:~ $ sudo rpi-clone sdb

Booted disk: sda 8.0GB Destination disk: sdb 15.8GB
---------------------------------------------------------------------------
Part Size FS Label Part Size FS Label
1 /boot 43.5MB fat32 -- 1 43.5MB fat32 --
2 root 8.0GB ext4 -- 2 15.8GB ext4 bronche
---------------------------------------------------------------------------
== SYNC sda file systems to sdb ==
/boot (21.5MB used) : SYNC to sdb1 (43.5MB size)
/ (3.5GB used) : SYNC to sdb2 (15.8GB size)
---------------------------------------------------------------------------
Run setup script : no
Verbose mode : no
-----------------------:

Ok to proceed with the clone? (yes/no): yes

Syncing file systems (can take a long time)
Syncing mounted partitions:
Mounting /dev/sdb2 on /mnt/clone
=> rsync // /mnt/clone with-root-excludes ...
Mounting /dev/sdb1 on /mnt/clone/boot
=> rsync /boot/ /mnt/clone/boot ...

Editing /mnt/clone/boot/cmdline.txt PARTUUID to use ac3b39f4
Editing /mnt/clone/etc/fstab PARTUUID to use ac3b39f4
===============================
Done with clone to /dev/sdb
Start - 19:37:13 End - 19:37:51 Elapsed Time - 0:38

Cloned partitions are mounted on /mnt/clone for inspection or customizing.

Hit Enter when ready to unmount the /dev/sdb partitions .Si on regarde le temps de synchronisation: Start - 19:37:13 End - 19:37:51 Elapsed Time - 0:38

Génial non ?