¿Puedo etiquetar un dispositivo de disco en lugar de una partición?

24

Sé sobre el programa e2label y amigos para adjuntar una etiqueta a una partición de disco, por ejemplo

e2label /dev/sda1 bla

Lo que quiero hacer es algo diferente: quiero crear una etiqueta para un disco duro, que es para / dev / sda, no para una partición.

¿Es eso posible y si es así, cómo?

EDITAR: Antecedentes: en un caso con múltiples bahías HD, me gustaría poner etiquetas (de papel) en la puerta de la bahía física y colocar la misma etiqueta lógicamente en el disco que he colocado allí.

EDIT2: se trata del servidor Ubuntu Linux 12.04.

EDITAR3: En las particiones GPT también está la etiqueta de partícula, que se puede configurar con, por ejemplo, parted. Ver /server//q/681088/76442

dummzeuch
fuente
1
Esta es una gran pregunta, ya que usted es uno de los más idóneos y tiene el concepto correcto. El objetivo principal de las etiquetas es identificar de forma exclusiva una partición incluso cuando las unidades se enumeran de manera diferente después del próximo reinicio. Pero aunque las unidades pueden reordenarse, las particiones permanecen fijas en su unidad. Por lo tanto, sería más correcto dar a las unidades un UUID / etiqueta y no particiones. Esto significaría que las particiones serían nombres como UUID / 1, UUID / 2, etc. No hay nada de malo en agregar una etiqueta a la partición, pero el caso predeterminado debería ser usar un UUID por unidad y no por partición.
Patrick Häcker
Gracias, pero dudo que realmente sea uno de los primeros. Este problema ya me ha molestado durante mucho tiempo.
Dummzeuch
1
Si formatea su disco como una tabla de particiones GUID (GPT) en lugar de MSDOS o unix, (usando gnu parted). Su unidad tendrá un uuid, las particiones tendrán un uuid y la unidad ext2 / 3/4 puede tener su propio uuid. Por lo general, puedo encontrar las unidades usando / dev / disk / by-uuid y las particiones por / dev / disk / by-partuuid
Rahly

Respuestas:

9

Su pregunta inicial ya tiene algunas buenas respuestas, por lo que me centraré en el fondo de su pregunta, etiquetando los discos.

Utilizo el número de serie de la unidad para imprimir etiquetas para bahías de intercambio en caliente: es la mejor manera de identificar la unidad de manera única y consistente. No cambiará independientemente de qué bahía o qué controlador esté enchufado.

No menciona si está utilizando Linux o algún otro Unix, pero en Linux puede obtener una lista de discos (y particiones, que queremos excluir) con su marca, modelo y número de serie al buscar en el / directorio dev / disk / by-id /. Me parece útil el siguiente alias bash para esto:

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'

(la coincidencia para scsi-*encuentra todas las unidades "similares a scsi", incluidas las unidades SATA y SAS. en sistemas con solo unidades SATA, ata-*también funcionaría)

por ejemplo, en uno de mis sistemas de servidor ZFS, produce 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 puede ver, la lista / dev / disk / by-id incluye la marca y el número de modelo de cada unidad, así como el número de serie. Son todas las unidades SATA conectadas a puertos SATA o puertos SAS en un controlador LSI SAS-2008.

Si tuviera una impresora de etiquetas conectada, sería bastante fácil imprimir etiquetas en función de la salida de list_disks. En su lugar, utilicé una antigua grabadora de etiquetas manual porque eso era lo que tenía. Las etiquetas impresas contienen solo el número de serie sin la marca / modelo (eso es suficiente para identificar el disco cuando lo necesito). Las etiquetas son muy útiles cuando falla una unidad y necesita ser reemplazada.

cas
fuente
Creo que esta es la mejor solución para mi problema real, pero no puedo aceptar esto como respuesta porque no responde la pregunta. A menos que modifique la pregunta, que probablemente no sea una buena idea. Gracias.
Dummzeuch
no hay problema, como dijiste no respondió directamente la pregunta. pero fue útil y espero que alguien más lo encuentre útil en el futuro. Por cierto, aquí es una versión mejorada de los 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'. también encuentra discos usb y elimina datos extraños en la salida.
cas
7

Si estamos hablando de Linux, entonces creo que puede lograr lo que quiere usando udevpara crear un enlace simbólico a sus dispositivos. Si nos fijamos /etc/udev/rules.d, hay un archivo llamado 70-persistent-cd.rulescuyo contenido tiene líneas como:

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

Lo que esto hace es que crea el enlace simbólico /dev/cdromal dispositivo identificado por su dirección de bus PCI. Debería ser capaz de lograr lo que quiere identificando el HDD usando su (número de compartimiento? Lo siento, no hay experiencia allí) y usando una sintaxis similar a la anterior para agregar un enlace simbólico como /dev/bay1, por ejemplo. El siguiente artículo sobre udevreglas de escritura puede ser útil:

Escribir reglas de udev

Nota

Gracias a la respuesta de slm, tenga en cuenta que esta solución hace que las etiquetas sean específicas para las bahías de HDD en lugar de los discos dentro de ellas. Por lo tanto, si utiliza las etiquetas /dev/bay1y /dev/bay2tiene el disco duro A en el compartimento 1 y el disco B en el compartimento 2, se /dev/bay1refiere al disco A y /dev/bay2al disco B. Si, por alguna razón, intercambia los discos A y B, te /dev/bay1refieres al disco B y /dev/bay2al disco A. De tu pregunta, creo que esta es tu intención. Por favor corrígeme si estoy equivocado.

Joseph R.
fuente
1
Recomendaría usar el número de modelo y el número de serie para tal coincidencia. Todavía viene con las advertencias mencionadas por slm, pero asegurará que la "etiqueta" del disco permanezca consistente independientemente de lo que le pase a él o a cualquier otro disco del sistema.
un CVn
Mejor aún es preferir el WWN único garantizado. Mira esta respuesta .
Tom Hale
6

No e2label particiones, e2label sistemas de archivos. Esos sistemas de archivos pueden estar en particiones en archivos, en discos completos, en dispositivos de bloqueo de red ... no importa.

Entonces, sí, si hay un sistema de archivos ext2 / 3/4 directamente activado /dev/sda, puede etiquetarlo de la misma manera que uno que estaría activado /dev/sda1.

Ahora, si no hay un sistema de archivos directamente /dev/sdapero, por ejemplo, /dev/sdaestá particionado (usando GPT, MBR, LVM ...) en varias particiones, entonces obviamente no puedes usarlo e2label /dev/sda.

En la partición GPT, puede dar nombres a las particiones, por lo que podría crear una partición grande de un sector con un nombre para ayudar a identificar su disco. Puedes hacerlo con el ccomando in gdisk.

Stéphane Chazelas
fuente
3

Para responder a su pregunta si es posible etiquetar un disco en lugar de una partición, la respuesta es no. No conozco ningún método para hacerlo.

Puede usar el método descrito por @JosephR, pero tenga en cuenta que esta configuración depende del sistema, por lo que si llevara ese HDD a otro sistema, se perdería el "etiquetado" que propuso. No está vinculado al disco de ninguna manera significativa.

Por cierto, puede ver las etiquetas y los UUID establecidos para diferentes unidades usando el blkidcomando.

Ejemplo

$ 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
fuente
Buen punto acerca de que la configuración depende del sistema. A partir de la pregunta, creo que el OP es consciente de eso: quieren etiquetar las bahías de HDD en lugar de los discos duros reales dentro de ellos. Lo agrego como una nota a mi respuesta por si acaso.
Joseph R.
@Marco Pero blkidparece que solo enumera particiones, no dispositivos, que no es lo que le interesa al OP.
Joseph R.
No, en realidad quería etiquetar los discos, no las bahías. Pero consideraré esta opción.
Dummzeuch
Que es posible etiquetar un disco, Linux sí lo hace en /dev/disk/by-idy usted puede hacerlo udeval estilo de como se muestra en esta respuesta .
Tom Hale
@ TomHale: te estás perdiendo mi punto. Esa etiqueta no se aplica al HDD en sí, sino que se mantiene dentro del propio sistema Linux. Si eliminara esa HDD del sistema, la etiqueta ya no está disponible en otros sistemas en los que se montaría la HDD. Depende del sistema, por lo tanto, mi consejo es correcto. Por favor, invierta su DV.
slm
3

Supongo que su objetivo principal es identificar inequívocamente un disco físico. Desafortunadamente, no creo que haya una forma estándar de etiquetar un disco de la misma manera que se puede etiquetar un sistema de archivos.

Una forma es usar el modelo y el número de serie del disco. En Linux, puede recuperar esos identificadores con hdparm -i /dev/sdX. Lo bueno del número de serie es que podría estar ya impreso en la etiqueta del fabricante. (Supongo que te importa más Linux desde que lo mencionaste e2labelen tu pregunta. Si es así, edita tu pregunta y agrega la etiqueta de ).

Si está utilizando un controlador RAID de hardware, es hdparmposible que no funcione para usted, en cuyo caso deberá consultar las herramientas de línea de comandos de su controlador RAID.

Si desea identificarlo por algo en el contenido del disco, puede usar el GUID del disco, que se almacena en el encabezado de la tabla de partición GPT ( bytes 56-71 de LBA 1 ). Es una cadena aleatoria arbitraria en lugar de una etiqueta de su elección, pero es como una etiqueta en el sentido de que es persistente hasta que decida golpear la tabla de particiones. En Linux, puede ver el GUID del disco usando gdisk -l /dev/sdX.

200_success
fuente
1

Según las respuestas que obtuve (¡Gracias, muchachos!), Parece que no hay forma de etiquetar los discos, sino solo particiones. Entonces la respuesta probablemente es "NO".

Seguiré las sugerencias propuestas por @cas y @ 200_success: pegaré los números de serie de los discos con una pegatina en las puertas de la bahía.

Crear una pequeña partición en cada disco solo para poder etiquetar esta partición (como lo sugiere @Stephane Chazelas) también es una opción, pero creo que sería demasiado confuso para alguien más que podría tener que mantener el sistema más adelante. .

dummzeuch
fuente
1

Cree una udevregla usando el WWN exclusivo garantizado del disco (si tiene uno), de lo contrario, use las ID de proveedor y de serie combinadas:

  1. Obtenga los valores requeridos:

    udevadm info -q all /dev/<YOUR-DEVICE-HERE> | egrep "(WWN|SERIAL|VENDOR_ID)="
    
  2. Masajee estos valores udev rulescomo:

    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 nombrar automáticamente el enlace simbólico usando los valores dados por udevadm info -q all /dev/<YOUR-DEVICE>, puede usar:

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

También es posible crear ENVvariables a partir de ATTRSvalores para obtener una identificación única más corta.

Tom Hale
fuente
0

Si tu ls /dev/disk-by-path/pci*...

Definitivamente verá una ruta PCI para cada bahía de unidad. Solo necesita usar 1 disco conocido para asegurarse de obtener las etiquetas correctas.

Use blkid /dev/disk-by-path/pci*para ver qué particiones de disco están en la ruta PCI.

Puedes montar usando esa ruta también.

Robert
fuente
0

Me gusta la solución @cas, pero aquí está mi 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
fuente
-1

El disco ya está etiquetada como sda, sdb, sdc... Las particiones se marcaron a continuación, por ejemplo, en sda: sda1, sda2...

Puede enumerar todas las etiquetas para discos y particiones con ls /dev/sd*

Alko
fuente
44
Lamentablemente, estos nombres de dispositivo cambian si muevo el disco de una computadora a otra o de un controlador a otro.
Dummzeuch