Wiele osób słyszało o takim narzędziu jak Norton Ghost. Pod Linuksa znajduje się jego odpowiednik o nazwie G4L. Jednak żeby wykonać kopię dysku wcale nie potrzeba do tego specjalistycznych programów oraz skryptów. Wystarczą do tego podstawowe polecenia jakie udostępnia nam system Linux. Jednym z takich narzędzi jest polecenie dd, które jest częścią pakietu GNU Coreutils. Łącząc to polecenie z innymi programami, możemy zbudować własne narzędzie do wykonywania pełnego obrazu dysku twardego nawet poprzez sieć.

Kopiowanie dysku

Program dd służy do niskopoziomowego kopiowania i konwersji surowych danych (ang. raw data). Dzięki niemu, możemy skopiować określoną ilość bajtów, bloków. Program bardzo chętnie wykorzystywany jest w gromadzeniu “cyfrowych dowodów”, gdzie niezbędne jest odczytanie dysku “bit po bicie”. Klasyczne kopiowanie plików za pomocą polecenia cp jest w tym wypadku niewystarczające, gdyż dane z usuniętych plików, które nie zostały jeszcze “nadpisane” nie są widoczne dla systemu plików, do którego odwołuje się cp.

Korzystając z tego polecenia możemy bardzo szybko wykonać obraz dysku twardego:

dd if=/dev/sda of=/mnt/backup/dysk.img

Możemy wykonać kopię dowolnej partycji lub MBR (ang. Master Boot Record):

dd if=/dev/sda of=/mnt/backup/mbr.img bs=512 count=1

Powstały w ten sposób obraz możemy spakować poleceniem gzip a następnie zarchiwizować w bezpiecznym miejscu. Odtworzenie dysku jest równie proste co wykonanie jego kopii.

dd if=/mnt/backup/dysk.img of=/dev/sda

Spowoduje to zapis zawartości pliku dysk.img na dysk /dev/sda. Odtworzone zostaną wszelakie partycje oraz dane.

Backup poprzez sieć

Jeżeli posiadamy serwer z dużym dyskiem twardym, możemy wykonać kopię danych na serwerze poprzez sieć. Nie potrzebne są do tego żadne specjalne serwery, które umożliwią transfer plików, lecz malutki program GNU Netcat, który znajduje się w każdej dystrybucji.

Netcat jest to uniwersalne narzędzie skanująco-monitorujące oraz prosty serwer, odpowiednik polecenia cat, uzupełniony o komunikację TCP/IP (stąd net-cat, sieciowy cat). Dzięki tej aplikacji możemy szybko i w prosty sposób przesłać dane pomiędzy maszynami.

Na serwerze uruchamiamy program, który będzie nasłuchiwał na odpowiednim porcie, a odebrane dane od razu zapisał na dysk.

[root@solkar /]# nc -l 5000 | dd of=/dev/sdb

Dzięki temu odbierzemy dane z komputera i zapiszemy je od razu na drugim dysku. Następnie będziemy mogli go zamontować, wraz ze wszystkimi partycjami jakie są na źródłowej maszynie. Po stronie maszyny, której chcemy wykonać kopię zapasową, również uruchamiamy program netcat, który wyśle kopię zapasową dysku:

[root@ashley /]# dd if=/dev/sda | nc solkar 5000

Po zakończonym kopiowaniu na ekranie pojawi się wynik polecenia dd, a połączenie zostanie zakończone.

10484997+1391 records in
10485760+0 records out
5368709120 bytes (5.4 GB) copied, 1136.88 s, 4.7 MB/s

Urozmaicenia

Podczas kopiowania dużej ilości danych przydałaby się kompresja. Możemy do znanych nam już poleceń wplątać program gzip. Wydajemy polecenia odpowiednio na maszynach: docelowej oraz źródłowej.

[root@solkar /]# nc –l 5000 | gzip –df | dd of=/dev/sdb
[root@ashley /]# dd if=/dev/hda | gzip -cf | nc solkar 5000

Ponieważ polecenie dd kopiuje każdy sektor dysku, wolne miejsce w systemie plików skopiuje również. Sektory takie zawierać będą różne dane, typowy bałagan. Ponieważ jego kompresja będzie bardzo niewydajna, warto puste miejsce na dysku zapisać samymi zerami, które mają zdecydowanie lepszy współczynnik kompresji. Posłuży nam do tego polecenie:

dd if=/dev/zero of=/tmp/plik-z-zerami; rm /tmp/plik-z-zerami

Plik taki zapełni całe dostępne wolne miejsce na partycji (zapisze puste sektory samymi zerami).

Dzięki aplikacji Pipe Viewer, możemy obejrzeć postęp kopiowania danych z maszyny na maszynę.

[root@solkar /]# nc -l 5000 | pv -bp | dd of=/backup/backup.iso                                ]
 4.6GB [                         <=>                                                           ]

Dzięki poleceniu dd oraz nc, możemy w prosty sposób wykonać kopię dysków oraz partycji poprzez sieć.