Persistent block device naming (Español)

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
.
Artículos relacionados
fstab (Español)
udev (Español)
LVM (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.
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
AUR
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#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 con
blkid
:
# 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"