staging.inyokaproject.org

sudo dd beenden in einem Skript

Status: Gelöst | Ubuntu-Version: Ubuntu 20.04 (Focal Fossa)
Antworten |

myOWNsystem

Anmeldungsdatum:
24. Dezember 2020

Beiträge: 39

Hallo, ich habe Ubuntu 20.04 LTS. Ich möchte einen Skript schreiben der eine Festplatte löscht. Man wird gefragt welche Festplatte gelöscht werden soll und dann soll sie mit dd gelöscht werden. Das habe ich:

function deleteUsbStick() {
echo "Das Medium wird jetzt gelöscht!"
sudo dd if=/dev/zero of=/dev/$usbStick
}

Problem: Wen das durchläuft muss am ende Strg + c gedrückt werden (bzw. Ctrl + c). Werden diese Tasten gedrückt stützt das Terminal jedoch ab.

Was mache ich falsch? Danke für eure hilfe!

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Ich will es nicht nachstellen, daher geraten:

Du prellst vielleicht die Taste, so dass der Ctrl-C-Befehl zweimal ankommt, einmal für dd, und nachdem das beendet ist, beendest Du damit die Shell?

Alternativ könntest Du die Größe des Sticks bestimmen und mit dem Wissen die Parameter für dd setzen (BS, COUNT) - keine Ahnung ob das hilft.

Was ist denn der Wert von $usbStick?

Vielleicht empfiehlt es sich, erst die Daten zu löschen:

1
2
3
4
function deleteUsbStick() {
echo "Das Medium wird jetzt gelöscht!"
sudo dd if=/dev/zero of=/media/myOWNsystem/1234-ABCD
}

während der Stick eingehängt ist, und danach erst die Partitionstabelle.

1
sudo dd if=/dev/zero of=/dev/sdc BS=4096 COUNT=1

(Werte für Blocksize geraten, aber aus dem Kopf ist das nicht viel.)

oder löschst Du nur die erste Partition?

1
sudo dd if=/dev/zero of=/dev/sdc1 

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7795

Wieviele USB-Sticks hast du damit schon erfolgreich gelöscht und wieviele sind den Hitze-/Schreibzyklen-Tod gestorben? Die meisten 0815-Sticks (auch die von Sandisk, Samsung & Co) machen das nicht immer mit.

Wenn du Strg+C drückst wird der Vorgang ja abgebrochen, mir nicht so ganz klar, was das werden soll. Wenn es nicht um forensische Datenvernichtung geht sondern du nur ein altes Dateisystem u. Partitionstabelle wegpusten willst, nimm besser wipefs dazu.

Du kannst bei GNU dd mit status=progress eine Fortschrittsanzeige bekommen. Ansonsten mit direct und fdatasync auch Cache-Effekte abschalten. Und mit bs=1M eine größere Blocksize verwenden.

Werden diese Tasten gedrückt stützt das Terminal jedoch ab.

Ist das ein Shortcut bei dem das Script direkt im Terminal gestartet wird?

Terminals schließen sich wenn sich das ausgeführte Script beendet. Das ist normales Verhalten und kein Absturz.

Wenn das Terminal tatsächlich abstürzen sollte dann wäre das ein anderes Problem und hat nicht unbedingt was mit deinem Script zu tun (solange du nicht direkt mit kill aufs Terminal losgehst).

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Achso. Ich ging davon aus, dass das Skript aus der Shell gestartet wird - wenn man schon selbst Scripte schreibt ...?

Kann aber auch das Problem sein.

Das Prograsmm dd ist übrigens eine heikle Sache, wenn man mit Skripting noch nicht ganz firm ist. Was macht das Script z.B., wenn der Parameter $usbStick leer ist?

Das will man vielleicht nicht am lebenden Objekt ausprobieren. ☺

myOWNsystem

(Themenstarter)

Anmeldungsdatum:
24. Dezember 2020

Beiträge: 39

Danke für die Antworten. Dann probiere ich das alles mit wipefs.

Ich wollte ein Terminal Programm schreiben das für nicht 64-Bit fähige Macs einen Boot-USB erstellt.

Hier der Artikel: https://www.mesom.de/efi32boot/index.html

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

myOWNsystem schrieb:

1
2
3
4
function deleteUsbStick() {
echo "Das Medium wird jetzt gelöscht!"
sudo dd if=/dev/zero of=/dev/$usbStick
}

Da Du schon eine Funktion geschrieben hast, bietet es sich eigentlich auch an, den Namen des Devices als Parameter zu übergeben. Das ist flexibler und nicht so un-offensichtlich. Ich meine so etwas:

1
2
3
4
function deleteUsbStick() {
  echo "Das Medium wird jetzt gelöscht!"
  sudo dd if=/dev/zero "of=/dev/$1"
}

Problem: Wen das durchläuft muss am ende Strg + c gedrückt werden (bzw. Ctrl + c).

Ich vermute nicht. Ich schätze, es dauert einfach eine Weile, bis das wirklich fertig ist. Deshalb, wie schon vorgeschlagen, mit "status=progress conv=fsync" (oder "fdatasync") probieren.

Cranvil

Anmeldungsdatum:
9. März 2019

Beiträge: 990

Der Autor der verlinkten Anleitung hat leider tatsächlich empfohlen, den dd-Befehl auszuführen und nach ein bisschen Warten mit STRG + C zu beenden, anstatt auf Tools wie das hier erwähnte wipefs (oder z.B. auch sgdisk -Z device) zu verweisen oder den dd-Befehl um eine Blockgröße und -anzahl zu ergänzen (z.B. dd if=deviceA of=deviceB bs=1M count=10).

Antworten |