Persistent block device naming (Español)

From ArchWiki
Estado de la traducción: esta traducción de Persistent block device naming fue revisada el 2019-10-23. Si existen cambios puede actualizarla o avisar al equipo de traducción.

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.

Nota:
  • 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.

Nota: tenga en cuenta que la clonación de discos crea dos discos diferentes con el mismo nombre.

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 dosfstools
mlabel -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
Nota:
  • 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.

Sugerencia: en caso de que su partición de intercambio no tenga un UUID asignado, tendrá que restablecer la partición de swap usando la utilidad mkswap.

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

Nota: este método solo se refiere a los discos con tabla de particiones GUID (GPT).

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
Nota:
  • 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 (Español)#Herramientas de particionado.
  • 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 (Español)#Configurar nombres estáticos para los dispositivos.

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"