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 utilise pv 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).