Zuverlässige Identifizierung einer Festplatte (keine Partition) in Linux (Debian)

Zuverlässige Identifizierung einer Festplatte (keine Partition) in Linux (Debian)

Ich möchte die Partitionstabelle einer Festplatte in einem Skript wie diesem sichern:

sfdisk --dump /dev/sda > partition_table.dump

Aber

  • Ich möchte es nicht verwenden /dev/sda, da es möglicherweise nicht zuverlässig ist.

  • /dev/disk/by-id scheint auchnicht zuverlässig zu sein.

  • /dev/disk/by-uuidund dfschließen Sie nur Partitionen ein (keine Datenträger).

Es wird jedoch fdisk -leine UUID „Disk Identifier“ angezeigt. Kann ich den Datenträgernamen ( sda) irgendwie aus der Datenträgerkennung ermitteln? Oder gibt es eine andere Möglichkeit, einen Datenträger zuverlässig zu identifizieren?

Antwort1

Trotzdem verwenden /dev/disk/by-id/.Das Problem, auf das Sie verlinkensieht für mich nach einem seltenen Hardwarefehler oder etwas ähnlich Schlimmen aus.

Vergleichen

ls -l /dev/disk/by-id/

Zu

# 'lsblk' is from 'util-linux' package
lsblk -pdo NAME,VENDOR,MODEL,SERIAL,WWN

Auf einigen meiner Systeme zeigt der obige Befehl jedoch leere Werte an. Sie können es trotzdem versuchen:

# the below 'smartctl' command (from 'smartmontools' package) probably needs 'sudo'
for sd in $(lsblk -pdo NAME | tail -n +2); do
  printf "%s\n" "$sd"; smartctl -i "$sd" |
  grep -E "Model:|Number:|WWN"
done

Ich weiß nicht viel überWWNaber Seriennummern sollten in der Hardware fest codiert sein. Ich meine, wenn sich eine Seriennummer aus irgendeinem Grund ändert, können größere Probleme auftreten als ein Backup-Skript, das plötzlich nicht mehr funktioniert.


Beachten Sie, dass eine Seriennummer ein physisches Gerät identifiziert, unabhängig von seiner Partitionstabelle (oder ob es überhaupt eine gibt, studieren Sie den Begriff "Superfloppy" unddiese Frage). Wenn Sie Partitionstabellen selbst identifizieren möchten, sind diese „Disk Identifier“-UUIDs, die Sie entdeckt haben, der richtige Ansatz (beachten Sie, dass es sich im GPT-Schema um 128-Bit-UUIDs handelt, im MBR jedoch um optionale 32-Bit-Signaturen).Beispiel hier). Es sind nur wenige Bytes auf der Festplatte, die geändert, geklont und gesichert werden können. Ich habe keine schnelle Möglichkeit gefunden, einen Geräteknoten anhand dieser Art von Kennung zu identifizieren, außer durch das Durchsuchen der verfügbaren Geräte:

id=8080fdb4-6905-4f34-91fa-61389615d7d3
# the below 'fdisk' command (from 'util-linux' package) probably needs 'sudo'
for sd in $(lsblk -pdo NAME | tail -n +2); do
  fdisk -l "$sd" | grep -qi " ${id}$" && printf "%s\n" "$sd"
done

/dev/disk/by-uuid[...] nur Partitionen einschließen (keine Festplatten).

Nun, es kann sein, dass nicht einmal alle enthalten sind, da diese UUIDs sich auf Strukturen innerhalb von Partitionen beziehen (wie Dateisysteme oder Swap), nicht auf Partitionen selbst (und wenn Sie mit Superfloppy arbeiten, wird es hier als ganze Platte aufgeführt). Jede dieser UUIDs wird irgendwo in die entsprechende Partition geschrieben (oder auf das Gerät, wenn es sich um Superfloppy handelt). Dies sind Kennungen, die Sie sehen, wenn Sie z. B.

# 'file' is from 'file' package
file -s /dev/sda2

Wenn Sie Partitionskennungen benötigen, finden Sie diese in /dev/disk/by-partuuid/. Diese sind die gleichen wie in

# 'partx' is from 'util-linux' package
partx --show /dev/sda

und sie werden in einer entsprechenden Partitionstabelle gespeichert, nicht innerhalb einer Partition. Sie können sich ein umfassenderes Bild machen, indem Sie ausführen

# 'blkid' (from 'util-linux' package) probably needs 'sudo'
blkid

Um ein Gerät zu identifizieren, das eine Partition mit einer bestimmten UUID enthält, versuchen Sie Folgendes:

id=68e3b991-5c7a-4d18-a120-834ef4effe00
readlink -e "/dev/disk/by-partuuid/$id" | sed 's/[0-9]*$//'

( sedentfernt hier einfach die nachfolgenden Ziffern). Diese Lösung kann leicht angepasst werden, um /dev/disk/by-uuid/bei Bedarf Informationen abzurufen.

verwandte Informationen