Système de fichier Raspberry sur clé ou disque USB
Comme indiqué dans le très bon article de Framboise314, il est interressant, compte tenu de la fiabilité limité des carte SD en écriture, et compte tenu des vitesses d’accès, de placer le système de fichier sur une clé ou disque dur USB.
Les opérations décrites ci-dessous sont différentes de celles de l’article de Framboise314 (mais le but reste le même).
Les principales différences (qui justifient donc un peu ce post) sont:
- Opérations effectuées à partir d’un autre poste GnuLinux (et non depuis le Rasp)
- Opérations comprenant l’installation depuis le fichier
.img
- Opérations effectuées en terminal (pas besoin de X, pourrait être scripté, etc.. )
- Pas de copie carte SD -> clé USB (mais
.img
-> clé USB et.img
-> carte SD donc probablement plus rapide ?) - Utilisation de UUID pour le
fstab
afin de pouvoir utiliser d’autres disques USB. - Utilisation d’une clé USB qui n’est pas encore ni partitionée ni formatée.
- L’opération sur la clé USB intervient dans la foulée de l’installation sur la carte SD (pas de déplacement de données perso)
On part du principe que la clé USB est vue sur le PC qui prépare, en /dev/sdb
. (/dev/sda
étant généralement le disque dur du PC).
Les commandes suivante ne sont PAS a effectuer sur le Rasp (car il n’est pas encore installé ..vous me suivez ? ).
/!\\ On joue avec dd
, avec la table des partitions etc.. Donc n’utilisez les commandes suivantes que si vous les comprenez…
- Lister les partitions
sudo fdisk -l
- Démonter les éventuelles partitions existantes qui se seraient montées automatiquement en insérant la carte SD et la clé USB.
umount /dev/mmcblk0p1 && umount /dev/mmcblk0p2
umount /dev/sdb1 && umount /dev/sdb2
- On claque les 100 premiers Mio du
.img
sur la carte SD (à priori seuls les 57 premiers Mio devraient suffir)
sudo dd if=/data/RaspberryPi/2013-02-09-wheezy-raspbian.img of=/dev/mmcblk0 bs=1M count=100 && sudo sync
- On claque le
.img
sur la clé USB. On utilisepv
pour visualiser l’avancement.
sudo dd if=/data/RaspberryPi/2013-02-09-wheezy-raspbian.img | pv -tpreb | sudo dd of=/dev/sdb bs=4M && sudo sync
- On modifie le fichier
cmdline.txt
mkdir /tmp/toto
sudo mount /dev/mmcblk0p1 /tmp/toto
sudo vi /tmp/toto/cmdline.txt
root=/dev/sda2
sudo umount /dev/mmcblk0p1
C’est bien sda2
qui est utilisé car 2ème partition du premier “disque” du Rasp… et je n’ai pas trouvé à la date de rédaction de ce post de moyen de forcer ce paramètre en utilisant UUID (mais si quelqu’un à trouvé un moyen qui fonctionne, qu’il laisse un commentaire et sinon j’imagine que ceci pourra changer par un upgrade d’un futur firmware )
- On détermine le UUID de sdb2 (pour le fstab)
sudo partprobe /dev/sdb
sudo blkid | grep sdb2
- On modifie le fichier
fstab
sudo mount /dev/sdb2 /tmp/toto
sudo vi /tmp/toto/etc/fstab
/dev/mmcblk0p1 /boot vfat defaults,ro 0 0
UUID=XXXXXXXX-AAAA-BBBB-CCCC-YYYYYYYYYYYY / ext4 defaults,noatime 0 0
sudo umount /dev/sdb2
/dev/mmcblk0p1
est donc en ReadOnly (ro) et /dev/sda2
est remplacé par l’UUID correspondant.
Ceci permet d’identifier avec certitude le bon disque USB dans le cas où plusieurs sont branchés.
Attention a renlever le ReadOnly dans certains cas (Upgrade du firmware - rpi-update
/ Modif memory_split
et donc globalement tout ce qui fait des modifs dans /boot
… )
La parition sdb2
ne fait qu’une partie de la taille totale de la clé USB car crée par dd
et le .img
Il faut donc l’agrandir.
- Lister les partitions et afficher leur taille de manière lisible
sudo parted -l
-
Augmentation de la taille de la partition
sdb2
On va supprimer la référence dans la table des partitions puis la recréer avec la taille totale.
sudo fdisk /dev/sdb
Puis utiliser “p” pour noter le point de départ de la seconde partition (Avec la version actuelle de Raspbian et d’Occidentalis c’est 122880)
Command (m for help): d
Partition number (1-4): 2
Command (m for help): n
Select (default p): p
Partition number (1-4, default 2):
First sector (2048-15663103, default 2048): 122880
Last sector, +sectors or +size{K,M,G} (122880-15663103, default 15663103):
Using default value 15663103
Command (m for help): p
Command (m for help): w
sudo parted -l
doit maintenant lister une taille de partition sdb2 prenant la taille quasi totale de la clé USB.
- Augmentation de la taille du système de fichier EXT4
sudo e2fsck -f /dev/sdb2
sudo resize2fs /dev/sdb2
A noter qu’on peut également ensuite avec parted supprimer les 2 partitions inutiles:
/dev/mmcblk0p2
(de toute façon on n’utilise pas l’espace additionnel de la SD)/dev/sdb1
(on pert 57 Mio)
Procédure testée plusieurs fois sur des clés USB différentes, des cartes SD différentes, avec des images différentes (Rasbian/Occidentalis).