Outils pour utilisateurs

Outils du site


disquedur

Fonctionnement du Système sur Disque Dur

Afin de pouvoir assurer le maintien des services hébergés, le système d'exploitation Raspbian tourne sur un disque dur relié au port USB. Il faut savoir que l'on va solliciter le support de stockage en lecture/écriture. Si ce dernier est une microSD, cela finira par provoquer des dysfonctionnements de celle-ci et sa durée de vie réduite. Maïs que devient la microSD dans tout ça ? Me direz-vous. Évidemment sur une board ARM la microSD sert de clef de démarrage contrairement à un PC dont le système démarre par défaut à partir de son disque dur. Donc “coupons la poire en deux” et mettons chaque chose à sa place :

  • microSD ⇒ /boot
  • Disque Dur ⇒ / Raspbian, logiciels et les données

<alert warning> Avant de poursuivre, j'attire votre attention sur le fait que les manipulations qui vont suivre demandent une certaine maîtrise du shell et de la ligne de commande. Soyez vigilants lors des copier/coller, une erreur de frappe peut-être fatale. Dans tous les cas je ne me tiendrai responsable des dommages pouvant être causés sur votre matériel. Ce tuto avant d'être ecrit a été testé. </alert>

Mise en place

  1. Le Raspberry et la microSD montée
  2. Le Disque Dur avec alimentation externe, connecté au port USB.
  3. Se connecter en SSH (root) au Raspberry

Repérage des supports de stockage

  • Repérage du disque dur
| root#
fdisk -l
fdisk
Disk /dev/mmcblk0: 14.4 GiB, 15489564672 bytes, 30253056 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x4d78b898

Device         Boot Start      End  Sectors  Size Id Type
/dev/mmcblk0p1       8192    96042    87851 42.9M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      98304 30253055 30154752 14.4G 83 Linux


Disk /dev/sda: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x61174121

On peut se repérer par rapport à la taille de chaque disque par exemple. 14.4 GiB ne peut-être (chez moi) que la microSD. Donc 465.8 GiB le disque dur de 500 Go. Il est ainsi identifié par /dev/sda

Formatage

Dans tous les cas il est indispensable d'utiliser un disque dur vierge. Qu'il soit neuf ou qu'il fut déjà utilisé il faudra le reformater avec une partition de type LINUX ext4. Notez qu'au lieu de dire disque dur sda, l'on parlera plutôt de partition sda1 car c'est sur cette dernière que l'on travaille.

* Modification du type de Partition sur le disque

| root#
fdisk /dev/sda

* On part du principe qu'il y a une partition. On la supprime, taper d + ENTRÉE

fdisk
Welcome to fdisk (util-linux 2.29.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): d
Selected partition 1
Partition 1 has been deleted.

* Ajout d'une nouvelle partition, taper n ÷ ENTRÉE puis w pour sauvegarder les modifications

fdisk
Command (m for help): n
Faire ENTRÉE à chaque question puis si that is the question
Do you want to remove the signature? [Y]es/[N]o: Y
Created a new partition 1 of type 'Linux'...
Command (m for help): w

Confirmation des modifications sur le disque

* Formatage en ext4 de la partition de tyoe Linux fraîchement créée

| root#
mkfs.ext4 /dev/sda1

Maintenant on est prêt pour procéder au clonage de l'OS

Clonage

Clonage veut dire à l'identique c'est à dire le tyoe de partition, les droits, liens symboliques…

  • Tout d'abord montage de la partition 1 du disque dur /dev/sda1. Elle sera accessible via le dossier /mnt
| root#
mount /dev/sda1 /mnt
  • Clonage de l'OS sur le disque dur à l'exception de certains dossiers système dit dynamiques
| root#
rsync -av --exclude={"/boot/*","/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /mnt/

<alert info> rsync : copie synchronisée, a : conservation des permissions de fichiers, v : un peu de bavardage, le temps paraîtra moins long </alert>

Finalisation

La Dernière étape est la configuration du démarrage du Raspberry afin que l'OS (Raspbian) soit chargé non plus sur la microSD mais sursur le Disque Dur.

Identification des partitions

Dans un premier temps, il faut pouvoir identifier chaque support de stockage, notamment le disque dur. Chacun sera identifié par leur partition. Le but est d'obtenir un PARTUUID

  • Executer la commande :
| root#
blkid
  • Ce qui donne chez moi :
blkid
/dev/mmcblk0p1: LABEL="boot" UUID="16D2-035F" TYPE="vfat" PARTUUID="4d78b898-01"
/dev/mmcblk0p2: LABEL="rootfs" UUID="d065e631-6b9d-48c0-a8fe-e663b42828e0" TYPE="ext4" PARTUUID="4d78b898-02"
/dev/sda1: UUID="36a171b4-fa20-429b-a86d-dc12ca6a4440" TYPE="ext4" PARTUUID="61174121-01"
/dev/mmcblk0: PTUUID="4d78b898" PTTYPE="dos"
  • Plus concrètement :
Périphérique LABEL PARTUUID TYPE Signification
microSD /dev/mmcblk0p1 boot 4d78b898-01 vfat Démarrage du système
microSD /dev/mmcblk0p2 rootfs 4d78b898-02 ext4 Raspbian & données
Disque Dur /dev/sda1 61174121-01 ext4 Raspbian & données clonés
  1. On garde 4d78b898-01 pour le démarrage du Raspberry
  2. 61174121-01 où se trouve désormais l'OS

Configuration

  • Déclaration des partitions sur le futur système
| root#
nano /mnt/etc/fstab
  • Remplacement de la valeur du champ PARTUUID par celle du Disque dur, sur la ligne avec / ext4 defaults,noatime 0 1. Pour moi ça donne :
/mnt/etc/fstab
proc            /proc           proc    defaults          0       0
PARTUUID=4d78b898-01  /boot           vfat    defaults          0       2
#PARTUUID=4d78b898-02  / [...] Ancienne configuration à remplacer par
PARTUUID=61174121-01  /               ext4    defaults,noatime  0       1

# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that
  • Configuration du démarrage du Raspberry

<alert warning> Ce qui suit est à manipuler avec Précaution !! </alert>

| root#
nano /boot/cmdline.txt
  • Remplacement de la valeur du champ root=PARTUUID par celle du disque dur. Pour moi ça donne :
/boot/cmdline.txt
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=61174121-01 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

<alert warning> Attention !! à bien garder les ESPACES entre chaque champ et d'éviter les retours à la ligne. </alert> Il ne reste plus qu'à redémarrer le Raspberry. Si toutes les étapes ont bien été respectées, le système d'exploitation ainsi que les logiciels et les données doivent tourner désormais sur le disque dur.

Au fait !! La SWAP ?

Un détail pour ne pas dire vital qu'il ne faut pas négliger lorsque l'on fait tourner un système d'exploitation sur un Disque Dur comme pour tous les systèmes qui se respectent. Me diriez-vous : “Ça n'existe pas une swap sur un Raspberry ?”. Si si, il en existe une, non pas une partition physique mais en type de “Fichier” autrement dit une “Swapfile”, un fichier d'échange mémoire de 100 Mo, comme cela existait déjà au temps de feu “Windows 3.x”. “Seulement 100 Mo !! ?” Oui une Swapfile plus large finirait par tuer la carte MicroSD au bout de quelques heures dû au fait d'une écriture permanente par le système lorsque que la mémoire de celui-ci est saturé. Comme vous l'aurez compris, la Swap ou la Swapfile est là pour soulager la RAM du système. Sa taille est en général le double de la RAM. Maintenant que notre système est monté sur Disque Dur et que sur celui-ci nous n'avons pas créé de partition physique, il nous reste la solution la plus simple est de créer une Swapfile de 2 Go puisque la RAM du Raspberry ici chez moi est de 1 Go.

  • Création d'un fichier ou partition virtuelle vierge
| root#
dd if=/dev/zero of=/swapfile count=2048 bs=1M

<alert warning> Pour plus de commodité, le fichier est placé â la racine du système / </alert>

dd if=/dev/zero of=/swapfile count=2048 bs=1M
2048+0 enregistrements lus
2048+0 enregistrements écrits
2147483648 bytes (2,1 GB, 2,0 GiB) copied,....
  • Conversion de la partition virtuelle en tyoe “swap” puus n'autoriser l'accès qu'à root
| root#
chmod 0600 /swapfile && mkswap /swapfile
mkswap /swapfile
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=....
  • Activation à chaud & vérification
| root#
swapon /swapfile && swapon --show
swapon --show
NAME      TYPE SIZE   USED PRIO
/swapfile file   2G     0B   ....
  • Activation au démarrage
| root#
nano /etc/fstab

<alert info> On rajoute à la fin sans tenir compte du dernier commentaire “# use dphys-swapfile…”. Ceci était utilisé pour gérer la fameuse Swap de 100 Mo dont je vous parlez précédemment. “Revenons à nos moutons”, insérez : /swapfile swap swap defaults 0 0 </alert>

/etc/fstab
proc            /proc           proc    defaults          0       0
PARTUUID=4d78b898-01  /boot           vfat    defaults          0       2
#PARTUUID=4d78b898-02  / [...] Ancienne configuration à remplacer par
PARTUUID=61174121-01  /               ext4    defaults,noatime  0       1

# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that
/swapfile swap swap defaults 0 0

Conclusion

Désormais votre Raspberry est totalement opérationnel avec un Disque Dur. Je rappelle que la microSD reste indispensable juste pour le démarrage /boot du Raspberry <alert info> Aujourd'hui le Raspberry 4 est capable de booter directement sur un Disque Dur branché en USB et la carte microSD n'est donc plus obligatoire. Dans ce cas le présent tuto n'est plus d'actualité pour la dernière génération de Raspberry. Voici la nouvelle procédure : https://www.clubic.com/raspberry-pi/actualite-1921-comment-booter-depuis-une-cle-usb-ou-un-ssd-avec-un-raspberry-pi-4-.html </alert>

disquedur.txt · Dernière modification: 2020/05/27 23:37 de svnet