Persistent block device naming (Português)

Status de tradução:
Esse artigo é uma tradução de
Persistent block device naming
. Data da última tradução: 2020-06-23. Você pode ajudar a sincronizar a tradução, se houver
alterações
na versão em inglês.
Artigos relacionados
fstab
udev
LVM
Este artigo descreve como usar nomes persistentes para seus
dispositivos de bloco
. Isso foi possível com a introdução do
udev
e tem algumas vantagens sobre a nomeação baseada em barramento. Se sua máquina tiver mais de um controlador de disco SATA, SCSI ou IDE, a ordem na qual os nós de dispositivos correspondentes são adicionados é arbitrária. Isso pode resultar em nomes de dispositivos como
/dev/
sda
e
/dev/
sdb
alternando em cada inicialização, culminando em uma inicialização não-inicializável sistema, pânico do kernel ou um dispositivo de bloco desaparecendo. A nomeação persistente resolve esses problemas.
Nota
A nomeação persistente possui limites que estão fora do escopo neste artigo. Por exemplo, enquanto
mkinitcpio
pode ter suporte a um método, o systemd pode impor seus próprios limites (por exemplo,
FS#42884
) na nomeação de nomes que ele pode processar durante a inicialização.
Esse artigo não é relevante para volumes lógicos de
LVM
, pois os caminhos de dispositivo
/dev/
NomeGrupoVolume
/
NomeVolumeLógico
são persistentes.
Métodos de nomeação persistente
Há quatro esquemas diferentes para nomeação persistente:
by-label
,
by-uuid
,
by-id e by-path
. Para os que usam discos com
Tabela de Partição GUID
(GPT), dois esquemas adicionais podem ser usados:
by-partlabel
e
by-partuuid
. Você também pode usar
nomes estáticos de dispositivos com udev
.
Os diretórios em
/dev/disk/
são criados e destruídos dinamicamente, dependendo se há dispositivos neles ou não.
Nota
Cuidado que
Clonagem de disco
cria dois discos diferentes com o mesmo nome.
As seções a seguir descrevem quais são os diferentes métodos de nomenclatura persistente e como são usados.
O comando
lsblk
pode ser usado para visualizar graficamente os primeiros esquemas 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 aqueles que usam
GPT
, use o comando
blkid
. Este comando é mais conveniente para scripts, mas mais difícil de ler.
# 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
Quase todo
tipo de sistema de arquivos
pode ter um rótulo ("label", em inglês). Todos os seus volumes que têm um são listados no diretório
/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
A maioria dos sistemas de arquivos possui suporte à configuração do rótulo na criação do sistema de arquivos, consulte a
página man
do utilitário relevante
mkfs.*
. Para alguns sistemas de arquivos, também é possível alterar os rótulos. A seguir, são apresentados alguns métodos para alterar rótulos em sistemas de arquivos comuns:
swap
swaplabel -L "
novo rótulo
" /dev/
XXX
usando
util-linux
ext2/3/4
e2label /dev/
XXX
"
novo rótulo
"
usando
e2fsprogs
btrfs
btrfs filesystem label /dev/
XXX
"
novo rótulo
"
usando
btrfs-progs
reiserfs
reiserfstune -l "
novo rótulo
" /dev/
XXX
usando
reiserfsprogs
AUR
jfs
jfs_tune -L "
novo rótulo
" /dev/
XXX
usando
jfsutils
xfs
xfs_admin -L "
novo rótulo
" /dev/
XXX
usando
xfsprogs
fat/vfat
fatlabel /dev/
XXX
"
novo rótulo
"
usando
dosfstools
mlabel -i /dev/
XXX
::"
novo rótulo
"
usando
mtools
exfat
tune.exfat -L "
novo rótulo
" /dev/
XXX
usando
exfatprogs
exfatlabel /dev/
XXX
"
novo rótulo
"
usando
exfat-utils
ntfs
ntfslabel /dev/
XXX
"
novo rótulo
"
usando
ntfs-3g
udf
udflabel /dev/
XXX
"
novo rótulo
"
usando
udftools
crypto_LUKS (LUKS2 apenas)
cryptsetup config --label="
novo rótulo
" /dev/
XXX
usando
cryptsetup
O rótulo de um dispositivo pode ser obtido com
lsblk
:
$ lsblk -dno LABEL /dev/sda2
Arch Linux
Ou com
blkid
:
# blkid -s LABEL -o value /dev/sda2
Arch Linux
Nota
O sistema de arquivos não deve ser montado para alterar seu rótulo. Para o sistema de arquivos raiz, isso pode ser feito inicializando a partir de outro volume.
Os rótulos devem ser inequívocos para evitar possíveis conflitos.
As rótulos podem ter até 16 caracteres.
Como o rótulo é uma propriedade do sistema de arquivos, não é adequado para endereçar persistentemente um único dispositivo RAID.
Ao usar contêineres criptografados com
dm-crypt
, os rótulos dos sistemas de arquivos dentro dos contêineres não estarão disponíveis enquanto o contêiner estiver bloqueado/criptografado.
by-uuid
UUID
é um mecanismo para fornecer a cada
sistema de arquivos
um identificador exclusivo. Esses identificadores são gerados pelos utilitários do sistema de arquivos (por exemplo,
mkfs.*
) quando o dispositivo é formatado e projetado para que as colisões sejam improváveis. Todos os sistemas de arquivos GNU/Linux (incluindo cabeçalhos swap e LUKS de dispositivos criptografados não processados) possuem suporte a UUID. Os sistemas de arquivos FAT, exFAT e NTFS não suportam UUID, mas ainda estão listados em
/dev/disk/by-uuid/
com um UID mais curto (identificador exclusivo):
$ 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
O UUID de um dispositivo pode ser obtido com
lsblk
:
$ lsblk -dno UUID /dev/sda1
CBB6-24F2
Ou com
blkid
:
# blkid -s UUID -o value /dev/sda1
CBB6-24F2
A vantagem de usar o método UUID é que é muito menos provável que ocorram colisões de nomes do que com rótulos. Além disso, é gerado automaticamente na criação do sistema de arquivos. Por exemplo, ele permanecerá único, mesmo que o dispositivo esteja conectado a outro sistema (que talvez tenha um dispositivo com a mesma etiqueta).
A desvantagem é que os UUIDs dificultam a leitura e quebram as linhas de código em muitos arquivos de configuração (por exemplo,
fstab
ou
crypttab
). Além disso, toda vez que um volume é reformatado, um novo UUID é gerado e os arquivos de configuração precisam ser ajustados manualmente.
Dica
Caso sua swap não tenha um UUID atribuído, você precisará redefini-la usando o utilitário
mkswap
.
by-id e by-path
by-id
cria um nome exclusivo, dependendo do número de série do hardware, e
by-path
, dependendo do caminho físico mais curto (de acordo com o sysfs). Ambos contêm strings para indicar a qual subsistema eles pertencem (por exemplo,
pci-
para
by-path
e
ata-
para
by-id
), para que estejam vinculados ao hardware que controla o dispositivo. Isso implica em diferentes níveis de persistência: o
by-path
já será alterado quando o dispositivo estiver conectado a uma porta diferente do controlador, o
by-id
será alterado quando o dispositivo estiver conectado em uma porta de um controlador de hardware sujeito a outro subsistema.
[1]
Portanto, ambos não são adequados para obter nomes persistentes e tolerantes a alterações de hardware.
No entanto, ambos fornecem informações importantes para encontrar um dispositivo específico em uma grande infraestrutura de hardware. Por exemplo, se você não atribuir manualmente rótulos persistentes (
by-label
ou
by-partlabel
) e manter um diretório com uso de porta de hardware,
by-id
e
by-path
podem ser usados para encontrar um dispositivo específico.
[2]
[3]
O
by-id
também cria links
World Wide Name
de dispositivos de armazenamento que possuem suporte a ele. Diferente de outros links
by-id
, os WWNs são totalmente persistentes e não serão alterados dependendo do subsistema usado.
$ 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 refere-se apenas a discos com
Tabela de Partição GUID
(GPT).
Os rótulos de partição GPT podem ser definidos no cabeçalho da
entrada de partição
nos discos GPT.
Esse método é muito semelhante aos
rótulos de sistema de arquivos
, exceto que os rótulos da partição não serão afetados se o sistema de arquivos na partição for alterado.
Todas as partições que possuem rótulos de partição estão listadas no diretório
/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
O rótulo da partição de um dispositivo pode ser obtido com
lsblk
:
$ lsblk -dno PARTLABEL /dev/sda1
EFI system partition
Ou com
blkid
:
# blkid -s PARTLABEL -o value /dev/sda1
EFI system partition
Nota
Os rótulos das partições GPT também precisam ser diferentes para evitar conflitos. Para alterar o rótulo da sua partição, você pode usar
gdisk
ou a versão baseada em ncurses
cgdisk
. Ambos estão disponíveis no pacote
gptfdisk
. Veja
Particionamento#Ferramentas de particionamento
.
De acordo com a especificação, os rótulos das partições GPT podem ter até 72 caracteres.
by-partuuid
Da mesma forma que
rótulos de partição GPT
, os UUIDs da partição GPT são definidos em
entrada de partição
nos discos GPT.
O MBR não possui suporte a UUIDs de partição, mas o Linux
[4]
e softwares usando libblkid
[5]
(por exemplo, udev
[6]
) são capazes de gerar pseudo-PARTUUIDs para partições MBR. O formato é
SSSSSSSS
-
PP
, sendo
SSSSSSSS
uma
assinatura de disco MBR
de 32 bits preenchida com zeros e
PP
é um número de partição preenchido com zeros em formato hexadecimal. Ao contrário do PARTUUID regular de uma partição GPT, o pseudo-PARTUUID do MBR pode mudar se o número da partição for alterado.
O diretório dinâmico é semelhante a outros métodos e, como
UUIDs de sistema de arquivos
, o uso de UUIDs é preferível aos rótulos.
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
O UUID da partição de um dispositivo pode ser obtido com
lsblk
:
$ lsblk -dno PARTUUID /dev/sda1
d0d0d110-0a71-4ed6-936a-304969ea36af
Ou com
blkid
:
# blkid -s PARTUUID -o value /dev/sda1
d0d0d110-0a71-4ed6-936a-304969ea36af
Nomes estáticos de dispositivos com udev
Veja
udev#Setting static device names
.
Usando nomeação persistente
Há vários aplicativos que podem ser configurados usando nomes persistentes. A seguir, alguns exemplos de como configurá-los.
fstab
Veja o artigo principal:
fstab#Identificando sistemas de arquivos
.
Parâmetros de kernel
Para usar nomes persistentes em
parâmetros do kernel
, os seguintes pré-requisitos devem ser atendidos. Em uma instalação padrão, seguindo o guia de instalação, os dois pré-requisitos são atendidos:
Você esteja usando uma imagem
initramfs
que tem
udev
nele.
Para
mkinitcpio
, habilite o hook do udev ou do systemd no
/etc/mkinitcpio.conf
O local do sistema de arquivos raiz é fornecido pelo parâmetro
root
na linha de comando do kernel. A linha de comando do kernel é configurada a partir do
gerenciador de boot
, consulte
Parâmetros do kernel#Configuração do gerenciador de boot
. Para alterar para nomeação persistente de dispositivo, altere apenas os parâmetros que especificam dispositivos de bloco, por exemplo
root
e
resume
, deixando outros parâmetros como estão. Há suporte a vários esquemas de nomeação:
Nomeação persistente de dispositivo
usando o rótulo
e o formato
LABEL=
; neste exemplo,
Arch Linux
é o LABEL do sistema de arquivos raiz.
root="LABEL=Arch Linux"
A nomeação persistente de dispositivo
usando o UUID
e o formato
UUID=
; neste exemplo
0a3407de-014b-458b-b5c1-848e92a327a3
, é o UUID de o sistema de arquivos raiz.
root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3
Nomeação persistente de dispositivo
usando o ID do disco
e o formato do caminho
/dev
; neste exemplo
wwn-0x60015ee0000b237f-part2
é o ID da partição raiz.
root=/dev/disk/by-id/wwn-0x60015ee0000b237f-part2
A nomeação persistente de dispositivo
usando o UUID da partição GPT
e o formato
PARTUUID=
; neste exemplo
98a81274-10f7-40db-872a-03df048df366
, é o PARTUUID da partição raiz.
root=PARTUUID=98a81274-10f7-40db-872a-03df048df366
Nomeação persistente de dispositivo
usando o rótulo da partição GPT
e o formato
PARTLABEL=
; neste exemplo
GNU/Linux
é o PARTLABEL da partição raiz.
root="PARTLABEL=GNU/Linux"