Le PI est un chouette jouet (Présentation du Raspberry et installation), mais il posséde quelques défauts :
- La puissance, on est vite amené à trouver comment l’optimiser (ce sera pour le prochain article).
- Le stockage sur carte SD : certainement son point noir !
En effet, ce genre de carte n’est pas optimum pour un OS et l’on a vite fait d’avoir des données corrompues et donc de vieux plantages bien moisis. Si en plus, comme beaucoup, vous overclockez votre Rasp cela étant facile et efficace, cela a également l’inconvénient d’accélérer ce processus à cause de la chauffe.
Bref, on en a vite marre de réécrire une image sur la SD tous les deux jours.
Plusieurs tests sur internet montrent que mettre le FS sur une clé USB ne ralentit pas le système et permet d’éviter à avoir à faire des backups réguliers de la carte SD pour les remettre tout aussi régulièrement.
I – Bench rapide sur SD
A titre d’exemple, sur un Rasp sur micro SD Kingston classe 10:
Test de lecture :
# hdparm -t -T /dev/mmcblk0 Timing cached reads: 546 MB in 2.00 seconds = 272.32 MB/sec Timing buffered disk reads: 52 MB in 3.09 seconds = 16.85 MB/sec
Test d’écriture :
# dd if=/dev/zero of=/tmp/test.data bs=1M count=128 conv=fdatasync 128+0 enregistrements lus 128+0 enregistrements écrits 134217728 octets (134 MB) copiés, 50,0217 s, 2,7 MB/s
L’option fdatasync pour forcer l’écriture direct. On constate que c’est assez faible …
II – Préparation de la clé USB
On branche la clé (clé dont on aura sauvegardé les données, je précise au cas ou…) dans un des ports du Rasp.
Après quelques secondes, pour voir si c’est ok :
# dmesg
On devrait la voir dans le log.
On va utiliser fdisk pour la partitionner :
# fdisk /dev/sda
la commande m vous donne l’aide, sinon à connaitre dans notre cas :
- p : affiche les partitions présentes
- d suivi d’un chiffre : efface la partition en question
- n : pour en créer une nouvelle (primaire en choix et par défaut pour les tailles)
- w : pour finalement écrire les modifications.
Il ne reste plus qu’a partitionner la clé en faisant :
# mkfs.ext4 /dev/sda1
II – Préparation des répertoires
L’idée de la manipulation est la suivante : on va copier le contenu de / sur la clé USB et dire au système de l’utiliser au lieu de la SD. Tout bête et tout simple à faire.
On va d’abord créer un répertoire dans /tmp/usbboot pour monter la clé.
# mkdir /tmp/usb # mount /dev/sda1 /tmp/usb
Ensuite, création d’un répertoire particulier, /tmp/sd, qui va contenir le /. En effet, si on tente de copier / directement, cela va planter.
La, on effectue un montage particulier (bind) permettant d’accéder au répertoire / par /tmp/sd/
# mkdir /tmp/sd # mount --bind / /tmp/sd
Et ensuite, on va à la racine, puis on lance la copie avec rsync en excluant /boot qui reste sur la SD et /tmp qui contient la destination de notre copie.
# cd / # rsync -avh --exclude 'tmp/' --exclude 'boot/' /tmp/sd/ /tmp/usb/
L’opération prend quelques minutes.
Une fois terminée, on va recréer les répertoires manquants :
# mkdir /tmp/usb/tmp /tmp/usb/boot
III – Finalisation
On va éditer /etc/fstab pour indiquer que c’est l’usb qui stock /
# nano /tmp/usbboot/etc/fstab
C’est la ligne :
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
Qu’on transforme en :
/dev/sda1 / ext4 defaults,noatime 0 1
Puis pour terminer, on édite /boot/cmdline.txt :
#nano /boot/cmdline.txt
Et on remplace la partie root=/dev/mmcblk0p2 par root=/dev/sda1 :
dwc_otg.lpm_enable=0 root=/dev/sda1 rootfstype=ext4 elevator=deadline rootwait
Il ne reste plus qu’a faire un :
# reboot
IV – Bench rapide sur USB
On va maintenant tester les débits sur la clé USB
# hdparm -t -T /dev/sda /dev/sda:
Timing cached reads: 558 MB in 2.01 seconds = 278.27 MB/sec
Timing buffered disk reads: 50 MB in 3.04 seconds = 16.45 MB/sec
Quasiment aucun changement. Ouf, on ne perd rien en lecture 😉
# dd if=/dev/zero of=/tmp/test.data bs=1M count=128 conv=fdatasync
128+0 enregistrements lus 128+0 enregistrements écrits 134217728 octets (134 MB) copiés, 9,93769 s, 13,5 MB/s
La par contre, gros gain en écriture !
Bref, c’est tout bénéf pour le Pi et pour nous !