# Persistent block device naming (Português)

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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
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. 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)