[vector] Apprentice
Joined: 02 Nov 2004 Posts: 170 Location: France, Le Havre
|
Posted: Mon Feb 21, 2005 5:44 pm Post subject: [TIP] Udev et fstab simplifié |
|
|
Suite à mes problèmes d'ordre de disque, j'ai résolu le problème grâce aux règles udev et qui permet en même temps de simplifier le fstab. Je sais pas si ça peut servir à quelqu'un mais je le donne quand même.
Je vais donc donner comme exemple mon cas, c'est très facile ensuite d'adapter.
- Introduction
Mon disque-dur se présente à l'origine comme suit :
- /dev/sda1 (ext2) > /boot
- /dev/sda2 (swap) > swap
- /dev/sda3 (ext3) > /
- /dev/sda5 (ext3) > /home
- /dev/sda6 (fat32) > /mnt/win
Cependant, j'ai un fstab qui est :
Code: |
/dev/boot /boot ext3 noauto,noatime 1 1
/dev/root / ext3 noatime 0 0
/dev/swap none swap sw 0 0
/dev/home /home ext3 noatime 0 0
/dev/win /mnt/win vfat noatime 0 0
|
Nous allons donc voir comment avec udev obtenir un fstab de ce type.
Recherche des infos de périphérique
Afin de pouvoir identifier de façon unique un disque, il faut récupérer des infos dessus, pour cela si le disque est sda, on execute :
Code: |
udevinfo -a -p /block/sda
|
Ce qui va renvoyer :
Code: |
looking at class device '/sys/block/sda':
SYSFS{dev}="8:48"
SYSFS{range}="16"
SYSFS{removable}="0"
SYSFS{size}="586114704"
SYSFS{stat}=" 136 127 284 158 0 0 0 0 0 158 158"
follow the class device's "device"
looking at the device chain at '/sys/devices/pci0000:00/0000:00:1f.2/host3/3:0:0:0':
BUS="scsi"
ID="3:0:0:0"
SYSFS{detach_state}="0"
SYSFS{device_blocked}="0"
SYSFS{model}="Maxtor 6B300S0 "
SYSFS{queue_depth}="1"
SYSFS{rev}="BANC"
SYSFS{scsi_level}="6"
SYSFS{state}="running"
SYSFS{timeout}="30"
SYSFS{type}="0"
SYSFS{vendor}="ATA "
looking at the device chain at '/sys/devices/pci0000:00/0000:00:1f.2/host3':
BUS=""
ID="host3"
SYSFS{detach_state}="0"
looking at the device chain at '/sys/devices/pci0000:00/0000:00:1f.2':
BUS="pci"
ID="0000:00:1f.2"
SYSFS{class}="0x01018f"
SYSFS{detach_state}="0"
SYSFS{device}="0x24d1"
SYSFS{irq}="9"
SYSFS{subsystem_device}="0x0157"
SYSFS{subsystem_vendor}="0x1028"
SYSFS{vendor}="0x8086"
looking at the device chain at '/sys/devices/pci0000:00':
BUS=""
ID="pci0000:00"
SYSFS{detach_state}="0"
|
La ligne SYSFS{model}="Maxtor 6B300S0 " est la plus interessante, sachant que c'est le seul disque-dur de ce type que je possède, cette ligne me permettra de l'identifier facilement et de façon unique.
Création de la règle udev
Les règles udev personnalisées sont écrire dans le fichier /etc/udev/rules.d/10-udev.rules. En effet, udev lit les règles dans l'ordre ordinal du nom des fichier, pour être sur que nos règles seront lues en premier, on le nomme en commençant par 10 (le fichier de règles par défaut débute par 50).
On peut donc inscrire la règle :
Code: |
BUS="scsi", SYSFS{model}="Maxtor 6B300S0 ", NAME="disks/sata%n", SYMLINK="sda%n"
|
On doit mettre en relation BUS avec l'information SYSFS : ici SYSFS{model} est affiché lors de la remontée vers SCSI, donc on met BUS="scsi".
NAME est le nom du périphérique. Ce disque sera donc accessible via /dev/disks/sata%n et /dev/sda%n (pour garder une compatibilité) sachant que %n est le numéro que le numéro attribue à chaque partition.
Pour des infos plus précises sur udev, voir ce site ou man udev.
Définir un nom précis pour chaque partition
Notre but est d'obtenir un fstab plus simple, voici les régles udev que l'on devra utiliser :
Code: |
# Règles pour nommer les partitions
BUS="scsi", SYSFS{model}="Maxtor 6B300S0 ", KERNEL="*1", NAME="boot", SYMLINK="sda1" # sda1 donc KERNEL="*1"
BUS="scsi", SYSFS{model}="Maxtor 6B300S0 ", KERNEL="*2", NAME="swap", SYMLINK="sda2" # sda2 donc KERNEL="*2"
BUS="scsi", SYSFS{model}="Maxtor 6B300S0 ", KERNEL="*3", NAME="root", SYMLINK="sda3" # ...
BUS="scsi", SYSFS{model}="Maxtor 6B300S0 ", KERNEL="*5", NAME="home", SYMLINK="sda5"
BUS="scsi", SYSFS{model}="Maxtor 6B300S0 ", KERNEL="*6", NAME="win", SYMLINK="sda6"
# Règle par défaut
BUS="scsi", SYSFS{model}="Maxtor 6B300S0 ", NAME="disks/sata%n", SYMLINK="sda%n"
|
KERNEL permet de sélectionner les périphériques en fonction du nom que leur donne le noyau. Les partitions seront donc nommées *x avec x un entier.
Puisque nous reprenons la établie plus haut, nous sélectionnons le bon disque dur, avec la ligne KERNEL nous sélectionons la bonne partition. La règle par défaut est là pour rendre le disque accessible dans son ensemble dans /dev/disks.
Ainsi, quand au démarrage, udev attribura à la première partition le nom boot, la deuxième swap...
Conclusion
Chaque disque est disponible dans /dev/disks ou /dev/[h,s]d[a-z], ce qui est utilise pour fdisk ou autres.
Chaque partition est accessible par son nom : /dev/boot, /dev/root, /dev/swap... ou par le nom classique pour garder une certaine compatibilité (pour l'enlever, il suffit d'enlever les SYMLINK).
Vous obtenez donc des disques beaucoup plus facilement repérables.
S'il y a des suggestions, des erreurs, ou des passages pas clair ^^... _________________ [Gentoo 2.6.10-r6 + WinXP] - [Gentoo 2.6.10-r9 + Win98]
Admon - Dernière capture d'écran - Jabber : vector@jabber.fr |
|