L’épisode II reprend quelque part après le premier de la serie.
Nous y avions vu comment limiter les écritures pour économiser la carte SD.
Dans ce nouvel opus, voyons comment passer une étape de plus en bootant sur une clé USB et en y déportant tout le système.
Pour être exact il y a une séquence de boot qui DOIT se dérouler sur la carte SD, c’est comme cela par construction du Raspberry, puis ensuite le raspberry monte une partition nommée root fs Linux et utilise les informations de ce root fs.
Un root fs contient applications, fichiers spéciaux d’accès aux périphériques, les fichiers de configuration, les données… C’est root fs qui fait tout le boulot sous Linux.
C’est donc lui que nous allons déplacer sur l’USB pour économiser notre μSD
Un article complet sur la séquence de boot, le root fs et comment déplacer tout cela ce situe ici http://www.framboise314.fr/booter-le-raspberry-pi-sur-un-disque-dur-usb/
Je n’en reprend à mon compte qu’une petite partie ici.
Prérequis :
- Un disque ou une clé USB de grande taille.
- Un peu de patience
- De l’attention
- Faites attention aux tailles de vos SD card et disque USB, on s’attend ici à ce que le disque USB ait une capacité plus grande que la carte SD.
Objectif :
- Déplacer le root file system sur la clé USB et
- j’en profiterai pour faire une zone de swap de 1Go
On connecte le disque/clé USB au raspi et c’est parti.
Rappel
Sous Linux un disque se nomme /dev/sda ou /dev/sdb, /dev/sdc
- Les partitions à l’intérieur d’un disque sont /dev/sda1, /dev/sda2, etc … pour le premier disque.
- Idem bien sur pour les partitions de /dev/sdb qui sont /dev/sdb1, /dev/sdb2 ..
Examinons nos disques et partitions
Un sudo fdisk -l affiche quelque chose comme cela :
le /dev/mmcblk0: 15.9 GB correspond à la carte SD (mmc de leur ancien nom)
Il y a 2 partitions qui sont
- /dev/mmcblk0p1 en FAT16: c’est ce qu’utilise le Raspberry pour booter
- /dev/mmcblk0p2 : en Linux et c’est le Root FS.
le /dev/sda est ma clé USB de 8Go
je sais que je vais avoir du mal à copier 15.9 Gb dans 8 Gb, mais c’est pour l’exemple en vrai j’achèterai un disque USB.
Configuration :
A partir de maintenant soyez prudent, vérifiez soigneusement les noms de vos disques durs, assurez vous des manips que vous faites… formatages, copies binaires vont être au menu alors encore une fois : prudence.
un sudo cfdisk affiche l’outil de partitionnement.
Si vous avez plusieurs disques USB un sudo cfdisk /dev/sdb montre les partitions de /dev/sdb.
je veux faire un swap disque de 1Go et une autre partition de 7Go
On voit ici que il y a déjà une partition on la détruit avec le « Delete »
Regardez en haut pour être sur que l’on est sur le bon disque (/dev/sda)
On recrée ensuite 2 partitions d’abord une swap de 1Go (type 82 : swap) et le reste pour ce qui deviendra le root fs.
- Donc on crée une partition Primary de 1000Mo placée en « Beginning » puis avec « Type » on place en 82 (swap) ,
- une new primary du reste de l’espace
N’oubliez pas de faire un « Write » pour que tout cela soit enregistré.
On obtient Formatons nos partitions
Formatons les 2 partitions
- La partition de swap sera formatée par
sudo
mkswap
/dev/sda1
- Celle du root fs par un sudo mkfs.ext4 /dev/sda2
- Vérifiez par un sudo fdisk -l que tout correspond à vos attentes.
Montons la partition de swap
Il faut ajouter dans le etc/fstab le montage en swap de notre partition /dev/sda1 ici
/dev/sda1 none swap sw 0 0
Détendons nous quelques instants avant de reprendre.
Transférons notre root file system de la carte SD vers notre disque dur USB
Depuis quand n’avez vous pas sauvegardé vos données ? Au vu des manips qui suivent vous devriez y penser !!
La manip décrite ci dessous est dangereuse, assurez vous de bien comprendre ce que vous faites, aucun moyen de faire marche arrière n’existe.
Lisez ici http://doc.ubuntu-fr.org/dd
sudo
dd
if
=
/dev/mmcblk0p2
of=
/dev/sda2
bs=512
va donc copier depuis /dev/mcblkp02 vers la partition /dev/sda2
Modifier cmdline.txt
Nous devons modifier /boot/cmdline.txt pour indiquer au système qu’il ne va plus chercher son Root FS sur /dev/mmcblk0p2 mais sur /dev/sda2.
sudo cp /boot/cmdline.txt /boot/cmdline.txt.original sudo nano /boot/cmdline.txt
remplacez root=/dev/mmcblk0p2 par root=/dev/sda2 ou celui qui vous correspond
Modifions le fstab et c’est presque fini
sudo cp /etc/fstab /etc/fstab.original
Ouvrez avec
nano /etc/fstab
Placez vous sur la ligne /dev/mmcblk0P2
- Faites un CTRL K, la ligne disparait
- Faites un CTRL U
- Puis un autre CTRL U ,cela à dupliqué la ligne
- Mettez un # devant une des lignes de mmcblk0P2
- Mettez /dev/sda2 à la place de /dev/mmcblk0P2
Les manips lourdes sont terminées
On reboote on surveillant les messages qui défilent à l’écran.
Si tout va bien, on retrouve un fonctionnement normal de Domoticz, sinon les messages d’erreur affichés lors du boot seront d’une aide précieuse dans notre ami google.
Dernière chose : Redimensionner la partition Root
Eh oui n’oubliez pas que lorsque nous avons fait le fameux dd, on a fait un clone exact de notre partition de départ /dev/mmcblk0p2
Si la partition d’origine faisait 4 Go, j’ai maintenant une partition root fs de 4 Go et la totalité de ma partition que j’avais prévue à 8Go n’est pas occupée et ne le sera jamais.
Étendons donc la partition en question avec un
sudo
resize2fs
/dev/sda2
Très bon tuto, complet et bien plus clair que beaucoup d’autres 🙂
Merci
La partition swap créée ne sert à rien si elle n’est pas déclarée.
Si tu verifies tu verras qu’il n’y a pas 1Go de swap.
De plus est-il « bon » de swapper sur une clef usb ?
Lalsacien
Bonjour
Oui en effet cette partie à sauté de l’article , je viens de la rétablir et la voici
Il faut ajouter dans le etc/fstab le montage en swap de notre partition
/dev/sda1 none swap sw 0 0
Bonjour,
J’ai exactement fais toutes les manips a la lettre , cela fonctionne très bien ! Hormis un seul point…
Depuis impossible de faire des updates…
L’erreur rencontré est qu’il n’arrive plus a lire dans le fichier /var/lib/dpkg/status
Avez vous ce soucis la vous aussi ?
Cordialement Christophe.
Bonsoir
Quelle est l »erreur exacte sur /var/lib ….
Bonjour,
J’ai suivi votre tuto; pas eu de souci particulier à part un « random nonblocking pool is initialized » lors du reboot final; j’ai recoupé le pi et rallumer et là pas de souci.
Concernant les mises à jour, je ne sais pas si c’est lié avec le dernier post.
Avant dans domoticz lorsque je cliquais sur About, j’avais la version de domoticz qui s’affichait, et de mémoire on avait accès au lien dirigeant vers le site de domoticz. Désormais lorsque j’appuie sur about, il ne se passe rien, pas de fenêtre qui s’ouvre.
Quelqu’un rencontre-t-il ce problème?
Merci par avance
Bonjour
Non pas de problèmes comme celui ci
Essaie de vider le cache applicatif du navigateur (pas la touche F5 hein) vider le cache et reouvir l’url
Bonjour,
Voici ce qu’il se passe quand je déclare swap:
root@jeedom:~# /dev/sdb1 none swap sw 0 0
-bash: /dev/sdb1: Permission non accordée
Merci
Bonjour
il faut faire la manip dans /etc/fstab
Juste pour info, le formattage de /dev/sda2 (sudo mkfs.ext4 /dev/sda2) est inutile. En effet la commande dd recopie l’intégralité de la partition , y compris les tables de format ainsi que la taille du fichier système (FS), qui, en toute logique, doit correspondre à la taille de la partition.
Pour ce genre de manip (clonage), on peut aussi utiliser la commande ‘tar’ beaucoup moins risquée et tout aussi propre.
# tar –one-file-system cf – / | tar xpvf – -C /point/de/montage/usb