Jak działa polecenie DD w Linux z przykładami
- 3646
- 743
- Ignacy Modzelewski
DD to bardzo potężne i przydatne narzędzie dostępne w systemach operacyjnych UNIX i UNIX. Jak stwierdzono w jej podręczniku, jego celem jest konwersja i kopiowanie plików. W systemach operacyjnych UNIX i UNIX, takich jak Linux, prawie wszystko jest traktowane jako plik, a nawet urządzenia blokujące: to sprawia, że DD jest przydatne, między innymi, do klonizowania dysków lub wyczyszczenia danych. Dd
narzędzie jest dostępne poza pudełkiem nawet w najbardziej minimalnej instalacji wszystkich dystrybucji. W tym samouczka.
W tym samouczku nauczysz się:
- Jak używać DD
- Jak zmodyfikować zachowanie programu za pomocą niektórych z najczęściej używanych opcji
Zastosowane wymagania i konwencje oprogramowania
Kategoria | Wymagania, konwencje lub wersja oprogramowania |
---|---|
System | Niezależny od rozkładu |
Oprogramowanie | Nie jest potrzebne specjalne oprogramowanie, aby śledzić ten samouczek, z wyjątkiem DD |
Inny | Znajomość interfejsu wiersza poleceń i przekierowania |
Konwencje | # - Wymaga, aby podane polecenia Linux są wykonywane z uprawnieniami root bezpośrednio jako użytkownik root lub za pomocą sudo Komenda$ - Wymaga, aby podane polecenia Linux zostały wykonane jako zwykły użytkownik niepewny |
Podstawowe użycie
Podstawowa składnia Dd
jest bardzo proste. Domyślnie program odczytuje z Standardowe wejście
i pisze standardowe wyjście
. Możemy jednak określić alternatywę wejście
I wyjście
pliki za pomocą odpowiednio Jeśli
I z
Opcje wiersza poleceń. Tutaj DD różni się od zdecydowanej większości poleceń powłoki, ponieważ nie używa standardu --opcja
Lub -o
Składnia dla opcji.
Zobaczmy przykład użycia DD. Jednym z najbardziej typowych przypadków użycia dla narzędzia jest tworzenie kopii zapasowych głównego rekordu rozruchu: pierwszy sektor w dziedzictwie Mbr
System partycjonowany. Długość tego sektora jest zwykle 512
bajty: zawiera etap 1 bootloader Grub
i tabela partycji dysku. Załóżmy, że chcemy wykonać kopię zapasową Mbr
dysk /dev /sda, wszystko, co musimy zrobić, to wywołać DD z następującą składnią:
$ sudo dd if =/dev/sda bs = 512 liczba = 1 o = mbr.img
Przeanalizujmy powyższe polecenie. Przede wszystkim prefiksowaliśmy faktyczne wywołanie DD z poleceniem Sudo, aby uruchomić polecenie z uprawnieniami administracyjnymi. Jest to potrzebne, aby uzyskać dostęp do /dev/sda
Urządzenie blokujące. Następnie wywołaliśmy DD, określając źródło wejściowe z Jeśli
opcja i plik wyjściowy z z
. Użyliśmy również BS
I liczyć
opcje określania odpowiednio ilości danych, które powinny być odczytane na czas lub rozmiar bloku, oraz całkowita ilość bloków do odczytania. W tym przypadku moglibyśmy pominąć BS
opcja, od czasu 512
Bajty to domyślny rozmiar używany przez DD. Jeśli uruchomimy powyższe polecenie, zobaczymy, że tworzy ono następujące dane wyjściowe:
1+0 Records w 1+0 Records 512 bajtów skopiowane, 0.000657177 S, 779 kb/s
Powyższe dane wyjściowe pokazuje nam ilość odczytania i pisania rekordów, ilość skopiowanych danych, ilość czasu, w którym zadanie zostało zakończone i prędkość transferu. Powinniśmy teraz mieć klon Mbr
sektor, przechowywany w Mbr.img
plik. Oczywiście sufiks plików nie ma prawdziwego znaczenia dla Linux, więc użycie „.img ”jest całkowicie arbitralny: możesz użyć”.dd ”, aby nazwa pliku odzwierciedlała polecenie używane do utworzenia pliku.
W powyższym przykładzie używamy BS
opcja zdefiniowania zarówno ilości bajtów, które należy odczytać i pisać na raz. Aby zdefiniować wartości osobno dla dwóch operacji, możemy użyć ZJD
I Obs
zamiast tego opcje, które ustanowiły odpowiednio ilość bajtów odczytywanych i napisanych jednocześnie.
Pomijanie bloków podczas czytania i pisania
Są przypadki, w których możemy chcieć pominąć określoną liczbę rozmiarów bloków podczas czytania lub zapisywania do pliku. W takich przypadkach musimy użyć pominąć
I szukać
Opcje odpowiednio: Służą one do pomijania określonych bloków danych, na początku wejścia i na początku wyjścia.
Przykładem takiej sytuacji jest to, że chcemy wykonać kopię zapasową/przywrócić ukryte dane między Mbr
i pierwsza partycja na dysku, która zwykle zaczyna się w sektorze 2048
, z powodów wyrównania. 2047
Sektory tego obszaru zwykle zawierają, na dziedzictwie Mbr
Konfiguracja partycji, etap 1.5 bootloader Grub. Jak możemy poinstruować DD, aby sklonował tylko ten obszar, bez włączenia Mbr
? Wszystko, co musimy zrobić, to użyć pominąć
opcja:
$ sudo dd if =/dev/sda o = Hidden-Data-After-a-a-a-a-mbr Count = 2047 Skip = 1
W tym przypadku poinstruowaliśmy DD do kopiowania 2047
bloki 512
bajty z dysku /dev /sda, zaczynając od drugiego. W przeciwnej sytuacji, gdy chcemy przywrócić sklonowane dane i napisać je z powrotem w tej samej strefie dysku, chcemy użyć opcji Seek, która pomija określoną liczbę bloków na początku wyjścia:
$ sudo dd if = hidden-data-after-mbr o =/dev/sda szuka = 1
W takim przypadku poinstruowaliśmy DD, aby skopiował dane z ukryte data-after-mbr
i napisać to na /dev/sda
Urządzenie blokowe zaczynające się od drugiego bloku.
Kompresowanie danych odczytanych przez DD
Jak już powiedzieliśmy wcześniej, jedną z najczęstszych operacji wykonywanych z DD jest klonowanie dysku. Komenda DD wytwarza idealny klon dysku, ponieważ kopiuje Block Urządzenia bajtu przez bajt, więc klonowanie dysku 160 GB, tworzy kopię zapasową tego samego rozmiaru. Podczas klonowania dysku do pliku możemy jednak opierać dane odczytane przez DD, chociaż narzędzia kompresyjne takie jak gzip
, Aby zoptymalizować wynik i zmniejszyć końcowy rozmiar pliku. Powiedzmy na przykład, że chcemy utworzyć klon całego urządzenia blokowego /Dev /SDA, moglibyśmy napisać:
$ sudo dd if =/dev/sda bs = 1m | GZIP -C -9> SDA.Dd.GZ
W powyższym przykładzie poinstruowaliśmy DD, aby odczytał z urządzenia /dev /sDA, a także zmieniliśmy rozmiar bloku na 1M, co może dać nam lepszą wydajność w takiej sytuacji. Następnie przetwarzaliśmy dane, dodatkowo przetwarzając je za pomocą gzip
program, który przywołaliśmy z -C
(Krótkie dla --do Stdout
) I -9
Opcja, która instruuje program, aby użyć maksymalnej dostępnej kompresji. Na koniec przekierowaliśmy wyjście do „SDA.Dd.plik GZ ”. Nawiasem mówiąc, jeśli chcesz dowiedzieć się więcej o Przekierowania
Możesz przeczytać nasz artykuł na ten temat.
Wycieranie urządzenia blokowego
Kolejnym przypadkiem użycia DD jest wycieranie urządzenia. Istnieje wiele sytuacji, w których możemy potrzebować takiej operacji: możemy chcieć sprzedać dysk i upewnić się, że jego poprzednie treści są całkowicie wymazane z oczywistych powodów prywatności lub możemy chcieć wyczyścić dane przed skonfiguracją szyfrowania. W pierwszym przypadku wystarczyłoby zastąpienie dysku zera:
$ sudo dd if =/dev/zero bs = 1m o =/dev/sda
Powyższe polecenie instruuje DD, aby odczytał z urządzenia /dev /zero, które zapewnia zerowe znaki i zapisuje je do urządzeń, dopóki nie zostanie całkowicie wypełnione.
Przed skonfiguracją warstwy szyfrowania w naszym systemie możemy zamiast tego wypełnić dysk losowymi danymi, aby renderować sektory, które będą zawierały dane nie do odróżnienia od pustych i uniknąć wycieków metadanych. W takim przypadku chcemy odczytać dane z /dev/losowe
Lub /dev/urandom
urządzenia:
$ sudo dd if =/dev/urandom bs = 1m o =/dev/sda
Obie polecenia będą wymagały znacznej ilości czasu do zakończenia, w zależności od wielkości i rodzaju danego urządzenia blokowego oraz źródła użytych danych losowych, /dev/losowe
bycie wolniejsze (blokuje, aż nie zgromadzi wystarczającej liczby szumów środowiskowych), ale zwraca dane losowe wyższej jakości niż /dev/urandom
.
Konwersja danych
przekon
Opcje DD służy do stosowania konwersji danych. Opcje muszą być dostarczone z oddzieloną przecinkami listy symboli jako argumentów. Tutaj niektóre z najczęściej używanych:
- NOERROR - To sprawia, że używa DD, aby kontynuować nawet po napotkaniu błędu odczytu;
- NOTRUNC - Ta opcja instruuje DD, aby nie obcinał pliku wyjściowego;
- synchronizacja - ta opcja ma sens, szczególnie gdy jest używana razem z noerror. Instruuje DD, aby podkładał każde bloki wejściowe z NULS.
Typowy przypadek, w którym możemy chcieć uruchomić DD razem z conv = synchronizacja, noerror
Opcja jest podczas klonowania dysku, który zawiera uszkodzone sektory. W takim przypadku żaden błąd
opcja sprawi, że DD będzie nadal działał, nawet jeśli sektor nie może być pomyślnie odczytany, a synchronizacja
opcja stworzy, aby ilość danych nie została odczytana przez ich zastąpienie Nuls
, tak, że długość danych została zachowana, nawet jeśli faktyczne dane zostaną utracone (ponieważ nie można go odczytać).
Wnioski
W tym samouczku nauczyliśmy się używać bardzo potężnego polecenia DD. Widzieliśmy niektóre z typowych przypadków, w których program jest używany, takie jak klonowanie dysku, i uczymy się znać jego składnię i ważniejsze opcje, których możemy użyć do modyfikacji jego zachowania. Ponieważ DD jest bardzo potężnym narzędziem, należy go używać z ekstremalną uwagą: po prostu poprzez zmianę celu wejściowego i wyjściowego, w niektórych sytuacjach można całkowicie zniszczyć dane na dysku.
Powiązane samouczki Linux:
- Rzeczy do zainstalowania na Ubuntu 20.04
- Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
- Mastering Bash Script Loops
- Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
- Jak sklonować system Linux
- Mint 20: Lepsze niż Ubuntu i Microsoft Windows?
- Pobierz Linux
- Partia klonów na Linux
- Zagnieżdżone pętle w skryptach Bash
- Jak podwójnie rozruch Kali Linux i Windows 10