Persistent block device naming (Português)
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.
- 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.
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:
Para aqueles que usam GPT, use o comando . Este comando é mais conveniente para scripts, mas mais difícil de ler.
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 .
$ 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
- usando
- ext2/3/4
- usando
- btrfs
- usando
- reiserfs
- usando
- jfs
jfs_tune -L "novo rótulo" /dev/XXX
usando- xfs
- usando
- fat/vfat
fatlabel /dev/XXX "novo rótulo"
usando- usando
- exfat
- usando
exfatlabel /dev/XXX "novo rótulo"
usando- ntfs
- usando
- udf
- usando
- crypto_LUKS (LUKS2 apenas)
cryptsetup config --label="novo rótulo" /dev/XXX
usando
O rótulo de um dispositivo pode ser obtido com lsblk:
Ou com blkid:
- 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 com um UID mais curto (identificador exclusivo):
O UUID de um dispositivo pode ser obtido com lsblk:
Ou com blkid:
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.
by-id e by-path
cria um nome exclusivo, dependendo do número de série do hardware, e , 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, para e ata-
para ), para que estejam vinculados ao hardware que controla o dispositivo. Isso implica em diferentes níveis de persistência: o já será alterado quando o dispositivo estiver conectado a uma porta diferente do controlador, o será alterado quando o dispositivo estiver conectado em uma porta de um controlador de hardware sujeito a outro subsistema. 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 ) e manter um diretório com uso de porta de hardware, e podem ser usados para encontrar um dispositivo específico.
O também cria links World Wide Name de dispositivos de armazenamento que possuem suporte a ele. Diferente de outros links , os WWNs são totalmente persistentes e não serão alterados dependendo do subsistema usado.
by-partlabel
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 .
O rótulo da partição de um dispositivo pode ser obtido com lsblk:
Ou com blkid:
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 e softwares usando libblkid (por exemplo, udev) são capazes de gerar pseudo-PARTUUIDs para partições MBR. O formato é SSSSSSSS-PP
, sendo uma assinatura de disco MBR de 32 bits preenchida com zeros e é 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.
O UUID da partição de um dispositivo pode ser obtido com lsblk:
Ou com blkid:
# blkid -s PARTUUID -o value /dev/sda1
d0d0d110-0a71-4ed6-936a-304969ea36af
Nomes estáticos de dispositivos com udev
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
O local do sistema de arquivos raiz é fornecido pelo parâmetro 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. Para alterar para nomeação persistente de dispositivo, altere apenas os parâmetros que especificam dispositivos de bloco, por exemplo e , 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 ; neste exemplo, é 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 , é 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 ; neste exemplo é 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 ; 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 ; neste exemplo é o PARTLABEL da partição raiz.
root="PARTLABEL=GNU/Linux"