Referenzieren Sie die gesamte Festplatte (/ dev / sda) mithilfe der UUID

9

Auf meinem System (Debian), kann ich das sehen UUIDKennung für alle meine Platten - Partitionen (dh /dev/sda1, dev/sda2..)

ls /dev/disk/by-uuid/

Ich sehe den UUIDBezeichner jedoch nicht für /dev/sdasich. Ist es möglich, auf die gesamte Festplatte zu verweisen UUID?

Ich brauche dies, weil ich auf eine bestimmte Festplatte verweisen möchte und mich nicht darauf verlassen kann, dass sie aufgerufen wird /dev/sda.

BEARBEITEN

Die von @don_crissti vorgeschlagene Lösung ist großartig. Ich möchte jedoch, dass die UUID für alle Festplatten desselben Modells / Herstellers gleich ist und nicht nach Seriennummer eindeutig ist.

Mit udevadmkann ich die Festplattenattribute sehen:

udevadm info -n /dev/sda -a
ATTRS{model}=="Samsung SSD 840 "
ATTRS{vendor}=="0x8086"
ATTRS{class}=="0x010700"
ATTRS{device}=="0x1d6b"
....

Wie kann ich UUIDaus diesen Attributen eine generieren , damit dieselbe Modell- / Herstellerfestplatte dieselbe hat UUID?

Michael Boies
quelle
UUIDs gelten für Dateisysteme, nicht für Partitionen. Es gibt PARTUUIDs für Partitionen, aber nichts für ganze Festplatten. Sie müssen wahrscheinlich eine udev-Regel schreiben, um /dev/sdastattdessen einen festen Namen zu vergeben.
Muru
1
Das Interessante daran ist, dass es jetzt eine UUID im MBR gibt (zumindest wenn sie von Windows erstellt wurde), aber anscheinend keine Möglichkeit, sie zu verwenden.
Joshua

Antworten:

12

Die Symlinks unter /dev/disk/by-uuid/werden durch udevRegeln erstellt, die auf UUIDs von Dateisystemen basieren . Wenn Sie sich ansehen /usr/lib/udev/rules.d/60-persistent-storage.rules, finden Sie Einträge wie:

...... ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"

Um auf eine Festplatte zu verweisen, können Sie die Seriennummer der Festplatte und den ENV{ID_SERIAL_SHORT}Schlüssel verwenden.
Die folgende udevRegel stimmt mit dem Laufwerk mit der Seriennummer überein. 0000000013100925DB96und erstellt einen gleichnamigen Symlink unter /dev/disk/by-uuid/:

KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL_SHORT}=="0000000013100925DB96", SYMLINK+="disk/by-uuid/$env{ID_SERIAL_SHORT}"

Was Ihre andere Frage betrifft ... sicher, Sie können immer eine benutzerdefinierte Zeichenfolge ENV{ID_MODEL}anstelle ENV{ID_SERIAL_SHORT}Ihres Symlink-Namens verwenden.
Die folgende Regel stimmt mit jedem Laufwerk mit ID_MODEL= überein M4-CT128M4SSD2und erstellt einen Symlink M4-SSD-1234567890unter /dev/disk/by-uuid/:

KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_MODEL}=="M4-CT128M4SSD2", SYMLINK+="disk/by-uuid/M4-SSD-1234567890"

Beachten Sie, dass dies einwandfrei funktioniert, solange nur ein Laufwerk mit dem übereinstimmt ID_MODEL. Wenn mehrere Laufwerke desselben Modells vorhanden sind, wird die Regel für jedes Laufwerk erneut angewendet, und der Symlink zeigt auf das zuletzt erkannte / hinzugefügte Laufwerk.

don_crissti
quelle
Eigentlich möchte ich UUID, dass das für alle Festplatten des gleichen Modells / Typs / Herstellers gleich ist. Wissen Sie zufällig, welche Regel Sie dafür verwenden sollen? Offensichtlich nicht die Seriennummer.
Michael Boies
Bitte sehen Sie meine Bearbeitung. Was ich versuche zu erreichen: Nehmen wir an, meine HDDPannen sind ausgefallen, aber ich habe eine identische Ersatzfestplatte. Ich ersetze es und möchte es wie UUIDzuvor haben (obwohl sich die Seriennummer geändert hat). Ich beabsichtige nicht, beide Festplatten gleichzeitig zu verwenden.
Michael Boies
@MichaelBoies - Sie können die UUID direkt ändern w / gdisk- aber ich bin mir nicht sicher, ob das eine so gute Idee ist. Wenn Sie die Links nicht direkt ändern, ist dies ein besserer Weg, als die UUID tatsächlich zu ändern. Der Computer würde wahrscheinlich aufhören zu booten.
Mikesserv