Transférer Rasbian sur un disque externe (1ère partie)

Plusieurs raisons possibles pour vouloir transférer Rasbian sur un disque externe :
  • Disposer d'un espace de stockage plus important que ne le permet une carte microSD. C'est à envisager si l'on souhaite utiliser un Raspberry Pi comme ordinateur de bureau.
  • Disposer d'une solution de stockage plus pérenne qu'une carte microSD dont la durée de vie est limitée par le nombre d'écritures que l'on y fait, environ 10000, ce qui est très faible pour une utilisation normale d'un système Linux.
  • Dans le cas où l'opération de création d'un disque dur bootable (voir article intitulé "Utiliser un disque dur externe"), décrite dans un article précédent, aurait échoué.
Le principe consiste à booter sur la carte microSD, mais à utiliser le disque dur comme partition root du système Linux. La carte microSD, uniquement utilisée en lecture au moment du démarrage, et dont les rares opérations d'écriture se limiteront aux modifications nécessaires de fichiers config.txt et cmdline.txt, sera préservée et le système Linux qui sollicite beaucoup la mémoire de masse fonctionnera sur le disque externe. 
Il est même possible de libérer la carte microSD utilisée au préalable pour la remplacer par une vieille carte de récupération (4 Go suffisent) sur laquelle on a recopié la partition boot de la carte d'origine. Cette dernière étant formatée en FAT32, la recopie peut être faite sur n'importe quel ordinateur, y compris les ordinateurs Windows.

Vérification que le disque dur externe est "montable"

Pour que le transfert de Rasbian soit possible, il est indispensable de s'assurer que le disque dur externe est "montable" sous Linux. A défaut, il est inutile de poursuivre.
Le plus simple est de connecter le disque externe sur l’un des ports USB du Raspberry Pi. Par précaution et pour ne pas créer un choc de charge sur le Raspberry, il vaut mieux que celui-ci soit éteint. Après redémarrage il est possible de vérifier quelles sont les mémoires de masse qui y sont connectées.
pi@APLRASPI01:~ $lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 111,8G  0 disk
├─sda1        8:1    0  41,5M  0 part
└─sda2        8:2    0  88,6G  0 part
mmcblk0     179:0    0  14,9G  0 disk
├─mmcblk0p1 179:1    0  41,5M  0 part /boot
└─mmcblk0p2 179:2    0  59,4G  0 part /
pi@APLRASPI01:~ $
Le résultat indique ici qu’il y a deux composants connectés, l’un s’appelle sda, l’autre s’appelle mmcblk0. En l’occurrence, sda correspond au disque externe et mmcblk0 à la carte microSD sur laquelle sont montées la partition boot (mmcblk0p1) et le système de fichier principal de Rasbian (mmcblk0p2).
Le contenu initial du disque externe peut varier selon qu’il a été utilisé au préalable. Ici, le disque externe contient déjà deux partitions sda1 et sda2 qu'il faudra supprimer.
Pour qu'une mémoire de masse soit utilisable sous Linux, il faut qu'elle soit "montée" avec la commande mount. En effet, Linux considère tous les espaces de stockage comment un seul système de fichier construit à partir de la racine /.
Le principe de "montage" consiste à créer un répertoire vide avec la commande mkdir et d'associer ce répertoire à la mémoire de masse par la commande mount. Il est d'usage de créer ce répertoire à l'intérieur du répertoire /media. Les fichiers contenus sur la mémoire de masse seront vus à l'intérieur de ce répertoire après le montage.
pi@APLRASPI01:~ $sudo mkdir /media/pi/hdext
pi@APLRASPI01:~ $sudo mount /dev/sda2 /media/pi/hdext
pi@APLRASPI01:~ $lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 111,8G  0 disk
├─sda1        8:1    0  41,5M  0 part
└─sda2        8:2    0  88,6G  0 part /media/pi/hdext
mmcblk0     179:0    0  59,5G  0 disk
├─mmcblk0p1 179:1    0  41,5M  0 part /boot
└─mmcblk0p2 179:2    0  59,4G  0 part /
pi@APLRASPI01:~ $ls -l /media/pi/hdext
. . .
Le contenu du disque peut être exploré avec la commande ls de Linux. Si le contenu du disque est visible, tout va bien.

Nettoyage du disque dur

Pour installer Rasbian sur un disque dur, il vaut mieux partir d'un disque vierge. Or, il est probable que le disque dur cible du transfert ait été utilisé au préalable. Il faut donc supprimer toutes les partitions qui s'y trouve. Attention ! le contenu du disque dur sera définitivement perdu. Si celui-ci contient des informations  importante, il vaut mieux en faire une copie sur un autre support.
Le contenu initial du disque externe peut varier selon qu’il a été utilisé au préalable. Ici, le disque externe contient déjà deux partitions sda1 et sda2 qui faudra supprimer.
Pour faire cela, on utilise la commande cfdisk :
pi@APLRASPI01:~ $sudo cfdisk
pi@APLRASPI01:~ $
  • Sélectionner /dev/sda1 et taper la touche d (Delete).
  • Faire de même pour /dev/sda2 (et pour toutes les partitions qui pourraient exister sur le disque).
Toutes les opérations faites dans cfdisk ne seront prise en compte que lorsque que la commande w (Write) sera lancée et confirmée (yes). 

Création d'une nouvelle partition Linux

Toujours dans cfdisk  :
  • Taper la commande n (New).
  • Pour Partition Size laisser la valeur par défaut pour utiliser toute la place. Mais il est possible de créer plusieurs partitions selon l’usage souhaité. Par exemple, créer une partition system pour Rasbian, une partition data et une partition d’échange formatée en FAT32 pour échanger des fichier entre le Raspberry Pi et un PC  Windows.
  • Choisir Primary.
Il n'y a plus qu'une seule partition : /dev/sda1. Et sa taille correspond à tout l’espace disponible sur le disque.
Toutes les modifications effectuées dans cfdisk sont sans effet tant que celles-ci n'ont pas été enregistrées. Il faut maintenant enregistrer toutes les modifications effectuées sur les partitions. Ce qui, dans notre cas, va effacer irréversiblement tout ce qui se trouvait sur le disque au préalable.
  • Taper la commande w (Write). Taper yes pour confirmer.
  • Taper la commande q (Quit) pour revenir au prompt de la console.
On peut revérifier les mémoires de masse connectées :
pi@APLRASPI01:~ $lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 111,8G  0 disk
└─sda1        8:1    0 111,8G  0 part
mmcblk0     179:0    0  14,9G  0 disk
├─mmcblk0p1 179:1    0  41,5M  0 part /boot
└─mmcblk0p2 179:2    0  14,8G  0 part /
pi@APLRASPI01:~ $

Formatage d'une partition Linux

La partition nouvellement crée n’est pas utilisable dans l’état. Elle doit être formatée avec la commande mke2fs.
pi@APLRASPI01:~ $sudo mke2fs –t ext3 –L rootfs /dev/sda1
mke2fs 1.43.4 (31-Jan-2017)
En train de créer un système de fichiers avec 29304950 4k blocs et 7331840 i-noeuds.
UUID de système de fichiers=31355786-86e4-4a9d-a0e9-110cfda7cfe6
Superblocs de secours stockés sur les blocs :
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872

Allocation des tables de groupe : complété
Écriture des tables d'i-noeuds : complété
Création du journal (131072 blocs) : complété
Écriture des superblocs et de l'information de comptabilité du système de
fichiers : complété

pi@APLRASPI01:~ $
L’option –t ext3 indique le type de formatage utilise. Pour un disque dur, utiliser ext3. Pour une clef USB ou un disque SSD utiliser ext4 beaucoup plus efficace sur des mémoires flash.
L’option –L rootfs permet de nommer la partition. rootfs est le nom de la partition root de Rasbian.

Maintenant nous disposons d'une partition prête  l'emploi pour un transfert de système. Ce transfert fera l'objet de l'article intitulé "Transférer Rasbian sur un disque externe (2ème partie)".

Commentaires

Posts les plus consultés de ce blog

Gérer la mise en veille

Configurer VSCode pour programmer et déboguer à distance sur Raspberry Pi

Créer un nouvel utilisateur Raspbian