Posso rotular um dispositivo de disco em vez de uma partição?

22

Eu sei sobre o programa e2label e amigos para anexar um rótulo a uma partição de disco, por exemplo,

e2label /dev/sda1 bla

O que eu quero fazer é algo diferente: eu quero criar um rótulo para um disco rígido, ou seja, para / dev / sda, não para uma partição.

Isso é possível e, se sim, como?

EDITAR: Contexto: Em um caso com vários compartimentos HD, gostaria de colocar etiquetas (de papel) na porta do compartimento físico e colocar o mesmo rótulo logicamente no disco que coloquei lá.

EDIT2: Trata-se do servidor Ubuntu Linux 12.04.

EDIT3: Em partições GPT, existe também o rótulo da peça, que pode ser definido com, por exemplo, se separaram. Consulte o link

    
por dummzeuch 02.10.2013 / 16:17

10 respostas

9

Sua pergunta inicial já tem algumas boas respostas, então vou me concentrar no fundo da sua pergunta, rotulando discos.

Eu uso o número de série da unidade para imprimir etiquetas para compartimentos hot swap - é a melhor maneira de identificar a unidade de maneira exclusiva e consistente. Ele não será alterado, independentemente de qual baia ou em qual controlador ele esteja conectado.

Você não menciona se está usando Linux ou algum outro Unix, mas no Linux você pode obter uma lista de discos (e partições, que queremos excluir) com sua marca, modelo e número de série procurando no diretório / dev / disk / by-id /. Eu acho o seguinte bash alias útil para isso:

alias list_disks='find /dev/disk/by-id/ -iname 'scsi-*' | grep -v -- -part | while read disk ; do echo $(readlink $disk | sed -e s:../../:: ) $(basename $disk); done'

(a correspondência para scsi-* encontra todas as unidades "semelhantes a scsi", incluindo unidades SATA e SAS. Em sistemas com apenas unidades SATA, ata-* também funcionaria)

por exemplo. em um dos meus sistemas de servidor ZFS, ele produz uma saída assim:

# list_disks | sort
sdb scsi-SATA_WDC_WD10EACS-00Z_WD-WCASJ2195141
sdc scsi-SATA_WDC_WD10EACS-00Z_WD-WCASJ2114122
sdd scsi-SATA_ST31000528AS_9VP4P4LN
sde scsi-SATA_ST31000528AS_6VP3FWAG
sdf scsi-SATA_ST31000528AS_9VP509T5
sdg scsi-SATA_ST31000528AS_9VP4RPXK
sdh scsi-SATA_OCZ-VECTOR_OCZ-0974C023I4P2G1B8
sdi scsi-SATA_OCZ-VECTOR_OCZ-8RL5XW08536INH7R
sdj scsi-SATA_ST31000528AS_9VP18CCV
sdk scsi-SATA_WDC_WD10EARS-00Y_WD-WMAV50933036

Como você pode ver, a listagem / dev / disk / by-id inclui a marca e o número do modelo de cada unidade, bem como o número de série. Todos eles são drives SATA conectados a portas SATA ou portas SAS em um controlador LSI SAS-2008.

Se eu tivesse uma impressora de etiquetas conectada, seria bastante fácil imprimir etiquetas com base na saída de list_disks . Eu usei um antigo gravador manual de etiquetas em vez disso porque era isso que eu tinha. As etiquetas impressas contêm apenas o número de série sem a marca / modelo (isso é suficiente para eu identificar a unidade quando preciso). As etiquetas são muito úteis quando uma unidade falha e precisa ser substituída.

    
por 03.10.2013 / 02:49
7

Se este é o Linux que estamos falando, então eu acho que você pode conseguir o que deseja usando udev para criar um symlink para seus dispositivos. Se você olhar para /etc/udev/rules.d , há um arquivo chamado 70-persistent-cd.rules cujo conteúdo tem linhas como:

SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:1f.2-scsi-:0:0:0", SYMLINK+="cdrom", ENV{GENERATED}="1"

O que isto faz é criar o link simbólico /dev/cdrom para o dispositivo identificado pelo seu endereço de barramento PCI. Você deve ser capaz de realizar o que deseja, identificando o HDD usando o seu (número do bay? Desculpe não ter experiência lá) e usando uma sintaxe similar à acima para adicionar um link simbólico como /dev/bay1 , por exemplo. O seguinte artigo sobre como escrever as regras udev pode ser útil:

Escrevendo regras do udev

Nota

Graças à resposta do slm, observe que essa solução torna os rótulos específicos para os compartimentos do HDD, e não para os discos dentro deles. Portanto, se você usar as etiquetas /dev/bay1 e /dev/bay2 e tiver o disco rígido A no compartimento 1 e o disco rígido B no compartimento 2, /dev/bay1 refere-se ao disco A e /dev/bay2 refere-se ao disco B. Por algum motivo, você troca os discos A e B, obtém /dev/bay1 referindo-se ao disco B e /dev/bay2 referindo-se ao disco A. Da sua pergunta, acredito que esta é a sua intenção. Por favor, corrija-me se estiver errado.

    
por 02.10.2013 / 16:28
6

Você não e2label as partições, você e2label sistemas de arquivos. Esses sistemas de arquivos podem estar em partições em arquivos, em discos inteiros, em dispositivos de bloco de rede ... não importa.

Então, sim, se houver um sistema de arquivos ext2 / 3/4 diretamente no /dev/sda , você poderá rotulá-lo da mesma forma como um que estaria em /dev/sda1 .

Agora, se não houver um sistema de arquivos diretamente em /dev/sda , por exemplo, /dev/sda é particionado (usando GPT, MBR, LVM ...) em várias partições, então não é possível usar e2label /dev/sda .

No particionamento GPT, você pode dar nomes às partições, para criar uma partição grande de um setor com um nome para ajudar a identificar seu disco. Você pode fazer isso com o comando c em gdisk .

    
por 02.10.2013 / 22:07
2

Para responder à sua pergunta se for possível rotular um disco em oposição a uma partição, a resposta é não. Não conheço nenhum método para fazer isso.

Você pode usar o método descrito por @JosephR, mas perceba que esta configuração é dependente do sistema, então se você fosse levar aquele HDD para outro sistema, a "rotulagem" que ele propôs seria perdida. Não está vinculado ao disco de maneira significativa.

Por acaso, você pode ver os rótulos e o conjunto de UUIDs para unidades diferentes usando o comando blkid .

Exemplo

$ blkid
/dev/sda1: LABEL="SYSTEM_DRV" UUID="XXXXXX" TYPE="ntfs" 
/dev/sda2: LABEL="Windows7_OS" UUID="XXXXXX" TYPE="ntfs" 
/dev/sda3: LABEL="Lenovo_Recovery" UUID="XXXX" TYPE="ntfs" 
/dev/sda5: UUID="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" TYPE="ext4" 
/dev/sda6: UUID="XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXXfG93LA" TYPE="LVM2_member" 
/dev/mapper/vg_grinchy-lv_root: UUID="XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXX" TYPE="ext4" 
/dev/mapper/vg_grinchy-lv_swap: UUID="XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXX" TYPE="swap" 
/dev/mapper/vg_grinchy-lv_home: UUID="XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXX" TYPE="ext4" 
    
por 02.10.2013 / 16:39
2

Suponho que seu objetivo principal é identificar um disco físico sem ambigüidade. Infelizmente, não acredito que exista uma maneira padrão de rotular um disco da mesma maneira que você pode rotular um sistema de arquivos.

Uma maneira é usar o modelo e o número de série do disco. No Linux, você pode recuperar esses identificadores com hdparm -i /dev/sdX . O bom sobre o número de série é que ele já pode estar impresso no adesivo do fabricante. (Eu suponho que você se importe mais com o Linux desde que você mencionou e2label em sua pergunta. Se sim, edite sua pergunta e adicione a <-href="/questions/tagged/linux" class="post-tag" title=" Mostrar perguntas com a tag 'linux'"> linux .

Se você estiver usando um controlador RAID de hardware, hdparm pode não funcionar para você, e nesse caso você terá que consultar as ferramentas de linha de comando do seu controlador RAID.

Se você quiser identificá-lo por algo no conteúdo do disco, poderá usar o GUID do disco, que é armazenado no cabeçalho da tabela de partição GPT ( bytes 56-71 do LBA 1 ). É uma string aleatória e arbitrária em vez de um rótulo de sua escolha, mas é como uma etiqueta que é persistente até que você decida destruir a tabela de partições. No Linux, você pode ver o GUID do disco usando gdisk -l /dev/sdX .

    
por 03.10.2013 / 12:35
1

Crie uma regra udev usando o WWN exclusivo garantido do disco (se tiver um), caso contrário, use a combinação IDs de fornecedores e de série:

  1. Obtenha os valores necessários:

    udevadm info -q all /dev/<YOUR-DEVICE-HERE> | egrep "(WWN|SERIAL|VENDOR_ID)="
    
  2. Massageie esses valores em udev rules , como:

    ENV{DEVTYPE}=="disk", ENV{ID_WWN}=="0x5000c1cd31d48c87", SYMLINK+="4TBseagate"
    
    ENV{DEVTYPE}=="disk", ENV{ID_VENDOR_ID}=="0781", ENV{ID_SERIAL}=="SanDisk_Cruzer_Blade_4C530263101009    121490-0:0", SYMLINK+="8GBsandisk"
    
  3. udevadm trigger

Para nomear automaticamente o link simbólico usando valores fornecidos por udevadm info -q all /dev/<YOUR-DEVICE> , você poderia usar:

SYMLINK+="disk-$env{ID_VENDOR}-$env{ID_SERIAL_SHORT}"

Também é possível criar ENV variables de ATTRS para possivelmente obter um ID único mais curto.

    
por 11.01.2017 / 05:43
0

Com base nas respostas que recebi (Obrigado pessoal!), parece não haver nenhuma maneira de rotular discos, mas apenas partições. Então a resposta provavelmente é "NÃO".

Eu irei com as sugestões propostas pelo @cas e @ 200_success: Vou colocar os números de série dos discos com um adesivo nas portas do compartimento.

Criar uma pequena partição em cada disco apenas para poder rotular essa partição (como sugerido por @Stephane Chazelas) também é uma opção, mas acho que seria muito confuso para alguém que poderia ter que manter o sistema em mais tarde.

    
por 04.10.2013 / 09:44
0

Se você ls /dev/disk-by-path/pci* ...

Você definitivamente verá um caminho PCI para cada compartimento de unidade. Você só precisa usar um disco conhecido para garantir que os rótulos estejam corretos.

Use blkid /dev/disk-by-path/pci* para ver quais partições de disco estão no caminho PCI.

Você pode montar usando esse caminho também.

    
por 19.12.2016 / 18:21
0

Eu gosto da solução @cas, mas aqui está o meu 2 ¢

for i in /dev/sd?
do
  echo "$i"
  /usr/sbin/smartctl -a "$i" | grep Serial
  /usr/sbin/smartctl -a "$i" | grep "Device Model"
  echo
done
    
por 11.01.2017 / 16:31
-1

O disco já está rotulado como sda , sdb , sdc ... As partições são então rotuladas, por exemplo, em sda : sda1 , sda2 ...

Você pode listar todos os rótulos para discos e partições com ls /dev/sd*

    
por 02.10.2013 / 16:27