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

24

Conheço o programa e2label and friends para anexar um rótulo a uma partição de disco, por exemplo

e2label /dev/sda1 bla

O que eu quero fazer é algo diferente: 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?

EDIT: Background: Em um caso com várias baias HD, eu gostaria de colocar etiquetas (de papel) na porta do compartimento físico e colocar a mesma etiqueta logicamente no disco que eu coloquei lá.

EDIT2: Trata-se do servidor Ubuntu Linux 12.04.

EDIT3: Nas partições GPT, também existe o rótulo de partições, que pode ser configurado com, por exemplo, parted. Consulte /server//q/681088/76442

dummzeuch
fonte
11
Essa é uma ótima pergunta, pois você é um dos primeiros a entender o conceito. O objetivo principal dos rótulos é identificar exclusivamente uma partição, mesmo quando as unidades são enumeradas de maneira diferente após a próxima reinicialização. Mas enquanto as unidades podem ser reordenadas, as partições permanecem fixas em suas unidades. Portanto, seria mais correto fornecer às unidades uma etiqueta UUID / e não partições. Isso significaria que as partições teriam nomes como UUID / 1, UUID / 2 e assim por diante. Não há nada errado em adicionar um rótulo à partição, mas o caso padrão deve ser usar um UUID por unidade e não por partição.
Patrick Häcker
Obrigado, mas duvido que seja realmente um dos primeiros. Esse problema já irritou o meu por um longo tempo.
dummzeuch
11
Se você formatar seu disco como uma tabela de partição GUID (GPT) em vez de MSDOS ou unix (usando o gnu parted). Sua unidade terá um uuid, as partições terão um uuid e a unidade ext2 / 3/4 pode ter seu próprio uuid. Eu posso geralmente encontrar as unidades usando / dev / disk / by-uuid e as partições / dev / disk / by-partuuid
Rahly

Respostas:

9

Sua pergunta inicial já possui algumas boas respostas; portanto, vou me concentrar nos antecedentes da sua pergunta, rotulando discos.

Uso o número de série da unidade para imprimir etiquetas para compartimentos hot swap - é a melhor maneira de identificar de forma única e consistente a unidade. Ele não será alterado independentemente de qual compartimento ou de qual controlador 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 a marca, modelo e número de série, consultando / diretório dev / disk / by-id /. Acho o alias do bash a seguir ú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-*encontrar todas as unidades "scsi-like", 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 resultados como este:

# list_disks | ordenar
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 o número de marca e modelo de cada unidade, bem como o número de série. São todas as unidades SATA conectadas às portas SATA ou SAS em um controlador LSI SAS-2008.

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

cas
fonte
Penso que esta é a melhor solução para o meu problema real, mas não posso aceitar isso como resposta, porque não responde à pergunta. A menos que eu modifique a pergunta que provavelmente não é uma boa ideia. Obrigado.
Dummzeuch 4/10/13
não há problema, pois você disse que não respondeu diretamente à pergunta. mas foi útil e espero que alguém o ache útil no futuro. btw, aqui está uma versão melhorada do alias: alias list_disks='find /dev/disk/by-id/ -iname scsi-* -o -iname usb-* | grep -v -- -part | while read disk ; do echo $(basename $(readlink $disk)) $(basename $disk); done | sed -re "s/(usb|scsi)-// ; s/(SATA|Generic)_//" | sort'. também encontra discos USB e se livra de dados estranhos na saída.
cas
7

Se estamos falando de Linux, acho que você pode conseguir o que deseja usar udevpara criar um link simbólico para seus dispositivos. Se você olhar /etc/udev/rules.d, há um arquivo chamado 70-persistent-cd.rulescujo conteúdo possui 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 isso faz é criar o link simbólico /dev/cdrompara o dispositivo identificado por seu endereço de barramento PCI. Você deve conseguir o que deseja, identificando o HDD usando seu (número do compartimento? Desculpe não ter experiência lá) e usando sintaxe semelhante à acima para adicionar um link simbólico como /dev/bay1, por exemplo. O seguinte artigo sobre como escrever udevregras pode ser útil:

Escrevendo regras do udev

Nota

Graças à resposta da slm, observe que esta solução torna as etiquetas específicas para as baias dos discos rígidos em vez dos discos dentro delas. Assim, se você usar os rótulos /dev/bay1e /dev/bay2e você tem disco Um disco no compartimento 1 e do disco B duro no compartimento 2, em seguida, /dev/bay1refere-se ao disco A e /dev/bay2refere-se ao disco B. Se, por algum motivo, você trocar os discos A e B, você se /dev/bay1refere ao disco B e /dev/bay2ao disco A. Na sua pergunta, acredito que essa é sua intenção. Por favor me corrija se eu estiver errado.

Joseph R.
fonte
11
Eu recomendaria usar o número do modelo e o número de série para essa correspondência. Ele ainda vem com as ressalvas mencionadas pelo slm, mas garantirá que o "rótulo" do disco permaneça consistente, independentemente do que acontecer com ele ou com qualquer outro disco no sistema.
um CVn
Melhor ainda é preferir o WWN exclusivo garantido. Veja esta resposta .
Tom Hale
6

Você não e2label particiona, 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 ... isso não importa.

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

Agora, se não houver um sistema de arquivos diretamente, /dev/sdamas, por exemplo, /dev/sdafor particionado (usando GPT, MBR, LVM ...) em várias partições, então obviamente você não pode usar e2label /dev/sda.

No particionamento GPT, você pode atribuir nomes a 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 ccomando gdisk.

Stéphane Chazelas
fonte
3

Para responder sua pergunta, se é possível rotular um disco em vez de 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 saiba que essa configuração depende do sistema; portanto, se você levar esse disco rígido para outro sistema, a "rotulagem" proposta por ele será perdida. Não está vinculado ao disco de maneira significativa.

Aliás, você pode ver os rótulos e os UUIDs definidos para diferentes unidades usando o blkidcomando

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" 
slm
fonte
Bom ponto sobre a configuração ser dependente do sistema. Da questão, acho que o OP está ciente disso: eles querem rotular as baias de HDD em vez dos discos rígidos reais dentro delas. Estou adicionando-o como uma nota à minha resposta por precaução.
Joseph R.
@Marco Mas blkidparece apenas lista partições não dispositivos, o que não é o que o OP está interessado.
Joseph R.
Não, eu realmente queria rotular os discos, não as baías. Mas vou considerar essa opção.
Dummzeuch
Ele é possível rotular um disco, o Linux em si faz isso /dev/disk/by-ide você pode fazê-lo udevde estilo como mostra a esta resposta .
Tom Hale
@ TomHale - você está perdendo o meu ponto. Esse rótulo não é aplicado ao próprio HDD, mas é mantido dentro do próprio sistema Linux. Se você remover esse disco rígido do sistema, a etiqueta não estará mais disponível em outros sistemas nos quais o disco rígido seria montado. É dependente do sistema, portanto, meu conselho está correto. Por favor, inverta seu DV.
slm
3

Presumo que seu objetivo principal seja identificar inequivocamente um disco físico. 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 do número de série é que ele já pode estar impresso no adesivo do fabricante. (Suponho que você se preocupa principalmente com o Linux desde que você mencionou e2labelna sua pergunta. Em caso afirmativo, edite sua pergunta e adicione a tag .)

Se você estiver usando um controlador RAID de hardware, hdparmpode não funcionar para você. Nesse caso, você precisará consultar as ferramentas de linha de comando do controlador RAID.

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

200_success
fonte
1

Com base nas respostas que recebi (obrigado pessoal!), Parece que não há como rotular discos, mas apenas partições. Portanto, a resposta provavelmente é "NÃO".

Seguirei as sugestões propostas por @cas e @ 200_success: colarei 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 isso seria confuso demais para alguém que talvez precise manter o sistema posteriormente. .

dummzeuch
fonte
1

Crie uma udevregra usando o WWN exclusivo garantido do disco (se houver), caso contrário, use o fornecedor combinado e os IDs 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 os valores fornecidos por udevadm info -q all /dev/<YOUR-DEVICE>, você pode usar:

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

Também é possível criar ENVvariáveis ​​a partir de ATTRSvalores para obter um ID exclusivo mais curto.

Tom Hale
fonte
0

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

Você definitivamente verá um caminho PCI para cada compartimento de unidade. Você só precisa usar 1 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.

Robert
fonte
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
MERM
fonte
-1

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

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

Alko
fonte
4
Infelizmente, esses nomes de dispositivos mudam se eu mover o disco de um computador para outro ou de um controlador para outro.
Dummzeuch