Wie kann man eine Festplatte (Mbr löschen & Partitionen löschen) über die Befehlszeile mit einem Skript zurücksetzen, ohne neu zu starten?

8

Um von einem sauberen Zustand zu starten, muss ich die Festplatte über die Befehlszeile auf einen leeren Zustand zurücksetzen.

Es geht nicht darum, ein Löschdienstprogramm auszuführen, die Daten müssen nicht überschrieben werden.

Diese Frage ähnelt dem Löschen aller Partitionen über die Befehlszeile

Die Lösung dort funktioniert ganz gut,

dd if=/dev/zero of=/dev/sda bs=512 count=1 conv=notrunc

Wenn ich jedoch mit einer solchen überschriebenen Festplatte arbeiten möchte, wird die Fehlermeldung angezeigt, dass das Gerät noch verwendet wird.

root@grml ~ # blockdev --rereadpt /dev/sda
BLKRRPART: Device or resource busy

oder

root@grml ~ # partprobe
Error: Partition(s) 2, 3 on /dev/sda have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use.  As a result, the old partition(s) will remain in use.  You should reboot now before making further changes.
Error: Partition(s) 2, 3 on /dev/sdb have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use.  As a result, the old partition(s) will remain in use.  You should reboot now before making further changes.

Also muss ich alles, was auf dem Gerät "sitzt", manuell deaktivieren

umount /mnt/debootstrap
umount /mnt/debootstrap/tmp
umount /mnt/debootstrap/var/log
umount /mnt/debootstrap/var
umount /mnt/debootstrap/home
service mdadm stop
service lvm2 stop
vgremove vg_main
pvremove /dev/md1
mdadm --stop /dev/md0
mdadm --stop /dev/md1
mdadm --remove /dev/md0
mdadm --remove /dev/md1

danach partprobefunktioniert der Befehl.

Gibt es einen Befehl, der einfacher funktioniert? mögen

harddiskreset /dev/sda

kann es also problemlos auf Systemen mit unterschiedlichem Partitions- / lvm / md-Layout verwendet werden?

c33s
quelle
1
Was haben Sie neben dem Neustart empfohlen? Was ist der Kontext hier?
Michael Hampton
Ich bin mir nicht sicher, ob ich Ihre Fragen verstehe. Ich möchte ein Debian-System mit einem Bash-Skript booten, das Setup-Speicher verwendet. Um sicherzustellen, dass das Skript immer funktioniert, sollte die Festplatte im Zielsystem zuvor geleert / zurückgesetzt werden. Ist das der Kontext, nach dem Sie gefragt haben? dann würde ich meine frage erweitern. es schien mir nicht relevant zu sein, weil ich nur nach einem Befehl suche, der in der Lage ist, mbr & Partitionen von der Festplatte zu löschen ...
c33s
Sie sollten den MBR löschen, bevor Sie die Partitionen einrichten. Es scheint, dass Sie dies hier tun, nachdem Sie sie eingerichtet haben!
Michael Hampton
Ah ha! Ich habe es bekommen. Damit es funktioniert (von einer Live-CD), musste ich zuerst Folgendes tun: sudo wipefs -a / dev / sdb - fdisk -l zeigte keine Partitionstabellen in / dev / sdb - dann - sudo dd if = / dev / sda von = / dev / sdb hat daran gearbeitet, eine bootfähige Kopie des primären Laufwerks zu erstellen.
SDsolar

Antworten:

5

Mit dem wipefsProgramm können Sie die Signatur der Partitionstabelle einfach löschen:

wipefs -a /dev/sda

Sie müssen jedoch weiterhin alle Prozesse stoppen, die das Gerät verwenden, z. B. LVM.

Von man wipefs

wipefs kann Dateisystem-, RAID- oder Partitionstabellensignaturen (magische Zeichenfolgen) vom angegebenen Gerät löschen, um die Signaturen für libblkid unsichtbar zu machen.

wipefs löscht weder das Dateisystem selbst noch andere Daten vom Gerät. Bei Verwendung ohne Optionen listet wipefs alle sichtbaren Dateisysteme und die Offsets ihrer Basissignaturen auf.

wipefs ruft das BLKRRPART ioctl auf, wenn es eine Partitionstabellen-Signatur gelöscht hat, um den Kernel über die Änderung zu informieren.

user144437
quelle
2

Ich habe immer einfach getrennt dafür verwendet. Es eignet sich gut zum Ändern des Datenträgertyps und zum Hinzufügen / Entfernen von Partitionen, insbesondere da es im Gegensatz zu fdisk moderne große Festplatten verarbeiten kann.

Du kannst rennen

$ sudo parted /dev/sda

Dies wird die Dinge in Gang bringen und Sie in das getrennte Terminal bringen. Anschließend können Sie den Hilfebefehl ausführen, um alle verfügbaren Befehle anzuzeigen. Es ist sehr selbsterklärend.

Ich werde erwähnen, dass ja, Sie müssen alle Partitionen der Festplatte, die Sie formatieren möchten, nicht gemountet haben. Wenn Sie einfach nach einem schnelleren Weg suchen, um alle Partitionen zu entfernen, könnten Sie dies mit einem regulären Ausdruck im Befehl umount tun, aber das scheint albern.

Mit parted zur Verwaltung der Festplatte musste ich nie eine Aktualisierung der Festplatte oder ähnliches erzwingen.

Um ein Laufwerk für die brandneue Verwendung vollständig zu aktualisieren, gehe ich normalerweise wie folgt vor:

1) Trennen Sie sich durch Laufen sudo parted /dev/sda

2) Finden Sie vorhandene Partitionen, indem Sie ausführen print

3) Entfernen Sie vorhandene Partitionen, rm 1indem Sie 1 durch die Partitionsnummer ersetzen, die Sie entfernen möchten. Wiederholen Sie diesen Vorgang für alle verbleibenden Partitionen auf der Festplatte.

4) Setzen Sie das Disklabel zurück, indem Sie ausführen. mklabel gptIch verwende den gpt-Label-Typ, aber Sie können die Standard-MSDOS verwenden oder was auch immer Ihre Präferenz ist. Hier ist eine Liste der Datenträgertypen

5) Erstellen Sie neue Partitionen, indem mkpartSie ausführen. Dies führt Sie durch den Assistenten zum Erstellen von Partitionen. Die Start- und Endpunkte sind standardmäßig auf Sektoren eingestellt. Sie können dies ändern, indem Sie den unitBefehl ausführen, bevor Sie ihn ausführen. Auf mkpartdiese Weise können Sie ihn in GB, TB oder MB usw. angeben.

6) Überprüfen Sie Ihre Ergebnisse mit print, um Ihre neuen Partitionstabelleninformationen anzuzeigen

7) Anschließend müssen Sie die Partitionen formatieren. Dies sollte nicht durch Teilung erfolgen, obwohl einige Optionen dafür verfügbar sind. Ich würde vorschlagen, stattdessen das Partitionsterminal zu quitbeenden und dann mkfsdie Partitionen zu formatieren. Denken Sie daran, 'mkfs' unter / dev / sda1 anstelle von / dev / sda auszuführen, da Sie die Partition und nicht die Festplatte als Ganzes formatieren.

Das ist alles.

Ich hoffe das beantwortet deine Frage.

Hier finden Sie auch das online geteilte Handbuch als Referenz: https://www.gnu.org/software/parted/manual/html_node/index.html

BEARBEITEN:

Das OP wollte so etwas von einem Skript aus und nicht von einem Terminal aus tun. Sie können dieselbe Prozedur über ein Skript ausführen, indem Sie parted über einzeilige Befehle anstatt innerhalb des parted Terminals ausführen.

Zum Beispiel der Befehl

$ sudo parted /dev/sda print

Druckt die Laufwerksinformationen und die Partitionstabelle auf der Bash-Konsole aus, die dann mit grep usw. bearbeitet werden kann, um Variablen oder was auch immer in einem Bash-Skript zu erstellen.

KroniK907
quelle
Ich brauche es automatisiert von einem Skript nicht manuell vom Terminal
c33s
Warten Sie, in Ihrem ursprünglichen Beitrag wird kein Skript erwähnt. Welchen Teil davon schreiben Sie? Ich denke, Sie können geteilte Befehle ausführen, ohne in das geteilte Terminal zu gehen. Da bin ich mir allerdings nicht sicher.
KroniK907
Nur zur Bestätigung können Sie getrennte einzeilige Befehle ausführen. Zum Beispiel parted /dev/sda printwird die Partitionstabelle für / dev / sda ausgedruckt. Sie können das gleiche, was ich oben beschrieben habe, nur mit einzeiligen Befehlen ausführen, wenn Sie dies in einem Bash-Skript tun müssen.
KroniK907
aber ich muss wissen, wie der Name des Geräts sein wird, um den Befehl zu verwenden. parted /dev/sdaIch muss auch wissen, wie viele Partitionen sich auf dem Laufwerk befinden, um aufzurufen rm 1. Ich suche nach einem Befehl, um die Festplatte einfach zu bereinigen, damit ich sie neu partitionieren kann. ohne all die manuellen Dinge zu tun, um MDs herunterzufahren, Lvs zu entfernen und so weiter.
c33s
1) Sie müssen noch wissen, wie das Gerät heißt, um einen dd-Befehl auszuführen ... Sie sind sich nicht sicher, was Sie dort erreichen. Greifen Sie einfach durch, dfwenn das Laufwerk montiert ist. Wie wollen Sie ein "Skript" erstellen, wenn Sie den Speicherort des Laufwerks nicht ermitteln können? 2) Es ist einfach genug, parted $drive printdie Ergebnisse auszuführen und zu überprüfen, um alle verfügbaren Partitionsnummern zu finden und sie dann in einem Array zu speichern. Verwenden Sie dann diese Werte zum Ausführen parted $drive rm $partition. All dieses Zeug ist ziemlich einfaches Bash-Scripting.
KroniK907
0

Verwenden Sie eine verbesserte nicht interaktive Version von fdisk, nämlich sfdisk

Verwenden Sie diesen Befehl, um die Partitionstabelle zu löschen:

sfdisk --delete /dev/sda
Sonnenfänger
quelle
0

Grundsätzlich ist dieser Fehler

Fehler: Partition (en) 1 auf / dev / sdc wurden geschrieben, aber wir konnten den Kernel nicht über die Änderung informieren, wahrscheinlich weil sie verwendet werden. Infolgedessen bleiben die alten Partitionen in Gebrauch. Sie sollten jetzt neu starten, bevor Sie weitere Änderungen vornehmen.

wird angezeigt, wenn Sie beim Partitionieren Ihrer Festplatte einen Parameter übersehen. Sie können diesen Fehler beheben, indem Sie sich die Parameter genau ansehen, die Sie beim Partitionieren definiert haben.

Verwenden fdisk -lSie:, um die Parameter Ihrer Festplatte zu überprüfen:

user569959
quelle