Persistent block device naming (Español)
Este artículo describe cómo utilizar nombres permanentes para sus dispositivos de bloques. Esto ha sido posible gracias a la introducción de udev y tiene algunas ventajas sobre los nombres basados en el bus de conexión. Si el equipo tiene más de una controladora de disco SATA, SCSI o IDE, el orden en que se añaden sus correspondientes nodos de dispositivos es arbitraria. Esto puede dar lugar a nombres de dispositivos como /dev/sda
y /dev/sdb
alternando aleatoriamente en cada arranque, que puede terminar en una nominación de los dispositivos que impida el arranque del sistema, en pánico del kernel o en una desaparición del dispositivo de bloque. La nomenclatura permanente resuelve estos problemas.
- La nomenclatura persistente tiene límites que están fuera del alcance de este artículo. Por ejemplo, si bien mkinitcpio tiene soporte para cierto método, systemd puede imponer sus propios límites (por ejemplo, FS#42884) para nombrarlo, puediendo implementarlo durante el arranque.
- Si está usando LVM, este artículo no es relevante, dado que los volúmenes lógicos como
/dev/NombredelGrupodeVolúmenes/NombredelVolumenLógico
, las rutas del dispositivo son persistentes.
https://wiki.archlinux.org/index.php?
Métodos para nombrar los dispositivos de forma permanente
Hay cuatro esquemas diferentes para nombrar de forma permanente los dispositivos: by-label, by-uuid, by-id y by-path. Para aquellos que utilizan discos con tabla de particiones GUID (GPT), pueden usar dos esquemas adicionales by-partlabel y by-partuuid. También puede utilizar #Nombres estáticos de los dispositivos con udev.
Los directorios en /dev/disk/
se crean y destruyen dinámicamente, dependiendo de si hay dispositivos en ellos.
Las siguientes secciones describen lo que son y cómo se utilizan los diferentes métodos de asignación de nombres permanentes.
La orden lsblk se puede utilizar para la visualización gráfica de los primeros esquemas de nombres persistentes:
$ lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 vfat CBB6-24F2 /boot ├─sda2 ext4 Arch Linux 0a3407de-014b-458b-b5c1-848e92a327a3 / ├─sda3 ext4 Data b411dc99-f0a0-4c87-9e05-184977be8539 /home └─sda4 swap f9fe0b69-a280-415d-a03a-a32752370dee [SWAP] mmcblk0 └─mmcblk0p1 vfat F4CA-5D75
Para aquellos que utilizan GPT, puede acudir a la orden blkid
. Esta última es más eficiente para los scripts, pero más difícil de leer.
# blkid
/dev/sda1: UUID="CBB6-24F2" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="d0d0d110-0a71-4ed6-936a-304969ea36af" /dev/sda2: LABEL="Arch Linux" UUID="0a3407de-014b-458b-b5c1-848e92a327a3" TYPE="ext4" PARTLABEL="GNU/Linux" PARTUUID="98a81274-10f7-40db-872a-03df048df366" /dev/sda3: LABEL="Data" UUID="b411dc99-f0a0-4c87-9e05-184977be8539" TYPE="ext4" PARTLABEL="Home" PARTUUID="7280201c-fc5d-40f2-a9b2-466611d3d49e" /dev/sda4: UUID="f9fe0b69-a280-415d-a03a-a32752370dee" TYPE="swap" PARTLABEL="Swap" PARTUUID="039b6c1c-7553-4455-9537-1befbc9fbc5b" /dev/mmcblk0: PTUUID="0003e1e5" PTTYPE="dos" /dev/mmcblk0p1: UUID="F4CA-5D75" TYPE="vfat" PARTUUID="0003e1e5-01"
by-label
Casi todos los tipos de sistemas de archivos pueden tener una etiqueta. Todos los volúmenes que tienen una se enumeran en el directorio /dev/disk/by-label
.
$ ls -l /dev/disk/by-label
total 0 lrwxrwxrwx 1 root root 10 May 27 23:31 Data -> ../../sda3 lrwxrwxrwx 1 root root 10 May 27 23:31 Arch\x20Linux -> ../../sda2
La mayoría de los sistemas de archivos admiten la configuración de etiquetas al crear el sistema de archivos, consulte la página de manual de la utilidad mkfs.*
. Para algunos sistemas de archivos también es posible cambiar las etiquetas. Los siguientes son algunos métodos para cambiar etiquetas en sistemas de archivos comunes:
- swap
swaplabel -L "etiqueta nueva" /dev/XXX
utilizando util-linux- ext2/3/4
e2label /dev/XXX "etiqueta nueva"
utilizando e2fsprogs- btrfs
btrfs filesystem label /dev/XXX "etiqueta nueva"
utilizando btrfs-progs- reiserfs
reiserfstune -l "etiqueta nueva" /dev/XXX
utilizando reiserfsprogs- jfs
jfs_tune -L "etiqueta nueva" /dev/XXX
utilizando jfsutils- xfs
xfs_admin -L "etiqueta nueva" /dev/XXX
utilizando xfsprogs- fat/vfat
fatlabel /dev/XXX "etiqueta nueva"
utilizando dosfstoolsmlabel -i /dev/XXX ::"etiqueta nueva"
utilizando mtools- exfat
exfatlabel /dev/XXX "etiqueta nueva"
utilizando exfat-utils- ntfs
ntfslabel /dev/XXX "etiqueta nueva"
utilizando ntfs-3g- udf
udflabel /dev/XXX "etiqueta nueva"
utilizando udftools- crypto_LUKS (LUKS2 only)
cryptsetup config --label="etiqueta nueva" /dev/XXX
utilizando cryptsetup
La etiqueta de un dispositivo se puede obtener con lsblk:
$ lsblk -dno LABEL /dev/sda2
Arch Linux
O con blkid:
# blkid -s LABEL -o value /dev/sda2
Arch Linux
- El sistema de archivos no debe estar montado para poder cambiar su etiqueta. Para el sistema de archivos raíz, esto se puede lograr arrancando desde otro volumen.
- Las etiquetas tienen que ser inequívocas (sin ambigüedades) para evitar posibles conflictos.
- Las etiquetas pueden tener una longitud de hasta 16 caracteres.
- Dado que la etiqueta es una propiedad del sistema de archivos, no es adecuada para direccionar hacia un único dispositivo RAID de forma persistente.
- Cuando se usan contenedores cifrados con dm-crypt, las etiquetas de los sistemas de archivos dentro de los contenedores no estarán disponibles mientras el contenedor esté bloqueado/cifrado.
by-uuid
UUID es un mecanismo para dotar a cada sistema de archivos de un identificador único. Estos identificadores son generados por las utilidades del sistema de archivos (por ejemplo, mkfs.*
) cuando la partición se formatea y se ha diseñado de manera que evite conflictos. Todos los sistemas de archivos de GNU/Linux (incluyendo swap y las cabeceras LUKS de dispositivos cifrados en bruto) soportan UUID. Los sistemas de archivos FAT, exFAT y NTFS no son compatibles con UUID, pero todavía se enumeran en /dev/disk/by-uuid
con un UID más corto (identificador único):
$ ls -l /dev/disk/by-uuid/
total 0 lrwxrwxrwx 1 root root 10 May 27 23:31 0a3407de-014b-458b-b5c1-848e92a327a3 -> ../../sda2 lrwxrwxrwx 1 root root 10 May 27 23:31 b411dc99-f0a0-4c87-9e05-184977be8539 -> ../../sda3 lrwxrwxrwx 1 root root 10 May 27 23:31 CBB6-24F2 -> ../../sda1 lrwxrwxrwx 1 root root 10 May 27 23:31 f9fe0b69-a280-415d-a03a-a32752370dee -> ../../sda4 lrwxrwxrwx 1 root root 10 May 27 23:31 F4CA-5D75 -> ../../mmcblk0p1
El UUID de un dispositivo se puede obtener con lsblk:
$ lsblk -dno UUID /dev/sda1
CBB6-24F2
O con blkid:
# blkid -s UUID -o value /dev/sda1
CBB6-24F2
La ventaja de usar el método UUID es que es mucho menos probable que se produzcan colisiones de nombres que con las etiquetas. Además, se genera automáticamente en la creación del sistema de archivos. Será, por ejemplo, el único indicador, incluso si el dispositivo está conectado a otro sistema (el cual, tal vez, puede tener un dispositivo con la misma etiqueta).
La desventaja es que UUID hace largas líneas de código difícil de leer y rompe el formato en muchos archivos de configuración (por ejemplo fstab o Dm-crypt (Español)/System configuration (Español)#crypttab|crypttab]]). También, cada vez que un volumen se redimensiona o reformatea, se genera un nuevo UUID y los archivos de configuración tienen que volver a ajustarse manualmente.
by-id y by-path
by-id
crea un nombre único en función del número de serie del hardware, by-path
crea un nombre único en función de la ruta física más corta (de acuerdo con sysfs). Ambos contienen cadenas para indicar el subsistema al que pertenecen (es decir, pci-
para by-path
, y ata-
para by-id
) de modo que están vinculados al hardware que controla el dispositivo. Esto implica diferentes niveles de persistencia: by-path
cambiará cuando el dispositivo se conecte a un puerto diferente del controlador; by-id
cambiará cuando se conecte el dispositivo en un puerto de un controlador de hardware sujeto a otro subsistema. [1] Por lo tanto, ninguno de los dos son adecuados para lograr nombres persistentes tolerantes a los cambios de hardware.
Sin embargo, ambos proporcionan información importante para encontrar un dispositivo en particular en una gran infraestructura de hardware. Por ejemplo, si no se asignan manualmente etiquetas persistentes (by-label
o by-partlabel
) y se mantiene un directorio con utilización de puerto de hardware, by-id
y by-path
pueden ser utilizados para encontrar un dispositivo en particular. [2] [3]
by-id
también crea enlaces a nombres a nivel mundial (siglas en inglés World Wide Name) de los dispositivos de almacenamiento que lo admitan. A diferencia de otros enlaces by-id
, WWNs son completamente persistentes y no cambiarán al margen del subsistema utilizado.
$ ls -l /dev/disk/by-id/
total 0 lrwxrwxrwx 1 root root 10 May 27 23:31 ata-WDC_WD2500BEVT-22ZCT0_WD-WXE908VF0470 -> ../../sda lrwxrwxrwx 1 root root 10 May 27 23:31 ata-WDC_WD2500BEVT-22ZCT0_WD-WXE908VF0470-part1 -> ../../sda1 lrwxrwxrwx 1 root root 10 May 27 23:31 ata-WDC_WD2500BEVT-22ZCT0_WD-WXE908VF0470-part2 -> ../../sda2 lrwxrwxrwx 1 root root 10 May 27 23:31 ata-WDC_WD2500BEVT-22ZCT0_WD-WXE908VF0470-part3 -> ../../sda3 lrwxrwxrwx 1 root root 10 May 27 23:31 ata-WDC_WD2500BEVT-22ZCT0_WD-WXE908VF0470-part4 -> ../../sda4 lrwxrwxrwx 1 root root 10 May 27 23:31 mmc-SD32G_0x0040006d -> ../../mmcblk0 lrwxrwxrwx 1 root root 10 May 27 23:31 mmc-SD32G_0x0040006d-part1 -> ../../mmcblk0p1 lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f -> ../../sda lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f-part1 -> ../../sda1 lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f-part2 -> ../../sda2 lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f-part3 -> ../../sda3 lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f-part4 -> ../../sda4
$ ls -l /dev/disk/by-path/
total 0 lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:00:1f.2-ata-1 -> ../../sda lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:00:1f.2-ata-1-part1 -> ../../sda1 lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:00:1f.2-ata-1-part2 -> ../../sda2 lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:00:1f.2-ata-1-part3 -> ../../sda3 lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:00:1f.2-ata-1-part4 -> ../../sda4 lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:07:00.0-platform-rtsx_pci_sdmmc.0 -> ../../mmcblk0 lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:07:00.0-platform-rtsx_pci_sdmmc.0-part1 -> ../../mmcblk0p1
by-partlabel
Las etiquetas de partición GPT se pueden definir en el encabezado de la entrada de la partición en discos GPT.
Este método es muy similar al de las etiquetas de los sistemas de archivos, excepto que las etiquetas de la partición no se ven afectadas si se cambia el sistema de archivos en la partición.
Todas las particiones que tienen etiquetas de partición se enumeran en el directorio /dev/disk/by-partlabel
.
ls -l /dev/disk/by-partlabel/
total 0 lrwxrwxrwx 1 root root 10 May 27 23:31 EFI\x20system\x20partition -> ../../sda1 lrwxrwxrwx 1 root root 10 May 27 23:31 GNU\x2fLinux -> ../../sda2 lrwxrwxrwx 1 root root 10 May 27 23:31 Home -> ../../sda3 lrwxrwxrwx 1 root root 10 May 27 23:31 Swap -> ../../sda4
La etiqueta de partición de un dispositivo se puede obtener con lsblk:
$ lsblk -dno PARTLABEL /dev/sda1
EFI system partition
O con blkid:
# blkid -s PARTLABEL -o value /dev/sda1
EFI system partition
- Las etiquetas de las particiones GPT también tienen que ser diferentes para evitar conflictos. Para cambiar la etiqueta de una partición, puede utilizar gdisk o la versión basada en ncurse cgdisk. Ambas utilidades están disponibles en el paquete gptfdisk. Vea Partitioning#Partitioning tools.
- De acuerdo con la especificación, las etiquetas de las particiones GPT pueden tener hasta 72 caracteres de longitud.
by-partuuid
Al igual que con las etiquetas de particiones GPT, el UUID de la partición se define en la entrada de la partición en discos GPT.
MBR no admite UUID de las particiones, pero Linux[4] y el software que utiliza libblkid[5] (por ejemplo, udev[6]) son capaces de generar pseudo PARTUUID para particiones MBR. El formato es SSSSSSSS-PP
, donde SSSSSSSS
es una firma de disco MBR de 32 bits llena de ceros, y PP
es un número de partición lleno de ceros en formato hexadecimal. A diferencia de un PARTUUID normal de una partición GPT, el pseudo PARTUUID de MBR puede cambiar si cambia el número de la partición.
El directorio dinámico es similar al de los otros métodos y, al igual que con el UUID de los sistemas de archivos, el uso del UUID de las particiones es preferido sobre el de las etiquetas.
ls -l /dev/disk/by-partuuid/
total 0 lrwxrwxrwx 1 root root 10 May 27 23:31 0003e1e5-01 -> ../../mmcblk0p1 lrwxrwxrwx 1 root root 10 May 27 23:31 039b6c1c-7553-4455-9537-1befbc9fbc5b -> ../../sda4 lrwxrwxrwx 1 root root 10 May 27 23:31 7280201c-fc5d-40f2-a9b2-466611d3d49e -> ../../sda3 lrwxrwxrwx 1 root root 10 May 27 23:31 98a81274-10f7-40db-872a-03df048df366 -> ../../sda2 lrwxrwxrwx 1 root root 10 May 27 23:31 d0d0d110-0a71-4ed6-936a-304969ea36af -> ../../sda1
La partición UUID de un dispositivo se puede obtener con lsblk:
$ lsblk -dno PARTUUID /dev/sda1
d0d0d110-0a71-4ed6-936a-304969ea36af
O conblkid:
# blkid -s PARTUUID -o value /dev/sda1
d0d0d110-0a71-4ed6-936a-304969ea36af
Nombres estáticos de los dispositivos con udev
Véase Udev#Setting static device names.
Utilizar nomenclatura permanente
Existen varias aplicaciones que se pueden configurar mediante el uso la nomenclatura permanente. Los siguientes son algunos ejemplos de cómo configurarlos.
fstab
Ver el artículo principal: fstab (Español)#Identificación de sistemas de archivos.
Parámetros del kernel
Para usar nombres persistentes en los parámetros del kernel, se deben cumplir los siguientes requisitos previos. En una instalación estándar, que sigue la guía de instalación, se cumplen los dos requisitos previos:
- Está utilizando una imagen de disco RAM inicial de mkinitcpio
- Tiene activado el hook de udev o de systemd en
/etc/mkinitcpio.conf
La ubicación del sistema de archivos raíz viene dada por el parámetro root
en la línea de órdenes del kernel. La línea de órdenes del kernel se configura desde el gestor de arranque, consulte Kernel parameters (Español)#Configuración. Para cambiar a nombres de dispositivo persistentes, basta con cambiar los parámetros que identifican los dispositivos de bloque, por ejemplo, root
y resume
, dejando otros parámetros tal como están. Se admiten varios esquemas de nomenclatura:
El nombre persistente del dispositivo utilizando etiquetas y el formato LABEL=
, en este ejemplo Arch Linux
es la ETIQUETA del sistema de archivos raíz.
root="LABEL=Arch Linux"
El nombre persistente del dispositivo utilizando UUID y el formato UUID=
, en este ejemplo 0a3407de-014b-458b-b5c1-848e92a327a3
, es el UUID del sistema de archivos raíz.
root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3
El nombre persistente del dispositivo utilizando el id del disco y el formato de ruta /dev
, en este ejemplo wwn-0x60015ee0000b237f-part2
, es el identificador de la partición raíz.
root=/dev/disk/by-id/wwn-0x60015ee0000b237f-part2
El nombre persistente del dispositivo utilizando el UUID de la partición GPT y el formato PARTUUID=
, en este ejemplo 98a81274-10f7-40db-872a-03df048df366
, es el PARTLABEL de la partición raíz.
root=PARTUUID=98a81274-10f7-40db-872a-03df048df366
El nombre persistente del dispositivo utilizando la etiqueta de la partición GPT y el formato PARTLABEL=
, en este ejemplo GNU/Linux
, es el PARTLABEL de la partición raíz.
root="PARTLABEL=GNU/Linux"