
Ich arbeite derzeit an einem selbstgebauten Netzwerkspeicher, der freien Speicherplatz mithilfe von mhddfs aggregiert.
Jetzt möchte ich beispielsweise bei einem Hotswap-Schacht beim Einsetzen einer brandneuen, unpartitionierten Festplatte diese automatisch mit einem Bash-Skript partitionieren und die neue MHDDF-Partition mounten.
Die gleiche Situation tritt ein, wenn der Server ausgeschaltet, eine neue Festplatte eingelegt und der Server wieder eingeschaltet wird.
Die Frage ist also: Wie kann ich mit einem Bash-Skript eine nicht partitionierte Festplatte erkennen?
Die Frage beinhaltet auch, dass es zu keinen Fehlerkennungen kommen darf. Wenn beispielsweise eine verschlüsselte Festplatte eingelegt wird, darf sie nicht automatisch neu partitioniert und formatiert werden. Dieser Punkt ist das Hauptinteresse der Frage.
Antwort1
Eine Möglichkeit zum Durchführen der Überprüfung und Partitionierung ist der parted
Befehl. So erhalten Sie Partitionsinformationen zu allen Festplattenblockgeräten im System in einem für Menschen lesbaren Format:
/sbin/parted -l
oder verwenden Sie im „maschinenlesbaren“ Format:
/sbin/parted -lm
Sie müssen die Ausgabe analysieren, um zu bestimmen, ob die Festplatte über eine gültige Partitionstabelle verfügt.
Verwenden Sie dann etwas wie:
/sbin/parted <device> --script mkpart primary 1 -- -1
um eine einzelne Partition zu erstellen, die die gesamte Festplatte nutzt. Die Syntax des Unterbefehls mkpart stammt aus dem Speicher und ich habe kein System mit einer verfügbaren Festplatte, um zu überprüfen, ob sie korrekt ist
Antwort2
Hier ist eine Methode, die ich für Backups verwende.
if [ $(/sbin/sfdisk -d ${DEV} 2>&1) == "" ]; then echo "Device not partitioned"; fi
wobei ${DEV} das Gerät ist, das Sie abfragen. (Am besten über ein Udev-Skript ausführen.)
Antwort3
Ich gehe davon aus, dass Sie dies auf einem Linux-Kernel tun.
Verwenden Sie fdisk
oder sfdisk
aus der util-linux
Verpackung:
fdisk -l /path/to/disk
oder:
sfdisk -l /path/to/disk
um die aktuelle Partitionstabelle aufzulisten.
Linux erkennt verfügbare Partitionen, daher /dev/disk
reicht es für Ihre Anforderungen möglicherweise aus, in den Verzeichnissen zu suchen.
Antwort4
Mir gefiel die Antwort sehr gut, die gepostet wurde aufPaketüberflusswas darauf hindeutet:
parted --script
Wie:
parted --script /dev/sdb print