Kann ich ein Festplattengerät anstatt einer Partition kennzeichnen?

24

Ich kenne das Programm e2label and friends zum Anhängen eines Etiketts an eine Festplattenpartition, z

e2label /dev/sda1 bla

Was ich tun möchte, ist etwas anderes: Ich möchte eine Bezeichnung für eine Festplatte erstellen, dh für / dev / sda, nicht für eine Partition.

Ist das möglich und wenn ja, wie?

EDIT: Hintergrund: In einem Fall mit mehreren HD-Schächten möchte ich (Papier-) Etiketten an der Tür des physischen Schachts anbringen und logischerweise dasselbe Etikett auf der Festplatte anbringen, die ich dort eingelegt habe.

EDIT2: Hier geht es um Ubuntu Linux 12.04 Server.

EDIT3: Auf GPT-Partitionen gibt es auch das Partlabel, das mit zB parted gesetzt werden kann. Siehe /server//q/681088/76442

dummzeuch
quelle
1
Dies ist eine großartige Frage, da Sie zu den Passenden gehören, die das Konzept richtig verstanden haben. Der Hauptzweck der Etiketten besteht darin, eine Partition eindeutig zu identifizieren, auch wenn die Laufwerke nach dem nächsten Neustart unterschiedlich aufgelistet werden. Während die Laufwerke möglicherweise neu angeordnet werden, bleiben die Partitionen auf ihrem Laufwerk fixiert. Es wäre also richtiger, Laufwerken eine UUID / Bezeichnung zu geben und keine Partitionen. Dies würde bedeuten, dass Partitionen Namen wie UUID / 1, UUID / 2 usw. haben. Es ist nicht falsch, der Partition eine Bezeichnung hinzuzufügen. In der Standardeinstellung sollte jedoch eine UUID pro Laufwerk und nicht pro Partition verwendet werden.
Patrick Häcker
Danke, aber ich bezweifle, dass ich wirklich einer der Ersten bin. Dieses Problem hat mich schon lange geärgert.
Dummzeuch
1
Wenn Sie Ihre Festplatte als GUID-Partitionstabelle (GPT) anstelle von MSDOS oder Unix formatieren (mit gnu parted). Ihr Laufwerk verfügt über eine UUID, Partitionen über eine UUID und ext2 / 3/4-Laufwerke können über eine eigene UUID verfügen. Normalerweise kann ich die Laufwerke mit / dev / disk / by-uuid und die Partitionen mit / dev / disk / by-partuuid finden
Rahly

Antworten:

9

Ihre erste Frage hat bereits einige gute Antworten, daher werde ich mich auf den Hintergrund Ihrer Frage konzentrieren und die Datenträger beschriften.

Ich verwende die Seriennummer des Laufwerks, um Etiketten für Hot-Swap-Einschübe zu drucken. Dies ist die beste Methode, um das Laufwerk eindeutig und konsistent zu identifizieren. Es ändert sich nicht, unabhängig davon, an welcher Position oder an welchem ​​Controller es angeschlossen ist.

Sie erwähnen nicht, ob Sie Linux oder ein anderes Unix verwenden, aber unter Linux können Sie eine Liste der Festplatten (und Partitionen, die wir ausschließen möchten) mit ihrer Marke, ihrem Modell und ihrer Seriennummer erhalten, indem Sie in / nachsehen. dev / disk / by-id / verzeichnis. Ich finde den folgenden Bash-Alias ​​nützlich:

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'

( scsi-*Wenn alle "SCSI-ähnlichen" Laufwerke, einschließlich SATA- und SAS-Laufwerke, gefunden werden ata-*, funktioniert dies auch auf Systemen mit nur SATA-Laufwerken. )

zB auf einem meiner ZFS-Server-Systeme erzeugt es eine Ausgabe wie diese:

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

Wie Sie sehen, enthält die Auflistung / dev / disk / by-id die Marke und Modellnummer jedes Laufwerks sowie die Seriennummer. Dies sind alles SATA-Laufwerke, die entweder an SATA-Ports oder SAS-Ports eines LSI SAS-2008-Controllers angeschlossen sind.

Wenn ich einen Etikettendrucker angeschlossen hätte, wäre es einfach genug, Etiketten basierend auf der Ausgabe von zu drucken list_disks. Ich habe stattdessen einen alten manuellen Etikettendrucker verwendet, weil ich das hatte. Die gedruckten Etiketten enthalten nur die Seriennummer ohne Marke / Modell (das reicht mir, um das Laufwerk zu identifizieren, wenn ich es benötige). Die Etiketten sind sehr praktisch, wenn ein Laufwerk ausfällt und ausgetauscht werden muss.

cas
quelle
Ich denke, dies ist die beste Lösung für mein eigentliches Problem, aber ich kann dies nicht als Antwort akzeptieren, da es die Frage nicht beantwortet. Es sei denn, ich ändere die Frage, was wahrscheinlich keine gute Idee ist. Vielen Dank.
Dummzeuch
Kein Problem, wie Sie sagten, hat es die Frage nicht direkt beantwortet. aber es war nützlich und hoffentlich wird es jemand anderes in Zukunft nützlich finden. btw, hier ist eine verbesserte Version der 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'. es findet auch usb festplatten und entfernt fremde daten in der ausgabe.
cas
7

Wenn es sich um Linux handelt, können Sie meiner Meinung nach das erreichen, was Sie möchten udev, um einen Symlink zu Ihren Geräten zu erstellen. Wenn Sie sich das ansehen /etc/udev/rules.d, gibt es eine Datei namens, 70-persistent-cd.rulesderen Inhalt Zeilen wie folgt enthält:

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

Dadurch wird der Symlink /dev/cdromzu dem Gerät erstellt, das durch seine PCI- Busadresse identifiziert wird. Sie sollten in der Lage sein, das zu erreichen, was Sie möchten, indem Sie die Festplatte anhand ihrer (Einschubnummer? Entschuldigung, keine Erfahrung dort) identifizieren und eine ähnliche Syntax wie oben verwenden, um beispielsweise einen Symlink hinzuzufügen /dev/bay1. Der folgende Artikel zu Schreibregeln udevkann hilfreich sein:

Udev-Regeln schreiben

Hinweis

Dank der Antwort von slm beachten Sie bitte, dass diese Lösung die Etiketten spezifisch für die Festplattenschächte und nicht für die darin enthaltenen Festplatten erstellt. Wenn Sie also die Beschriftungen verwenden /dev/bay1und /dev/bay2die Festplatte A in Position 1 und die Festplatte B in Position 2 haben, /dev/bay1bezieht sich dies auf die Festplatte A und /dev/bay2auf die Festplatte B. Wenn Sie aus irgendeinem Grund die Festplatten A und B austauschen, Sie /dev/bay1beziehen sich auf Datenträger B und /dev/bay2auf Datenträger A. Aus Ihrer Frage glaube ich, dass dies Ihre Absicht ist. Bitte korrigieren Sie mich, falls ich falsch liege.

Joseph R.
quelle
1
Ich würde empfehlen, Modellnummer und Seriennummer für eine solche Übereinstimmung zu verwenden. Es enthält immer noch die von slm erwähnten Einschränkungen, stellt jedoch sicher, dass das "Label" der Festplatte konsistent bleibt, unabhängig davon, was mit ihr oder anderen Festplatten im System passiert.
ein Lebenslauf
Besser noch ist der Vorzug des garantiert einzigartigen WWN. Siehe diese Antwort .
Tom Hale
6

Sie kennzeichnen Partitionen nicht mit e2label, Sie kennzeichnen Dateisysteme mit e2label. Diese Dateisysteme können sich auf Partitionen in Dateien, auf ganzen Festplatten, auf Netzwerkblockgeräten befinden ... das spielt keine Rolle.

Also ja, wenn ein ext2 / 3/4-Dateisystem direkt darauf installiert ist /dev/sda, können Sie es genauso kennzeichnen wie eines, das aktiviert ist /dev/sda1.

Nun, wenn es kein Dateisystem gibt, das direkt darauf installiert ist, /dev/sdasondern beispielsweise /dev/sdain mehrere Partitionen unterteilt ist (mit GPT, MBR, LVM ...), können Sie offensichtlich kein Dateisystem verwenden e2label /dev/sda.

Bei der GPT-Partitionierung können Sie Partitionen Namen geben, sodass Sie eine Partition mit einem Sektor und einem Namen erstellen können, um Ihre Festplatte zu identifizieren. Sie können dies mit dem cBefehl in tun gdisk.

Stéphane Chazelas
quelle
3

Um Ihre Frage zu beantworten, ob es möglich ist, eine Festplatte im Gegensatz zu einer Partition zu kennzeichnen, lautet die Antwort nein. Mir ist keine Methode dafür bekannt.

Sie können die von @JosephR beschriebene Methode verwenden. Beachten Sie jedoch, dass dieses Setup systemabhängig ist. Wenn Sie diese Festplatte also auf ein anderes System übertragen, geht die von ihm vorgeschlagene "Kennzeichnung" verloren. Es ist in keiner sinnvollen Weise an die Festplatte gebunden.

Übrigens können Sie mit dem blkidBefehl die Bezeichnungen und UUIDs für verschiedene Laufwerke anzeigen .

Beispiel

$ 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
quelle
Gut, dass das Setup systemabhängig ist. Aus der Frage, ich denke, das OP ist sich dessen bewusst: Sie möchten Festplattenschächte beschriften, anstatt die tatsächlichen Festplatten in ihnen. Ich füge es für alle Fälle als Notiz zu meiner Antwort hinzu.
Joseph R.
@Marco Scheint aber blkidnur Partitionen nicht Geräte aufzulisten , woran das OP nicht interessiert ist.
Joseph R.
Nein, ich wollte eigentlich die Festplatten beschriften, nicht die Schächte. Aber ich werde diese Option in Betracht ziehen.
Dummzeuch
Es ist möglich, eine Festplatte zu beschriften, Linux selbst macht das /dev/disk/by-idund Sie können es udevwie in dieser Antwort gezeigt tun .
Tom Hale
@ TomHale - Sie vermissen meinen Standpunkt. Dieses Label wird nicht auf der Festplatte selbst angebracht, sondern im Linux-System selbst verwaltet. Wenn Sie diese Festplatte aus dem System entfernen, ist das Etikett auf anderen Systemen, auf denen die Festplatte bereitgestellt werden würde, nicht mehr verfügbar. Es ist systemabhängig, daher ist mein Rat richtig. Bitte kehre deine DV um.
slm
3

Ich gehe davon aus, dass Ihr Hauptziel darin besteht, eine physische Festplatte eindeutig zu identifizieren. Leider glaube ich nicht, dass es eine Standardmethode gibt, um eine Festplatte so zu kennzeichnen, wie Sie ein Dateisystem kennzeichnen können.

Eine Möglichkeit besteht darin, das Modell und die Seriennummer der Festplatte zu verwenden. Unter Linux können Sie diese Bezeichner mit abrufen hdparm -i /dev/sdX. Das Schöne an der Seriennummer ist, dass sie möglicherweise bereits auf dem Aufkleber des Herstellers aufgedruckt ist. (Ich nehme an, Sie interessieren sich hauptsächlich für Linux, da Sie e2labelin Ihrer Frage darauf hingewiesen haben . Wenn ja, bearbeiten Sie Ihre Frage und fügen Sie den Tag hinzu.)

Wenn Sie einen Hardware-RAID-Controller verwenden, hdparmfunktioniert dieser möglicherweise nicht. In diesem Fall müssen Sie stattdessen die Befehlszeilentools Ihres RAID-Controllers zu Rate ziehen.

Wenn Sie es anhand des Inhalts der Festplatte identifizieren möchten, können Sie die Festplatten-GUID verwenden, die im Header der GPT-Partitionstabelle ( Bytes 56-71 von LBA 1 ) gespeichert ist . Es ist eher eine willkürliche Zufallszeichenfolge als eine Beschriftung Ihrer Wahl, aber es ist insofern wie eine Beschriftung, als es persistent ist, bis Sie sich entscheiden, die Partitionstabelle zu löschen. Unter Linux können Sie die Festplatten-GUID mithilfe von anzeigen gdisk -l /dev/sdX.

200_erfolg
quelle
1

Basierend auf den Antworten, die ich bekommen habe (Danke Jungs!), Scheint es keine Möglichkeit zu geben, Festplatten zu beschriften, sondern nur Partitionen. Die Antwort lautet also wahrscheinlich "NEIN".

Ich gehe auf die Vorschläge von @cas und @ 200_success ein: Ich klebe die Seriennummern der Festplatten mit einem Aufkleber an die Schachttüren.

Das Erstellen einer kleinen Partition auf jeder Festplatte, um diese Partition kennzeichnen zu können (wie von @Stephane Chazelas vorgeschlagen), ist ebenfalls eine Option, aber ich denke, das wäre zu verwirrend für jemanden, der das System zu einem späteren Zeitpunkt warten muss .

dummzeuch
quelle
1

Erstellen Sie eine udevRegel unter Verwendung des garantierten eindeutigen WWN des Datenträgers (sofern vorhanden), andernfalls unter Verwendung der kombinierten Anbieter- und Serien-IDs:

  1. Holen Sie sich die erforderlichen Werte:

    udevadm info -q all /dev/<YOUR-DEVICE-HERE> | egrep "(WWN|SERIAL|VENDOR_ID)="
    
  2. Massieren Sie diese Werte udev ruleswie folgt :

    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

Um den Symlink automatisch mit den von angegebenen Werten zu benennen udevadm info -q all /dev/<YOUR-DEVICE>, können Sie Folgendes verwenden:

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

Es ist auch möglich, ENVVariablen aus ATTRSWerten zu erstellen , um möglicherweise eine kürzere eindeutige ID zu erhalten.

Tom Hale
quelle
0

Wenn du ls /dev/disk-by-path/pci*...

Sie werden auf jeden Fall einen PCI-Pfad für jeden Laufwerkschacht sehen. Sie müssen nur eine bekannte Festplatte verwenden, um sicherzustellen, dass die Beschriftungen richtig sind.

Verwenden blkid /dev/disk-by-path/pci*Sie diese Option, um festzustellen, welche Festplattenpartitionen sich im PCI-Pfad befinden.

Sie können auch diesen Pfad verwenden.

Robert
quelle
0

Ich mag @cas Lösung, aber hier ist meine 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
quelle
-1

Die Scheibe ist bereits markiert , wie sda, sdb, sdc... Die Partitionen dann beispielsweise markiert sind auf sda: sda1, sda2...

Mit können Sie alle Bezeichnungen für Festplatten und Partitionen auflisten ls /dev/sd*

Alko
quelle
4
Leider ändern sich diese Gerätenamen, wenn ich die Festplatte von einem Computer auf einen anderen oder von einem Controller auf einen anderen verschiebe.
Dummzeuch