# [TIP] Udev et fstab simplifié

## [vector]

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.  :Wink: 

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 :

```

/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 :

```

udevinfo -a -p /block/sda

```

Ce qui va renvoyer :

```

 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 :

```

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.  :Very Happy: 

 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 :

```

# 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.  :Smile: 

S'il y a des suggestions, des erreurs, ou des passages pas clair ^^...

----------

