Wsparcie! dd
jest straszne!
Nie jesteś sam. Z porad dla systemu Linux :
Polecenie „dd” jest jednym z oryginalnych narzędzi uniksowych i powinno znajdować się w skrzynce narzędziowej wszystkich osób. Niektórzy uważają, że dd oznacza „Zniszcz dysk” lub „Usuń dane”, ponieważ jeśli zostanie niewłaściwie użyte, partycja lub plik wyjściowy mogą zostać zniszczone bardzo szybko. Ponieważ dd jest narzędziem używanym do zapisywania nagłówków dysków, rekordów rozruchowych i podobnych obszarów danych systemowych, niewłaściwe użycie dd prawdopodobnie zniszczyło wiele dysków twardych i systemów plików.
Ale nie martwcie się. Gdy dowiesz się o jego zawiłościach, będziesz przywoływał dd
spokojną grację kowboja rodeo.
Czy to się zepsuje? Co to jest count
ing bs
?
Najpierw zajmiemy się pierwszym pytaniem.
Jak możemy teraz subtelnie niszczyć, wybierając złą kombinację bs
i count
? Skąd mielibyśmy wiedzieć?
Jeśli masz na myśli „niezamierzone konsekwencje” przez „złamanie”, to po prostu przez ich sprecyzowanie w teorii. Co mam przez to na myśli? Powiedzmy, że chcesz skopiować image.img
na kartę SD znajdującą się pod adresem /dev/sdc
. Więc dopasujesz parametry w swoim przykładzie:
# dd if=/home/someone/image.img of=/dev/sdc bs=64M count=16
Czy ponowne użycie tych ustawień powinno być w porządku? Poczekajmy, dd
aż skończymy ... co teraz mówi?
16+0 records in
16+0 records out
1073741824 bytes (1.1 GB) copied, 34.1303 s, 31.5 MB/s
Tylko 1,1 GB skopiowane! Ale image.img
ma około 2 GB , chcę, żeby wszystko zostało skopiowane! Mówiąc, dd
aby skopiować 16 partii 64M (gdzie M = 1024 * 1024, nawiasem mówiąc) określiłeś rozmiar. Będziesz wiedział po wyjściu statusu. Jeśli chcesz skopiować cały plik, dopasuj rozmiar za pomocą bs
i count
; lub po prostu całkowicie je pomiń:
# dd if=/home/someone/image.img of=/dev/sdc
4364864+0 records in
4364864+0 records out
2234810368 bytes (2.2 GB) copied, 45.9502 s, 48.6 MB/s
Co się stanie, jeśli staniemy się naprawdę niegrzeczni i powiedzmy, dd
aby skopiować więcej danych niż jest dostępnych?
# dd if=/home/someone/image.img of=/dev/sdc bs=1M count=4096
2131+1 records in
2131+1 records out
2234810368 bytes (2.2 GB) copied, 77.9768 s, 28.7 MB/s
Ach, dd
kopiuje tylko tyle bajtów, ile otrzymuje. To się przydaje.
Monitorowanie dd
Mówiąc o wyjściu statusu, dd
(wariant GNU) szanuje i reaguje na sygnał INFO SIGUSR1
:
# echo "In another terminal or TTY"
# pkill -USR1 -n -x dd
# echo "Printed to stdout on the terminal/tty running dd:"
534+0 records in
534+0 records out
559939584 bytes (560 MB) copied, 1.68414 s, 332 MB/s
Przydaje się do monitorowania powolnego transferu lub z jakiegoś powodu możesz się zawiesić. Dobrze się łączy watch
, ale pamiętaj, aby podać watch
odpowiednio długi czas przerwy.
Czy dd
mam jakieś inne opcje, o których powinienem wiedzieć?
dd
rzeczywiście ma inne opcje, ale w większości przypadków, jeśli będziesz musiał z nich skorzystać, będziesz wiedział, co robią. Mimo to kilka przykładów może dać ci pomysł:
conv=CONVS
: przekonwertuj dane wejściowe zgodnie z jedną lub kilkoma opcjami konwersji
seek=N
i skip=N
: pomiń bloki wielkości N [obs | ibs] na początku [wyjście | wejście]
status=X
: (pomijanie wyjścia) albo noxfer
albonone
Teraz czuję się znacznie lepiej dd
!
Wspaniały! Wkrótce wyślesz przez Internet obraz rozruchowy, który zostanie zapisany bezpośrednio na karcie microSD przy użyciu kombinacji dd
i ssh
.
Ale co tak dd
naprawdę oznacza akronim?
Dobre ostatnie pytanie. W przypadku tego pytania i innych podobnych, odsyłam cię do wpisu pliku żargonu dladd
.
Zachęcamy do proszenia o wyjaśnienie, czy coś jest bardziej nieprzejrzyste niż powinno!