Jump to content

# Persistent block device naming (Português)

From ArchWiki
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 reiserfsprogsAUR
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"

Categories:

- Boot process (Português)
- File systems (Português)
- Hardware detection and troubleshooting (Português)

Persistent block device naming (Português)
Add topic