Jak działa polecenie DD w Linux z przykładami

Jak działa polecenie DD w Linux z przykładami

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

Wymagania oprogramowania i konwencje linii poleceń Linux
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