Fehler, auch mit sudo: "dd: Öffnen von '/ dev / sda1' fehlgeschlagen: Berechtigung verweigert" (dd-Eingabe von gzip weitergeleitet)

14

Mein Befehl, der nicht funktioniert :

sudo gzip -dc sda1.image.gz | dd of=/dev/sda1

gibt den folgenden Fehler zurück, noch bevor ich mein Passwort eingeben konnte:

dd: failed to open ‘/dev/sda1’: Permission denied
[sudo] password for ken:

Ich habe es auch ohne die "-dc" -Optionen versucht und bekomme den gleichen Fehler.

Der Befehl dd ohne gzip unter Verwendung einer nicht komprimierten Datei funktioniert jedoch wie folgt :

sudo dd if=sda1.image of=/dev/sda1

Es scheint, als würde das Sudo nur auf den ersten Befehl angewendet und nicht auf die gesamte Befehlsfolge. Wenn ich in derselben Terminalsitzung bleibe und den Befehl wiederhole, erhalte ich keine Kennwortabfrage (meine Authentifizierung scheint weiterhin zu bestehen), und trotzdem erhalte ich den gleichen Fehler (als ob meine Authentifizierung nicht für den Schreibvorgang / dev gilt) ). Der gleiche Fehler tritt auf, wenn er von einem / bin / sh-Skript ausgeführt wird.

Wie soll ich meine Befehle erstellen, um mein Image auf dem Gerät zu dekomprimieren?

Ich verwende Ubuntu 14.04 LTS in einem Terminalfenster.

Ken Conrad
quelle

Antworten:

17

Sie fehlen sudoauf der anderen Seite der Pipeline:

sudo gzip -dc sda1.image.gz | sudo dd of=/dev/sda1

In einem <command> | <command> | [...]Befehlsformat sollte jeder Befehl der Pipeline, der benötigt sudowird sudo, nicht nur mit dem ersten ausgeführt werden.

In diesem Fall können Sie nicht verwenden müssen , sudoauf gzip -dc sda1.image.gz, wenn Sie auf die Datei Leseberechtigung nicht haben:

gzip -dc sda1.image.gz | sudo dd of=/dev/sda1

Wenn für alle Befehle, die in einer Pipeline ausgeführt werden sollen sudo, eine Möglichkeit zum Schreiben sudoin jedem Befehl besteht im Allgemeinen darin, den gesamten Befehl in einer Subshell auszuführen, die folgendermaßen aufgerufen wird sudo:

sudo bash -c '<command> | <command> | [...]'
kos
quelle
3
@KenConrad Wenn diese Antwort Ihr Problem gelöst hat, markieren Sie sie bitte als akzeptierte Antwort, indem Sie auf die Markierung unter der Anzahl der Upvotes klicken, damit andere Benutzer wissen, dass diese Antwort für Sie funktioniert hat und möglicherweise auch davon profitiert.
Kos