Kopia zapasowa i przenoszenie systemu na inną partycję
: 22 lutego 2008, 21:41
Inspiracją do napisania tego poradnika była dyskusja jaka na temat zaawansowanego przenoszenia systemu miała miejsce w >Tym wątku<. Opisywany poniżej sposób stanowi rezultat moich bezpośrednich testów.
- Najpierw zidentyfikujmy posiadane partycje:
Kod: Zaznacz cały
fdisk -l
dokładny układ partycjiKod: Zaznacz cały
df
ilość zajmowanego miejsca przez zamontowane partycje - Przed przystąpieniem do przenoszenia systemu docelową partycję najlepiej przedtem sformatować a następnie sprawdzić w poszukiwaniu błędów:
Kod: Zaznacz cały
e2fsck -v -f -y /dev/partycja_docelowa
- W przypadku wystąpienia jakichkolwiek nie dających się usunąć (lub powtarzających się) błędów można skorzystać z polecenia, które dokona dokładnego wymazania danych zapisanych na partycji:
Po wyzerowaniu partycji docelowej trzeba na niej ponownie utworzyć system plików:
Kod: Zaznacz cały
dd if=/dev/zero of=/dev/partycja_docelowa
Kod: Zaznacz cały
mkfs -V -c -t ext3 /dev/partycja_docelowa
- Dla lepszej kompresji na partycji źródłowej warto utworzyć pusty plik (wypełniony zerami) o rozmiarze całego niewykorzystanego miejsca. W ten sposób dane, które później będziemy kompresowali będą miały mniejszą wielkość. Krok ten nie jet konieczny, nie przeprowadzamy go również jeśli chcemy od razu przenieść partycję. Jeśli chcesz pominąć ten krok przejdź od razu do punktu 8.
- Obliczamy wielkości pliku z zerami. Zajętość partycji pokaże nam polecenie:
Kod: Zaznacz cały
df -B1 /dev/partycja_źródłowa
Przykładowy wynik:Rozmiar dostępnej wielkości partycji dzielimy przez 512 np.:Kod: Zaznacz cały
System plików bl. 1B B użyte dostępne %uż. /dev/sda1 10840489984 2559406080 7730405376 25%
Kod: Zaznacz cały
7730405376 / 512 = 15098448
- Wynik podajemy jako wartość parametru 'count' dla polecenia dd, które utworzy plik w katalogu głównym klonowanego systemu
Uwaga!
Kod: Zaznacz cały
dd if=/dev/zero of=/plik.zero bs=512 count=15098448
Wartość parametru 'count' dla każdej partycji jest inna. Podane tutaj liczby mają charakter przykładowy. - Po utworzeniu tego pliku po prostu go usuwamy
Kod: Zaznacz cały
rm /plik.zero
- Teraz przechodzimy do właściwego klonowania. Najpierw przy pomocy dd tworzymy obraz partycji źródłowej:
W ten sposób otrzymamy dokładną kopię całej partycji, a nie tylko znajdujących się na niej danych. Plik ten możemy później skompresować, ale by nie tracić na to czasu a przede wszystkim miejsca, lepiej od razu przekierować wynik dd do programu kompresującego:
Kod: Zaznacz cały
dd if=/dev/partycja_źródłowa of=/katalog/kopia_partycji_źródłowej.img
W ten sposób powinniśmy otrzymać plik o wielkości od 40-60% kopiowanej partycji źródłowej. Na istotne zmniejszenie wielkości pliku wynikowego wpływa utworzenie opisywanego wcześniej pliku wypełnionego zerami (patrz punkty 4-7).Kod: Zaznacz cały
dd if=/dev/partycja_źródłowa | gzip > /katalog/kopia_partycji_źródłowej.gz
Uwaga!
Jeśli nie zależy nam na posiadaniu kopii, a chcemy tylko przenieść/sklonować aktualną partycję systemową to posłużymy się poleceniem:Kod: Zaznacz cały
dd if=/dev/partycja_źródłowa of=/dev/partycja_docelowa
- Przywracanie systemu odbywa się przez zdekompresowanie zapisanej kopii i zapisanie jej na partycję docelową:Jeśli wcześniej nie kompresowaliśmy naszej kopii to wystarczy wpisać:
Kod: Zaznacz cały
gzip -dcv /katalog/kopia_partycji_źródłowej.gz | dd of=/dev/partycja_docelowa
Uwaga!Kod: Zaznacz cały
dd if=/katalog/kopia_partycji_źródłowej.img of=/dev/partycja_docelowa
Partycja docelowa nie może być mniejsza niż partycja źródłowa! - Po przywróceniu kopii systemu dokonujemy sprawdzenia spójności zapisanych danych:To polecenie oferuje nam standardowy test, dlatego dla pewności lepiej jest zastosować gruntowne sprawdzenie, które jest przeprowadzone nawet wtedy gdy dysk wydaje się czysty:
Kod: Zaznacz cały
fsck -V -t ext3 /dev/partycja_docelowa
Test powtarzamy tak długo, aż program nie zgłosi nam żadnych błędów.Kod: Zaznacz cały
e2fsck -v -f -y /dev/partycja_docelowa
- W ten sposób udało nam się sklonować/odtworzyć naszą partycję systemową. Jeśli partycja docelowa była dokładnie tej samej wielkości jak partycja źródłowa, to już koniec naszych zmagań. Jeśli jednak partycja docelowa była większa, musimy jeszcze "pokazać" naszemu sklonowanemu systemowi plików prawdziwy rozmiar partycji, na której się znajduje. Standardowo widzi on bowiem dokładnie takie same wartości jak w oryginale. Możemy to sprawdzić wywołując polecenie (przy zamontowanej partycji) df i porównać go z wynikiem fdisk -l. By zlikwidować te niezgodności posłużymy się poleceniem:
Kod: Zaznacz cały
resize2fs -p /dev/partycja_docelowa
- Na koniec ponownie sprawdzamy dane:Przenosząc system na inną partycję musimy jeszcze pamiętać, żeby po sklonowaniu zmodyfikować/dostosować odpowiednio fstab i ustawienia gruba (odwołania do partycji docelowej) oraz, jeśli nie będziemy korzystać z dotychczasowej, położenie partycji /home wraz ze znajdującymi się na niej katalogami użytkowników.
Kod: Zaznacz cały
e2fsck -f -y /dev/partycja_docelowa