Błąd, nawet z sudo: „dd: nie można otworzyć '/ dev / sda1': Odmowa uprawnień” (wejście dd przesyłane z gzip)

15

Moje polecenie, które nie działa :

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

zwraca następujący błąd, zanim zdążyłem wprowadzić hasło:

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

Próbowałem także bez opcji „-dc” i otrzymałem ten sam błąd.

Jednak polecenie dd bez gzip, używając nieskompresowanego pliku, działa :

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

Wygląda na to, że sudo stosuje się tylko do pierwszego polecenia, a nie do całej sekwencji poleceń. Jeśli pozostanę w tej samej sesji terminala i powtórzę polecenie, nie otrzymuję monitu o hasło (moje uwierzytelnienie wydaje się utrzymywać), a mimo to nadal pojawia się ten sam błąd (tak jakby moje uwierzytelnianie nie dotyczy operacji zapisu / dev ). Ten sam błąd występuje, gdy jest wykonywany ze skryptu / bin / sh.

Jak mam skonstruować moje polecenia, aby zdekompresować obraz do urządzenia?

Używam Ubuntu 14.04 LTS w oknie terminala.

Ken Conrad
źródło

Odpowiedzi:

18

Brakuje sudopo drugiej stronie rurociągu:

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

W <command> | <command> | [...]formacie polecenia każde polecenie potoku, które wymaga, sudopowinno być uruchamiane przy użyciu sudo, a nie tylko pierwszego.

W tym przypadku może nie trzeba używać sudona gzip -dc sda1.image.gz, chyba że nie masz prawa do odczytu pliku:

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

Zasadniczo, jeśli wszystkie polecenia, które mają być uruchomione w potoku, wymagają sudo, aby sudow każdej z nich napisać jedno polecenie, należy uruchomić całą komendę w podpowłoce wywoływanej przy użyciu sudo:

sudo bash -c '<command> | <command> | [...]'
kos
źródło
3
@KenConrad Jeśli ta odpowiedź rozwiązała Twój problem, oznacz ją jako zaakceptowaną, klikając znak pod liczbą głosów pozytywnych, aby inni użytkownicy wiedzieli, że ta odpowiedź działała dla Ciebie i być może również z niej skorzystają.
kos