# RPI: Remplacer la partition racine ext4 de la carte micro SD par f2fs sur le Raspberry PI {{METATOC 4-5}} La carte micro SD du Raspberry Pi est nommée **mmcblk0** et se compose de deux partitions : * **mmcblk0p1** contenant un système de fichiers **vfat**, monté sur `/boot` * **mmcblk0p2** contenant un système de fichiers **ext4**, monté sur `/` (racine). L'objectif est de remplacer le système de fichiers **ext4** de la partition **mmcblk0p2** , contenant la partition racine, par un système de fichiers **f2fs**, compatible avec les cartes SD et censé prolonger la durabilité de la carte. ####Etape 1: Préparation du système Raspberry Flasher l’image de **Raspian** sur la SD en utilisant l'une des méthodes décrites [[prive:rpi-patch|ici]] Démarrer la Pi et à cette étape, le **PARTUUID** mis par défaut dans le fichier `cmdline.txt `(root=PARTUUID=49783f5b-02) est écrasé par celui de **mmcblk0p2** et **mmcblk0p2** est étendue automatiquement (**mmcblk0p2** occupe maintenant toute la carte). Configurer **Raspian**: clavier, langue, réseau, mot de passe… Mettre à jour les paquets : ``` sudo apt-get update sudo apt-get -y upgrade sudo rpi-update ``` Redémarrer pour valider les étapes précédentes : ``` sudo reboot ``` Sur le Raspberry Pi : taper la commande suivante dans un Terminal : ``` sudo lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL NAME FSTYPE SIZE MOUNTPOINT LABEL sda 57,6G └─sda1 ntfs 57,6G /media/stick WEBDISC01 mmcblk0 60,1G ├─mmcblk0p1 vfat 60M /boot boot └─mmcblk0p2 ext4 60G / ``` il existe également une clé USB **sda**, contenant un système de fichiers NTFS sur sda1, monté sur /media/stick - qui n'est pas modifié et n'affecte pas la procédure. Étant donné que la partition racine de la carte SD ne peut pas être reformatée sur le système en cours d'exécution, le système doit être arrêté et, comme la partition racine sera sur un système de fichiers **f2fs** lors du redémarrage, il faut installer le paquet **f2fs-tools** avant cela: ``` sudo apt-get install f2fs-tools ``` Ensuite, éteindre le Raspberry Pi. ####Etape 2: Préparation du système hôte Maintenant passer sur un l'ordinateur Linux hôte où un lecteur de carte SD est disponible. Sur ce système, on a également besoin du support **f2fs**, alors il faut aussi installer **f2fs-tools** ``` sudo apt-get install f2fs-tools ``` Retirer ensuite la carte micro SD du Raspberry Pi et l'insérer dans le lecteur de carte SD du deuxième ordinateur Linux. Habituellement, sur les systèmes de bureau Linux courants, les systèmes de fichiers de la carte seront montés automatiquement, et avec ``` sudo lsblk -o NOM, FSTYPE, TAILLE, POINT DE MONTAGE, ÉTIQUETTE ``` on aura probablement quelque chose comme ``` NOM FSTYPE TAILLE MOUNTPOINT LABEL . . . sdb 60,1G ├─sdb1 vfat 60M /media/user/boot boot └─sdb2 ext4 60G /media/user/ad6203a1-ec50-4f44-a1c0-e6c3dd4c9202 . . . ``` Le nom long du point de montage uid de la partition ext4 de la carte est peu pratique, donc l'étape suivante n'est que par commodité : ``` sudo umount /dev/sdb1 sudo umount /dev/sdb2 sudo mkdir /media/boot_fs sudo mkdir /media/root_fs sudo mount -t vfat /dev/sdb1 /media/user/boot_fs sudo mount -t ext4 /dev/sdb2 /media/user/root_fs ``` Désormais, le support de la carte SD est beaucoup plus lisible : ``` sdb 60,1G ├─sdb1 vfat 60M /media/user/boot_fs └─sdb2 ext4 60G /media/user/root_fs ``` ce qui signifie: - la partition de démarrage sur le Raspberry Pi, est `/dev/sdb1` avec un système de fichiers **vfat** de 60 Mo, monté dans le dossier `/media/user/boot_fs` sur le système de bureau Linux - la partition racine (/) sur le Raspberry Pi, est `/dev/sdb2` avec un système de fichiers **ext4** de 60 Go, monté dans le dossier `/media/user/root_fs` sur le système de bureau Linux. ####Etape 3: Conversion du système de fichiers #####Sauvegarde du contenu de la partition racine Avant de procéder maintenant au formatage de la partition **ext4** vers un autre type de système de fichiers (ce qui détruira toutes les données), il estnécessaire de sauvegarder le contenu de la partition : ``` sudo cp -a /media/user/root_fs /home/user/backup_root_fs ``` L'option -a est importante pour s'assurer que vraiment tout, y compris par ex. cachés/fichiers système, est copié dans le dossier de sauvegarde. #####Création de la partition f2fs Démonter maintenant la partition `/dev/sdb2`: ``` sudo umount /dev/sdb2 ``` et le formater avec le système de fichiers **f2fs** ``` sudo mkfs.f2fs /dev/sdb2 ``` La partition a maintenant un système de fichiers **f2fs**, mais elle est vide, car en formatant tout son contenu a été perdu. #####Restauration du contenu de la partition racine Remonter la partition sur son point de montage précédent ``` sudo mount -t f2fs /dev/sdb2 /media/user/root_fs ``` maintenant avec l'option de type **f2fs**. Le support de carte SD ressemblera alors à ceci : ``` sdb 60,1G ├─sdb1 vfat 60M /media/user/boot_fs └─sdb2 f2fs 60G /media/user/root_fs ``` On peut maintenant restaurer le contenu du système de fichiers racine à partir du dossier de sauvegarde : ``` sudo cp -a /home/user/backup_root_fs/* /media/user/root_fs ``` ####Etape 4: Finalisation Pour rendre le Raspberry Pi bootable avec la carte SD. Modifier d'abord le fichier `/etc/fstab` de la carte SD et adapter l'entrée de montage du système de fichiers racine à **f2fs** : ``` sudo vi /media/user/root_fs/etc/fstab . . . /dev/mmcblk0p1 /boot vfat par défaut 0 2 /dev/mmcblk0p2 / f2fs defaults,noatime,discard 0 1 . . . ``` Modifier ensuite le fichier `cmdline.txt` sur la partition de démarrage de la carte SD et adapter le paramètre de type de système de fichiers racine à **f2fs**: ``` sudo cp –a /media/user/boot_fs/cmdline.txt /media/user/boot_fs/_cmdline.txt # un petit backup avant sudo vi /media/user/boot_fs/cmdline.txt dwc_otg.lpm_enable=0 console= . . . root=/dev/mmcblk0p2 rootfstype=f2fs ascenseur=date limite . . .. ``` Maintenant démonter les systèmes de fichiers de la carte SD, éjecter la carte et l'insérer dans le lecteur de carte du Raspberry Pi. Si tout s’est bien passé, on démarrera sur la carte. On peut le voir au démarrage et avec un `lsblk` (**sda1** pointera sur « / » et **mmcblk0p2** sur `/media/pi/rootfs`)