Porady Admina: dd
Ostatnia aktualizacja: 15 września 2023, 22:28
W dzisiejszym tutorialu z cyklu Porady Admina zajmiemy się programem dd.
dd to potężne i przydatne narzędzie dostępne w systemach operacyjnych Unix i Uniksopodobnych. Jego celem jest konwersja i kopiowanie plików. W systemach operacyjnych Unix i systemach Uniksopodobnych, takich jak Linux, prawie wszystko jest traktowane jako plik, nawet urządzenia blokowe: dzięki temu dd jest przydatny, między innymi do klonowania dysków lub czyszczenia danych. Narzędzie dd jest dostępne od razu po zainstalowaniu w większości, jeśli nie we wszystkich dystrybucjach Linux.
Domyślnie program czyta ze standardowego wejścia i zapisuje na standardowe wyjście. Możemy jednak określić alternatywne pliki wejściowe i wyjściowe, używając odpowiednio opcji if i of linii poleceń. Tutaj dd różni się od zdecydowanej większości poleceń powłoki, ponieważ nie używa standardowej składni –option ani -o dla opcji.
dd jest częścią pakietu coreutils.
Składnia
sudo dd WEJŚCIE WYJŚCIE
Opcje
– bs=BAJTY : odczytuje i zapisuje do BAJTÓW naraz (domyślnie: 512)
– cbs=BAJTY : konwertuje BAJTY naraz
– conv=KONW : konwertuje plik według oddzielonej przecinkami listy symboli
– count=N : kopiuje jedynie N wejściowych bloków
– ibs=BAJTY : odczytuje BAJTY naraz (domyślnie: 512)
– if=PLIK : Czyta z PLIKU zamiast ze standardowego wejścia
– iflag=FLAGI : czyta według oddzielonej przecinkami listy symboli
– obs=BAJTY : zapisuje BAJTY naraz (domyślnie: 512)
– of=PLIK : zapisuje do PLIKU zamiast na standardowe wyjście
– oflag=FLAGI : zapisuje według oddzielonej przecinkami listy symboli
– status=POZIOM : POZIOM informacji wypisywanych na stderr;
Kopiowanie obrazu system na pamięć SSD
sudo dd if=linux-distro-VERSION-architektura.img of=/dev/sdX bs=4M conv=fsync
gdzie 'sdX’ to Twoje urządzenie wyjściowe, które możemy sprawdzić poleceniami:
sudo fdisk -l
lsblk
sudo blkid
df -h
Pomijanie bloków podczas czytania i pisania
Istnieją przypadki, w których możemy chcieć pominąć pewną liczbę rozmiarów bloków podczas odczytu lub zapisu do pliku. W takich przypadkach musimy użyć odpowiednio opcji skip i seek: 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 sytuacja, gdy chcemy wykonać kopię zapasową/przywrócić ukryte dane między MBR a pierwszą partycją na dysku, która zwykle zaczyna się w sektorze 2048, ze względu na wyrównanie. Sektory 2047 tego obszaru zwykle zawierają, w konfiguracji starszej partycji MBR, etap 1.5 programu ładującego grub. Jak możemy poinstruować dd, aby sklonował tylko ten obszar, bez uwzględnienia MBR? Wszystko, co musimy zrobić, to użyć opcji pominięcia:
sudo dd if=/dev/sda of=hidden-data-after-mbr count=2047 skip=1
Kompresja danych odczytanych przez dd
Jedną z częstszych operacji wykonywanych za pomocą dd jest klonowanie dysku. Polecenie dd tworzy idealny klon dysku, ponieważ kopiuje urządzenia blokowe bajt po bajcie, więc klonowanie dysku o pojemności 160 GB tworzy kopię zapasową dokładnie tego samego rozmiaru. Podczas klonowania dysku do pliku możemy jednak potokować dane odczytane przez dd, przez narzędzia do kompresji, takie jak gzip, aby zoptymalizować wynik i zmniejszyć ostateczny rozmiar pliku. Przykładowo chcemy stworzyć klon całego urządzenia blokowego /dev/sda, więc możemy użyć:
sudo dd if=/dev/sda bs=1M | gzip -c -9 > sda.dd.gz
Czyszczenie urządzenia blokowego
Innym przypadkiem użycia dd jest czyszczenie urządzenia, poprzez całkowite wymazanie danych:
sudo dd if=/dev/zero bs=1M of=/dev/sda
Można również wypełnić dysk losowymi danymi, aby jego sektory, które będą zawierały dane, były nie do odróżnienia od pustych i aby uniknąć wycieków metadanych. W tym przypadku chcemy odczytać dane z urządzeń /dev/random lub /dev/urandom:
sudo dd if=/dev/urandom bs=1M of=/dev/sda
Powyższa opcja jest przydatna, jeśli np. chcemy sprzedać dysk.
Więcej informacji o programie dd uzyskasz poleceniami:
sudo dd --help
man dd