Bash-Scripting für GPT aufgeteilt

3071
John P. Fisher

Unter Verwendung von Bash & Python-Skripts in Ubuntu 12.04 stellen wir den Kunden ein Disk-Image als Datei zur Verfügung (erstellt von dd). Sobald dddie neue Festplatte eingelegt ist, wird die Partition an die Festplatte angepasst. Jetzt, da wir GPT-Platten verwenden, muss ich ein neues, nicht interaktives Nicht-X-Skript bereitstellen.

Das Problem ist partedeine interaktive Nachricht:

Fehler: Die Backup-GPT-Tabelle befindet sich nicht am Ende der Festplatte, wie es sein sollte. Dies kann bedeuten, dass ein anderes Betriebssystem der Meinung ist, dass die Festplatte kleiner ist. Fix, indem Sie die Sicherung bis zum Ende verschieben (und die alte Sicherung entfernen)? Fix / Ignorieren / Abbrechen

Wenn Sie parted verwenden -soder -mwechseln, kann ich die Größe der Festplatte nicht ändern und den Speicherort der Sicherungs-GPT nicht festlegen. Ich kann auch kein "F" in den Befehl aufnehmen:

echo "F" > parted /dev/sda resize 2 0% 100% parted /dev/sda resize 2 0% 100% parted -m /dev/sda resize 2 100% parted -s /dev/sda resize 2 100% 

Und so weiter. gdiskund sgdiskscheinen nicht in der Lage zu sein, die Größe zu verändern. gpartedfunktioniert gut, aber es ist natürlich X und nicht erlaubt.

Von der CLI aus kann ich die interaktive Nachricht unterdrücken, indem ich Backticks ausführen:

`parted -s /dev/sda rm 2` ( succeeded with error) `parted -s /dev/sda mkpart primary 100%` ( fails because the backup GPT was not moved) 

Ich brauche also den speziellen "Move GPT Backup" -Dienst, der in der interaktiven Nachricht angeboten wird und nur dort angeboten wird, aber ich muss nicht interaktiv laufen.

1

2 Antworten auf die Frage

2
Dru

Sie können ein expectSkript aus Ihrem Bash-Skript ausführen parted, um die Frage zu beantworten.

#!/usr/bin/expect eval spawn parted /dev/sda resize 2 0% 100% expect "Error: The backup GPT table is not at the end of the disk, as it should be. This might mean that another operating system believes the disk is smaller. Fix, by moving the backup to the end (and removing the old backup)? Fix/Ignore/Cancel? " send "F\r" expect eof 
Das ist eine gute Idee, @Dru. John P. Fisher vor 9 Jahren 0
2
Rod Smith

Dru's Ansatz wird wahrscheinlich funktionieren, obwohl ich es nicht getestet habe. Zwei andere Ansätze bestehen darin, eine Kombination von sgdiskund partedzu verwenden oder auf sgdiskkomplexere Weise zu verwenden. Im Einzelnen können Sie Folgendes tun:

  • Verwenden Sie sgdisk -e, um die Daten der Sicherungspartitionstabelle an das Ende der Festplatte parted resize...zu verschieben, und anschließend die Größe der Partition zu ändern. Die Verwendung von zwei Dienstprogrammen anstelle eines Dienstprogramms ist ein wenig unerheblich, sollte jedoch funktionieren.
  • Verwenden Sie sgdisk -e , um die Daten der Backup-Partitionstabelle an das Ende der Festplatte sgdisk -d...zu verschieben. Anschließend löschen Sie die Partition und sgdisk -n...erstellen an deren Stelle eine neue Partition. Sie können diese wahrscheinlich zu nur zwei oder vielleicht sogar zu einem Anruf zusammenfassen sgdisk. Ein Nachteil ist, dass dieser Ansatz den GUID-Wert für die Partition ändert. Wenn es wichtig ist, dass es gleich bleibt, müssen Sie diese Daten extrahieren und den GUID-Wert zurücksetzen. Wenn Sie jedoch von einem bekannten Image ausgehen, können Sie den GUID-Wert als Teil Ihres Skripts speichern und zurücksetzen ohne es vorher zu extrahieren.

Beachten Sie, dass ich keinen dieser Ansätze getestet habe. Daher kann ich nicht mehr garantieren, als ich die Methode von Dru garantieren kann.

@Rod Smith auch eine gute Idee. Ich werde diese am Montag bei der Arbeit testen. John P. Fisher vor 9 Jahren 0
Ich werde dies verwenden: `sgdisk -e / dev / sda; sgdisk -d 2 / dev / sda; sgdisk -N 2 / dev / sda` John P. Fisher vor 9 Jahren 0
Beachten Sie, dass Sie, wenn Sie den `sgdisk`-only-Ansatz verwenden, auch das in dieser Partition enthaltene Dateisystem ändern müssen. Es ist auch wichtig, dass der Startsektor der neuen Partition mit dem Original übereinstimmt. Dies kann nicht garantiert werden, wenn Sie `sgdisk -N` verwenden. Dies kann jedoch je nach Erstellung der ursprünglichen Partition gut funktionieren. Rod Smith vor 9 Jahren 0
Ich glaube, du hast sgdisk geschrieben? du solltest wissen! aber .... df und gparted werden nicht zustimmen, wenn du fertig bist. Wie Rod sagt, müssen Sie ein `resize2fs` und ich mache auch ein` e2fsck` vor dem `resize2fs`. Nicht sicher, ob e2fsck erforderlich ist oder nur eine gute Idee. John P. Fisher vor 9 Jahren 0