Il arrive parfois que l'on ne puisse pas déterminer à l'avance que tel disque sera vu par le bios (donc grub et le système ensuite) comme hda ou hdb ou sda ou autre.
Voir aussi au poste
2 l'utilisation des règles
udev pour gérer les disques et clés usb.
L'idée est donc de désigner les disques de façon définitive et sans confusion possible.
La lecture du man fstab nous donne une piste : " Plutôt que fournir explicitement le nom du périphérique, on peut indiquer un système de fichiers (ext2 ou XFS) à monter par son UUID ou son étiquette de volume (voir e2label(8) ou xfs_admin(8)), en écrivant
LABEL=<label> ou
UUID=<uuid>, par exemple ‘LABEL=Boot’ ou ‘UUID=3e6be9de-8139-11d1-9106-a43f08d823a6’. Ceci rendra le système plus robuste à l’ajout ou à la suppression de disque SCSI par exemple." Bien sûr cela ne concerne pas seulement le SCSI.
Le label est plus simple à utiliser car plus facile à se remémorer qu'une longue suite de chiffres et de lettres. Pourtant l'UUID, (Universal Unique IDentifier), est plus solide car vraiment unique et attribué à la création du système de fichiers.
Pour cet exemple je vais utiliser la partition hda1 qui a un système de fichiers ext3. On récupère donc l'uuid :
:~$ sudo dumpe2fs -h /dev/hda1 |grep -i uuid
dumpe2fs 1.38 (30-Jun-2005)
Filesystem UUID: b325e4c2-d5a3-49e4-9f63-38aed7e08f70
On aurait aussi pu utiliser tune2fs pour cela :
:~$ sudo tune2fs -l /dev/hda1 | grep -i uuid
Filesystem UUID: b325e4c2-d5a3-49e4-9f63-38aed7e08f70
Pour du reiserfs il aurait fallu faire probablement :
:~$ sudo umount /dev/hda2
:~$ sudo reiserfstune /dev/hda2 |grep -i uuid
UUID: a8cba3c2-f569-448c-8e44-b76dffc13fbe
Pour la partition de swap je n'ai pas trouvé d'autre moyen que de créer un label pour connaître l'uuid. Si vous avez un autre moyen, je suis preneur. Si l'on ne se souvient plus de l'adresse de la swap, on peut la récupérer dans fstab :
:~$ grep "swap" "/etc/fstab"
/dev/hda5 none swap sw 0 0
Puis création du label :
:~$ sudo mkswap -L swap /dev/hda5
Initialisation de la version de l'espace de swap 1, taille = 904295 kB
LABEL=swap, UUID=bf769467-377e-4545-b945-b6f20f10b436
On a donc pu récupérer l'UUID.
Il faut maintenant modifier les indications dans
/etc/fstab pour remplacer les adresses /dev/hd?? par UUID. Dans mon cas ce sera :
UUID=b325e4c2-d5a3-49e4-9f63-38aed7e08f70 / ext3 defaults,errors=remount-ro 0 1
UUID=bf769467-377e-4545-b945-b6f20f10b436 none swap sw 0 0
Si je voulais monter une partition en ligne de commande par son uuid, je ferais :
sudo mount UUID=f2d2ec0c-e9a6-4380-8133-f64336f9976e /mnt/hdb6
(voir aussi mount -U )
Pour le menu de lancement de grub, je vais modifier ainsi /boot/grub/menu.lst :
title Ubuntu, kernel 2.6.15-23-386
root (hd0,0)
kernel /boot/vmlinuz-2.6.15-23-386 root=UUID=b325e4c2-d5a3-49e4-9f63-38aed7e08f70 ro nosplash
initrd /boot/initrd.img-2.6.15-23-386
savedefault
boot
Reste le problème du root (hd0,0). Mais là, en cas de besoin on peut toujours utiliser l'auto-complétion de grub avec la touche de tabulation, qui nous donnera les indications et les différentes possibilités. Par exemple
grub> root (hd ---> tabulation
Possible disks are: hd0 hd1
grub> root (hd0, ---> tabulation
Possible partitions are:
Partition num: 0, Filesystem type is ext2fs, partition type 0x83
Partition num: 2, Filesystem type unknown, partition type 0x7
Partition num: 4, Filesystem type unknown, partition type 0x82
Dans l'exemple, on voit ma partition de type 0x83, celle qui nous interesse, une partition ntfs de tests pour fuse, et la partition 0x82 de swap.
Il me reste tout de même à faire quelques tests pour passer plus facilement le cap du (hd0,0), à moins de faire plusieurs titles avec diverses possibilités :-) À suivre.
À noter aussi que device.map ressemble à ceci :
(hd0) UUID=b325e4c2-d5a3-49e4-9f63-38aed7e08f70
(hd1) UUID=f2d2ec0c-e9a6-4380-8133-f64336f9976e
Mais ce n'est pas vraiment important.
ÉDIT : pour plus de détails sur les UUID, voir :
http://forum.ubuntu-fr.org/viewtopic.php?id=72352