Posso etichettare un dispositivo a disco anziché una partizione?


24

Conosco il programma e2label and friends per il collegamento di un'etichetta a una partizione del disco, ad es

e2label /dev/sda1 bla

Quello che voglio fare è qualcosa di diverso: voglio creare un'etichetta per un disco rigido, ovvero per / dev / sda, non per una partizione.

È possibile e se sì, come?

EDIT: Background: In un caso con più alloggiamenti HD vorrei mettere etichette (di carta) sulla porta dell'alloggiamento fisico e mettere la stessa etichetta logicamente sul disco che ho inserito.

EDIT2: si tratta del server Ubuntu Linux 12.04.

EDIT3: sulle partizioni GPT è presente anche la partlabel, che può essere impostata ad es. Con parted. Vedi /server//q/681088/76442


1
Questa è un'ottima domanda dato che sei uno dei più forti, che ha capito bene il concetto. Lo scopo principale delle etichette è identificare in modo univoco una partizione anche quando le unità vengono enumerate in modo diverso dopo il successivo riavvio. Ma mentre le unità potrebbero essere riordinate, le partizioni rimangono fisse sul loro disco. Quindi sarebbe più corretto dare alle unità un UUID / etichetta e non partizioni. Ciò significherebbe che le partizioni sarebbero nomi come UUID / 1, UUID / 2 e così via. Non c'è nulla di sbagliato nell'aggiunta di un'etichetta alla partizione, ma il caso predefinito dovrebbe essere l'uso di un UUID per unità e non per partizione.
Patrick Häcker il

Grazie, ma dubito di essere davvero uno dei primi. Questo problema mi ha infastidito già da molto tempo.
Dumzeze

1
Se formatti il ​​disco come una tabella delle partizioni GUID (GPT) anziché MSDOS o unix, (usando gnu parted). L'unità avrà un uuid, le partizioni avranno un uuid e l'unità ext2 / 3/4 può avere il proprio uuid. Di solito riesco a trovare le unità usando / dev / disk / by-uuid e le partizioni di / dev / disk / by-partuuid
Rahly

Risposte:


9

La tua domanda iniziale ha già alcune buone risposte, quindi mi concentrerò sullo sfondo della tua domanda, etichettando i dischi.

Uso il numero di serie dell'unità per stampare etichette per alloggiamenti hot swap: è il modo migliore per identificare l'unità in modo univoco e coerente. Non cambierà indipendentemente da quale alloggiamento o controller a cui è collegato.

Non dici se stai usando Linux o qualche altro Unix, ma in Linux puoi ottenere un elenco di dischi (e partizioni, che vogliamo escludere) con il loro marchio, modello e numero di serie guardando in / dev / disk / by-id / directory. Trovo utile il seguente alias bash per questo:

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 corrispondenza per scsi-*trovare tutte le unità "scsi-like", comprese le unità SATA e SAS. su sistemi con solo unità SATA, ata-*funzionerebbe pure)

ad es. su uno dei miei sistemi server ZFS, produce output in questo modo:

# list_disks | ordinare
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

Come puoi vedere, l'elenco / dev / disk / by-id include la marca e il numero di modello di ogni unità, nonché il numero di serie. Sono tutte unità SATA collegate a porte SATA o SAS su un controller LSI SAS-2008.

Se avessi una stampante per etichette collegata, sarebbe abbastanza facile stampare etichette in base all'output di list_disks. Ho usato invece una vecchia etichettatrice manuale perché era quello che avevo. Le etichette stampate contengono solo il numero di serie senza il marchio / modello (è sufficiente per me identificare l'unità quando è necessario). Le etichette sono molto utili quando un'unità si guasta e deve essere sostituita.


Penso che questa sia la migliore soluzione al mio vero problema, ma non posso accettarlo come risposta perché non risponde alla domanda. A meno che non modifichi la domanda che probabilmente non è una buona idea. Grazie.
dummzeuch,

nessun problema, come hai detto, non ha risposto direttamente alla domanda. ma è stato utile e si spera che qualcun altro lo troverà utile in futuro. btw, ecco una versione migliorata degli 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'. trova anche i dischi USB e elimina i dati estranei nell'output.
Cas

7

Se si tratta di Linux di cui stiamo parlando, penso che tu possa ottenere ciò che vuoi usando udevper creare un collegamento simbolico ai tuoi dispositivi. Se guardi /etc/udev/rules.d, c'è un file chiamato i 70-persistent-cd.rulescui contenuti hanno linee come:

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

Quello che fa è che crea il /dev/cdromcollegamento simbolico al dispositivo identificato dal suo indirizzo bus PCI. Dovresti essere in grado di ottenere ciò che desideri identificando l'HDD usando il suo (numero di alloggiamento? Scusa nessuna esperienza lì) e usando una sintassi simile a quella sopra per aggiungere un link simbolico come /dev/bay1, ad esempio. Il seguente articolo sulle udevregole di scrittura può essere utile:

Scrivere regole udev

Nota

Grazie alla risposta di slm, si noti che questa soluzione rende le etichette specifiche per gli alloggiamenti per HDD anziché i dischi al loro interno. Pertanto, se si utilizzano le etichette /dev/bay1e /dev/bay2si dispone del disco rigido A nel vano 1 e del disco rigido B nel vano 2, quindi si /dev/bay1fa riferimento al disco A e /dev/bay2al disco B. Se, per qualche motivo, si scambiano i dischi A e B, ti /dev/bay1riferisci al disco B e /dev/bay2al disco A. Dalla tua domanda, credo che questo sia il tuo intento. Per favore correggimi se sbaglio.


1
Consiglierei di utilizzare il numero di modello e il numero di serie per tale corrispondenza. Viene ancora fornito con le avvertenze menzionate da slm, ma garantirà che l'etichetta del disco rimanga coerente indipendentemente da ciò che accade o da qualsiasi altro disco nel sistema.
un CVn

Meglio ancora sta preferendo il WWN unico garantito. Vedere questa risposta .
Tom Hale,

6

Non partizioni e2label, file system e2label. Quei file system possono essere su partizioni su file, su interi dischi, su dispositivi di blocco di rete ... non importa.

Quindi sì, se c'è un filesystem ext2 / 3/4 direttamente acceso /dev/sda, puoi etichettarlo esattamente come quello che sarebbe su /dev/sda1.

Ora, se non c'è un filesystem direttamente attivo /dev/sdama, ad esempio, /dev/sdaè partizionato (usando GPT, MBR, LVM ...) in più partizioni, allora inevitabilmente no non puoi usarlo e2label /dev/sda.

Nel partizionamento GPT, è possibile assegnare nomi alle partizioni, in modo da poter creare una grande partizione di un settore con un nome per aiutare a identificare il disco. Puoi farlo con il ccomando in gdisk.


3

Per rispondere alla tua domanda se è possibile etichettare un disco anziché una partizione, la risposta è no. Non sono a conoscenza di alcun metodo per farlo.

Puoi usare il metodo delineato da @JosephR, ma ti rendi conto che questa configurazione dipende dal sistema, quindi se dovessi portare quel disco fisso su un altro sistema, le "etichette" che ha proposto andrebbero perse. Non è legato al disco in alcun modo significativo.

Per inciso, è possibile visualizzare le etichette e l'UUID impostati per unità diverse utilizzando il blkidcomando.

Esempio

$ 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" 

Un buon punto sull'installazione dipende dal sistema. Dalla domanda, penso che l'OP ne sia consapevole: vogliono etichettare gli alloggiamenti per HDD piuttosto che i veri e propri dischi rigidi al loro interno. Lo sto aggiungendo come nota alla mia risposta per ogni evenienza.
Joseph R.,

@Marco Ma blkidsembra elencare solo le partizioni e non i dispositivi, il che non è interessato all'OP .
Joseph R.

No, in realtà volevo etichettare i dischi, non le baie. Ma prenderò in considerazione questa opzione.
dummzeuch,

Si è possibile etichettare un disco, Linux stesso fa in /dev/disk/by-ide si può farlo udevin stile, come mostrato in questa risposta .
Tom Hale,

@TomHale - ti manca il mio punto. Tale etichetta non viene applicata all'HDD stesso, ma piuttosto viene mantenuta all'interno del sistema Linux stesso. Se si dovesse rimuovere quell'HDD dal sistema, l'etichetta non sarebbe più disponibile su altri sistemi su cui sarebbe montato l'HDD. Dipende dal sistema, quindi il mio consiglio è corretto. Si prega di invertire il DV.
slm

3

Presumo che il tuo obiettivo principale sia quello di identificare in modo inequivocabile un disco fisico. Sfortunatamente, non credo che esista un modo standard per etichettare un disco nello stesso modo in cui è possibile etichettare un filesystem.

Un modo è utilizzare il modello e il numero di serie del disco. In Linux, puoi recuperare quegli identificatori con hdparm -i /dev/sdX. La cosa bella del numero di serie è che potrebbe essere già stampato sull'adesivo del produttore. (Suppongo che ti interessi principalmente a Linux da quando hai citato la e2labeltua domanda. In tal caso, modifica la domanda e aggiungi il tag .)

Se stai utilizzando un controller RAID hardware, hdparmpotrebbe non funzionare per te, nel qual caso dovrai invece consultare gli strumenti da riga di comando del controller RAID.

Se si desidera identificarlo tramite qualcosa nel contenuto del disco, è possibile utilizzare il GUID del disco, che è memorizzato nell'intestazione della tabella delle partizioni GPT ( byte 56-71 di LBA 1 ). È una stringa casuale arbitraria piuttosto che un'etichetta di tua scelta, ma è come un'etichetta in quanto è persistente fino a quando non decidi di bloccare la tabella delle partizioni. In Linux, puoi vedere il GUID del disco usando gdisk -l /dev/sdX.


1

Sulla base delle risposte che ho ricevuto (grazie ragazzi!) Sembra che non ci sia modo di etichettare i dischi ma solo partizioni. Quindi la risposta probabilmente è "NO".

Seguirò i suggerimenti proposti da @cas e @ 200_success: incollerò i numeri di serie dei dischi con un adesivo sulle porte della baia.

La creazione di una piccola partizione su ogni disco solo per poter etichettare questa partizione (come suggerito da @Stephane Chazelas) è anche un'opzione, ma penso che sarebbe troppo confuso per qualcun altro che potrebbe dover mantenere il sistema in un secondo momento .


1

Creare una udevregola utilizzando il WWN univoco garantito del disco (se ne ha uno), altrimenti utilizzando il fornitore combinato e gli ID seriali:

  1. Ottieni i valori richiesti:

    udevadm info -q all /dev/<YOUR-DEVICE-HERE> | egrep "(WWN|SERIAL|VENDOR_ID)="
    
  2. Massaggia questi valori udev rulescome:

    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

Per nominare automaticamente il collegamento simbolico utilizzando i valori forniti da udevadm info -q all /dev/<YOUR-DEVICE>, è possibile utilizzare:

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

E 'anche possibile creare ENVle variabili da ATTRSvalori a eventualmente ottenere un ID univoco più breve.


0

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

Vedrai sicuramente un percorso PCI per ogni vano unità. Devi solo usare 1 disco noto per assicurarti di ottenere le etichette giuste.

Utilizzare blkid /dev/disk-by-path/pci*per vedere quali partizioni del disco si trovano sul percorso PCI.

Puoi montare anche usando quel percorso.


0

Mi piace la soluzione @cas, ma ecco il mio 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

-1

Il disco è già etichettato come sda, sdb, sdc... Le partizioni sono quindi etichettati per esempio su sda: sda1, sda2...

È possibile elencare tutte le etichette per dischi e partizioni con ls /dev/sd*


4
Sfortunatamente questi nomi di dispositivo cambiano se sposto il disco da un computer a un altro o da un controller a un altro.
dummzeuch,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.