En ocasiones, pueden no ser suficiente con disponer de un identificador fijo para un filesystem (blkid, uuid, ya sabéis), sino que necesitamos un identificador fijo para el dispositivo o disco.
Puede haber casos en los que puede ser válido utilizar las nomenclaturas disponibles en la ruta /dev/disk:
$ ls -l /dev/disk/ total 0 drwxr-xr-x 2 root root 600 2014-08-19 07:40 by-id drwxr-xr-x 2 root root 80 2014-08-19 09:38 by-label drwxr-xr-x 2 root root 240 2014-08-19 09:38 by-path drwxr-xr-x 2 root root 180 2014-08-19 07:40 by-uuid
Como véis, encontramos los discos identificados por «id«, «label«, «path» y «uuid«. Ejemplo:
$ ls -lR /dev/disk/* /dev/disk/by-id: total 0 lrwxrwxrwx 1 root root 9 2014-08-19 07:39 ata-ST9320423AS_5VH5928G -> ../../sda lrwxrwxrwx 1 root root 10 2014-08-19 07:39 ata-ST9320423AS_5VH5928G-part1 -> ../../sda1 lrwxrwxrwx 1 root root 10 2014-08-19 07:39 ata-ST9320423AS_5VH5928G-part2 -> ../../sda2 lrwxrwxrwx 1 root root 10 2014-08-19 07:39 ata-ST9320423AS_5VH5928G-part3 -> ../../sda3 [...] /dev/disk/by-label: total 0 lrwxrwxrwx 1 root root 10 2014-08-19 07:39 storage -> ../../sda1 lrwxrwxrwx 1 root root 10 2014-08-19 07:39 System\x20Reserved -> ../../sda2 /dev/disk/by-path: total 0 lrwxrwxrwx 1 root root 9 2014-08-19 07:39 pci-0000:00:1a.0-usb-0:1.2:1.0-scsi-0:0:0:0 -> ../../sdb lrwxrwxrwx 1 root root 9 2014-08-19 07:39 pci-0000:00:1f.2-scsi-0:0:0:0 -> ../../sda lrwxrwxrwx 1 root root 10 2014-08-19 07:39 pci-0000:00:1f.2-scsi-0:0:0:0-part1 -> ../../sda1 lrwxrwxrwx 1 root root 10 2014-08-19 07:39 pci-0000:00:1f.2-scsi-0:0:0:0-part2 -> ../../sda2 lrwxrwxrwx 1 root root 10 2014-08-19 07:39 pci-0000:00:1f.2-scsi-0:0:0:0-part3 -> ../../sda3 [...] /dev/disk/by-uuid: total 0 lrwxrwxrwx 1 root root 10 2014-08-19 07:40 278b1de4-fd78-41b6-9271-fda3ebe31b9b -> ../../sda6 lrwxrwxrwx 1 root root 10 2014-08-19 07:39 583fb8a1-4935-4e01-bef4-49bd8ffd27c1 -> ../../sda7 lrwxrwxrwx 1 root root 10 2014-08-19 07:40 9f7b446b-6852-4840-96e0-5d8045926b44 -> ../../dm-0 lrwxrwxrwx 1 root root 10 2014-08-19 07:39 a78dc39a-ffa1-4f89-baa3-29673b084c7c -> ../../sda5 [...]
Si esto no es suficiente, podemos recurrir a «udev» y su capacidad de asignar identificadores fijos a dispositivos (no sólo a discos, también a tarjetas de red por ejemplo). Para dar un mapeo fijo a un disco lo primero es conocer su scsi_id (identificador único SCSI):
# /sbin/scsi_id --whitelisted --replace-whitespace /dev/sdj 3600144f0956df03d000053eac12d0003
Ahora que tenemos el SCSI_ID, creamos un nuevo fichero con las reglas udev, hay un directorio específico para añadir nuestras reglas personalizadas:
/etc/udev/rules.d/20-persistent-disk.rules
En el fichero indicado, añadimos las siguientes líneas:
KERNEL=="sd[a-z]", SUBSYSTEM=="block", PROGRAM="/sbin/scsi_id --whitelisted --replace-whitespace /dev/$name", RESULT=="3600144f0956df03d000053eac12d0003", NAME="persistente" KERNEL=="sd[a-z][0-9]", SUBSYSTEM=="block", PROGRAM="/sbin/scsi_id --whitelisted --replace-whitespace /dev/$name", RESULT=="3600144f0956df03d000053eac12d0003", NAME="persistente%n"
Básicamente, en la primera línea estamos diciendo que el dispositivo de bloques que sea sd* y su SCSI_ID sea el que hemos sacado antes, le asigne el nombre permanente /dev/persistente. La segunda línea es para sus particiones, le asignará /dev/persistente1, /dev/persistente2, etc.
Finalmente recargamos las reglas de udev con el siguiente comando:
# udevadm control --reload-rules
Y ya deberíamos ver nuestro dispositivo con nombre persistente:
# ls -l /dev/persistente brw-rw---- 1 root disk 8, 32 ago 12 20:03 /dev/persistente
Nota: cuando asignas un nombre persistente, es posible que el disco (/dev/sd*) ya no aparezca al hacer un fdisk, por lo menos a mí me ha pasado.