Visão geral: UUIDs, rótulos e fstab

A nomeação persistente de dispositivos de blocos foi possível graças à introdução do udev e tem algumas vantagens sobre o uso de nomes tradicionais baseados em barramento (bus), como /dev/hda1 ou /dev/sda2.

Embora as distribuições GNU/Linux e o udev estejam evoluindo e a detecção de hardware esteja se tornando mais confiável, também há uma série de novos problemas e mudanças:

  1. Se você tiver mais de um controlador de disco (IDE ou especialmente SCSI/SATA), ou mesmo se você tiver quantidades variáveis de dispositivos de armazenamento USB/firewire removíveis que são conectados com frequência, a ordem em que são detectados pode não ser determinística. O resultado é que nomes de dispositivos como /dev/sda1 e /dev/sdb1 podem alternar aleatoriamente em cada boot. A nomeação persistente permite que você não se preocupe com isso.

  2. Para máquinas com controladores IDE (incluindo, por exemplo, máquinas com discos rígidos SATA e apenas uma unidade de CDROM IDE), a troca para um núcleo Squeeze padrão pode causar problemas: com a introdução do novo suporte a libata PATA, seus dispositivos IDE hdX se tornarão dispositivos sdX. Novamente, se você tiver uma nomenclatura persistente, nem vai notar (o postinst para o pacote linux-base inclui código para ajudar na mudança, mas faz sentido verificá-la antecedência).

  3. Máquinas grandes, com muitas CPUs rápidas e muitos adaptadores de barramento de host de canal de fibra, switches FC de carga/latência variáveis, controladores SCSI e/ou placas de rede de alto desempenho, podem ter problemas de temporização assíncronos ao lidar com udev e E/S multipath, com ordem de detecção de dispositivo quase imprevisível e atribuição automática de nomes durante a inicialização.

Há mais razões, mas estas são as mais críticas agora e no futuro próximo. É por isso que o Debian encoraja você a mudar sua configuração para esquemas de nomenclatura persistentes, a menos que você esteja usando LVM. Os volumes lógicos LVM devem sempre ser identificados pelo nome do volume lógico (/dev/mapper/nome-do-volume).

Quadro esquemas diferentes para nomeação persistente

Via UUIDs

UUID significa Identificador Único Universal (Universally Unique Identifier) e é um mecanismo para dar a cada sistema de arquivos um identificador único. Todos os sistemas de arquivos Linux suportam UUIDs de sistema de arquivos; sistemas de arquivos FAT e NTFS não suportam UUIDs verdadeiros, mas ainda estão listados em /dev/disk/by-uuid com um identificador exclusivo:

$ ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 Oct 16 10:27 2d781b26-0285-421a-b9d0-d4a0d3b55680 -> ../../sda1
lrwxrwxrwx 1 root root 10 Oct 16 10:27 31f8eb0d-612b-4805-835e-0e6d8b8c5591 -> ../../sda7
lrwxrwxrwx 1 root root 10 Oct 16 10:27 3FC2-3DDB -> ../../sda6
lrwxrwxrwx 1 root root 10 Oct 16 10:27 5090093f-e023-4a93-b2b6-8a9568dd23dc -> ../../sda2
lrwxrwxrwx 1 root root 10 Oct 16 10:27 912c7844-5430-4eea-b55c-e23f8959a8ee -> ../../sda5
lrwxrwxrwx 1 root root 10 Oct 16 10:27 B0DC1977DC193954 -> ../../sdb1
lrwxrwxrwx 1 root root 10 Oct 16 10:27 bae98338-ec29-4beb-aacf-107e44599b2e -> ../../sdb2

Como você pode ver, os sistemas de arquivos FAT e NTFS têm nomes mais curtos (sda6 e sdb1), mas ainda estão listados por UUID. O motivo das strings base-62 de 32 dígitos é tornar as colisões astronomicamente improváveis; se acontecesse de sda1 e sda2 tivessem o mesmo UUID, o sistema não conseguiria inicializar.

Contudo, instantâneos (snapshots) LVM resultarão em UUIDs duplicados.

Via rótulos

Quase todos os tipos de sistema de arquivos podem ter rótulos (labels). Todos aqueles que têm um rótulo estão listados no diretório /dev/disk/by-label:

$ ls -l /dev/disk/by-label
lrwxrwxrwx 1 root root 10 Oct 16 10:27 data -> ../../sdb2
lrwxrwxrwx 1 root root 10 Oct 16 10:27 data2 -> ../../sda2
lrwxrwxrwx 1 root root 10 Oct 16 10:27 fat -> ../../sda6
lrwxrwxrwx 1 root root 10 Oct 16 10:27 home -> ../../sda7
lrwxrwxrwx 1 root root 10 Oct 16 10:27 root -> ../../sda1
lrwxrwxrwx 1 root root 10 Oct 16 10:27 swap -> ../../sda5
lrwxrwxrwx 1 root root 10 Oct 16 10:27 windows -> ../../sdb1

Embora palavras reconhecíveis possam ser usadas como rótulos, você precisa ter cautela para evitar colisões de nomes; considere a possibilidade de que possa ter unidades aleatórias USB/firewire conectadas na reinicialização. Instantâneos LVM também resultarão em rótulos duplicados.

Você pode alterar os rótulos de seus sistemas de arquivos usando esses comandos:

Tipo

Comando

Notas

EXT3:

e2label /dev/XXX <label>

também se aplica a EXT2/EXT4

FAT/VFAT:

dosfslabel /dev/XXX <label>

bug #506786 no Lenny; ou mlabel em mtools

JFS:

jfs_tune -L <label> /dev/XXX

NTFS:

ntfslabel /dev/XXX <label>

ou modifique no Windows

ReiserFS:

reiserfstune -l <label> /dev/XXX

swap:

mkswap -L <label> /dev/XXX

veja abaixo o procedimento swapoff/swapon

XFS:

xfs_admin -L <label> /dev/XXX

Via IDs de hardware

by-id cria um nome único dependendo do número de série do hardware. Estes são destinados a ser imutáveis para uma determinada configuração de hardware.

#  ls -l /dev/disk/by-id/
total 0
lrwxrwxrwx 1 root root 10 2010-10-20 13:52 dm-name-grupo1-lvstripe1 -> ../../dm-8
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-name-mpath0 -> ../../dm-0
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-name-mpath1 -> ../../dm-1
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-name-mpath2 -> ../../dm-2
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-name-mpath3 -> ../../dm-3
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-name-mpath4 -> ../../dm-4
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-name-mpath5 -> ../../dm-5
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-name-mpath6 -> ../../dm-6
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-name-mpath7 -> ../../dm-7
lrwxrwxrwx 1 root root 10 2010-10-20 13:52 dm-uuid-LVM-OaDwNcuwdzuuZYAcrbeKNdYsE237BKX2YIEdUN5CsSgeU7WNn5dhtiQPBP9uHU25 -> ../../dm-8
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-uuid-mpath-36005076308ffc36c000000000000000c -> ../../dm-0
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-uuid-mpath-36005076308ffc36c000000000000000d -> ../../dm-1
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-uuid-mpath-36005076308ffc36c000000000000000e -> ../../dm-2
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-uuid-mpath-36005076308ffc36c000000000000000f -> ../../dm-3
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-uuid-mpath-36005076308ffc36c0000000000000112 -> ../../dm-4
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-uuid-mpath-36005076308ffc36c0000000000000113 -> ../../dm-5
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-uuid-mpath-36005076308ffc36c0000000000000114 -> ../../dm-6
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-uuid-mpath-36005076308ffc36c0000000000000115 -> ../../dm-7
lrwxrwxrwx 1 root root  9 2010-10-20 13:51 scsi-360026b9038e49f001270c8b707980d5c -> ../../sda
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 scsi-360026b9038e49f001270c8b707980d5c-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 scsi-360026b9038e49f001270c8b707980d5c-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 scsi-360026b9038e49f001270c8b707980d5c-part3 -> ../../sda3
lrwxrwxrwx 1 root root  9 2010-10-20 13:51 scsi-36005076308ffc36c000000000000000c -> ../../sdr
lrwxrwxrwx 1 root root  9 2010-10-20 13:51 scsi-36005076308ffc36c000000000000000d -> ../../sdc
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 scsi-36005076308ffc36c000000000000000e -> ../../sdab
lrwxrwxrwx 1 root root  9 2010-10-20 13:51 scsi-36005076308ffc36c000000000000000f -> ../../sdu
lrwxrwxrwx 1 root root  9 2010-10-20 13:51 scsi-36005076308ffc36c0000000000000112 -> ../../sdn
lrwxrwxrwx 1 root root  9 2010-10-20 13:51 scsi-36005076308ffc36c0000000000000113 -> ../../sdo
lrwxrwxrwx 1 root root  9 2010-10-20 13:51 scsi-36005076308ffc36c0000000000000114 -> ../../sdp
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 scsi-36005076308ffc36c0000000000000115 -> ../../sdag
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 scsi-mpath0 -> ../../dm-0
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 scsi-mpath1 -> ../../dm-1
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 scsi-mpath2 -> ../../dm-2
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 scsi-mpath3 -> ../../dm-3
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 scsi-mpath4 -> ../../dm-4
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 scsi-mpath5 -> ../../dm-5
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 scsi-mpath6 -> ../../dm-6
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 scsi-mpath7 -> ../../dm-7

Via caminhos sysfs

by-path cria um nome único dependendo do caminho físico mais curto (de acordo com sysfs). Ambos contêm strings para indicar a que subsistema pertencem e, portanto, não são adequados para resolver os problemas mencionados no início deste artigo. Não serão discutidos mais aqui.

Preparando para nomeação persistente

Você pode obter uma visão geral básica de quais dispositivos estão associados a quais nomes persistentes simplesmente invocando

$ ls -lR /dev/disk

mas também há o útil comando blkid (que está em /sbin, mas não requer privilégios de root). Fornece vários tipos de saída úteis, a mais simples:

$ /sbin/blkid
/dev/sda1: LABEL=Root UUID="87f2b245-6ab3-4021-bf07-d069b4d387a1" TYPE="ext3"
/dev/sda2: TYPE="swap"
/dev/sda3: LABEL=Home UUID="a6f7a63f-71ac-4361-b49a-39d62b06f18a" TYPE="ext3"

Como você pode ver, a partição de swap aqui não tem um UUID ou rótulo; o instalador do Debian Lenny usou uma versão do partman que não os definiu para partições de swap. No entanto, as partições de swap podem receber nomes persistentes via mkswap.

Atribuindo nomes persistentes para partições swap

Primeiro, certifique-se de ter identificado corretamente a partição de swap (veja /proc/swaps)! Em seguida (como root) desative com segurança o swap atual, reinicie-o (adicionando opcionalmente um rótulo) e reative-o:

# swapoff /dev/sda2
# mkswap -L Swap /dev/sda2
Setting up swapspace version 1, size = 1998737 kB
LABEL=Swap, UUID=7cdfeb21-613b-4588-abb5-9d4049854e9a
# swapon /dev/sda2

Você pode verificar os resultados como usuário(a) normal:

$ /sbin/blkid
/dev/sda1: LABEL=Root UUID="87f2b245-6ab3-4021-bf07-d069b4d387a1" TYPE="ext3"
/dev/sda2: LABEL=Swap UUID="7cdfeb21-613b-4588-abb5-9d4049854e9a" TYPE="swap"
/dev/sda3: LABEL=Home UUID="a6f7a63f-71ac-4361-b49a-39d62b06f18a" TYPE="ext3"
$ free
             total       used       free     shared    buffers     cached
Mem:      33017956     298700   32719256          0      17060     148668
-/+ buffers/cache:     132972   32884984
Swap:      1951888          0    1951888

Usando nomeação persistente

Depois de escolher qual método de nomeação você quer usar, vamos agora permitir a nomenclatura persistente para o seu sistema:

No fstab

Habilitar a nomenclatura persistente em /etc/fstab é fácil; para cada sistema de arquivos no seu arquivo fstab, basta substituir o nome do dispositivo na primeira coluna (onde diz algo como /dev/sda7) com o novo nome persistente. Isto pode ser conseguido substituindo o caminho apropriado em /dev/disk`, por exemplo:

/dev/disk/by-label/home

ou

/dev/disk/by-uuid/31f8eb0d-612b-4805-835e-0e6d8b8c5591

However, instead of giving an explicit /dev/disk path, the method usually recommended is to indicate how the filesystem is to be mounted by writing No entanto, em vez de dar um caminho explícito /dev/disk, o método geralmente recomendado é indicar como o sistema de arquivos deve ser montado, definindo LABEL=<rótulo> ou UUID=<uuid> - por exemplo:

LABEL=home

ou

UUID=31f8eb0d-612b-4805-835e-0e6d8b8c5591


CategorySystemAdministration | CategoryStorage | CategoryRedundant: combinar com fstab. Talvez com udev? Ao menos parcialmente?