%20in%20Linux%20(Debian).png)
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-uuid
unddf
schließen Sie nur Partitionen ein (keine Datenträger).
Es wird jedoch fdisk -l
eine 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]*$//'
( sed
entfernt hier einfach die nachfolgenden Ziffern). Diese Lösung kann leicht angepasst werden, um /dev/disk/by-uuid/
bei Bedarf Informationen abzurufen.