Aby utworzyć kopię dysku, możemy posłużyć się wieloma narzędziami: od tego co mamy dostępne “out of the box”, np. dd czy cp po prawdziwy kombajn, jakim jest Clonezilla (która w istocie jest tylko interfejsem dla programów takich, jak partimage, dd i innych).

Spora część osób, które wykonują pod Linuksem obrazy partycji lub całych dysków, staje jednak w pewnej chwili przed problemem: jak odtworzyć obraz, jeśli docelowa partycja jest mniejsza od źródłowej? Narzędzia podane wyżej nie pozwolą na taką sztuczkę. Nawet jeśli dane mogą się zmieścić, program i tak powie, że docelowy dysk jest za mały. Tu z pomocą przychodzi program FSArchiver, który wydawany jest na licencji GPLv2.

Aplikacja jest wciąż w stadium intensywnego rozwoju, więc nie powinno się jej wykorzystywać do backupu bardzo ważnych danych. Aplikacja wspiera kompresję lzo, gzip, bzip2, lzma oraz możliwość zaszyfrowania kopii zapasowej za pomocą algorytmu blowfish pobranego z biblioteki libcrypto.

Program pracuje na poziomie plików (a nie bloków), więc podczas tworzenia kopii “widzi” wyłącznie dane. Z kolei podczas odtwarzania zapisuje pliki tak długo, jak długo wystarczy wolnego miejsca. Co ciekawe, jeśli jakiś plik w archiwum okaże się uszkodzony, zostanie on po prostu pominięty, a proces odtwarzania danych nie będzie przerwany.

Ciekawą funkcją jest także obsługa wielowątkowości: jeśli dysponujemy wielordzeniowym procesorem, można zmusić program do utworzenia osobnych zadań na każdy rdzeń, co pozwala na wykorzystanie całej dostępnej mocy procesora.

Archiwum można również podzielić na mniejsze części, np. jeśli chcemy nagrać je potem na płyty albo jeśli partycja, na której zapisujemy nasze archiwum, nie obsługuje większych plików (jak ma to miejsce w przypadku systemu plików FAT32). Wspierane jest wiele systemów plików wraz z ich atrybutami. Podczas odtwarzania kopii zapasowej, aplikacja przywraca również prawa i atrybuty (w tym również i te używane przez SELinuxa). Nie jest możliwe wykonanie za to backupu snapshotów dostępnych w systemie plików btrfs.

Jak tego używać?

Składnia programu wygląda następująco i jest bardzo dobrze opisana w artykule QuickStart na stronie aplikacji.

fsarchiver [<opcje>] <polecenia> <archiwum> [<part1> [<part2> [...]]]

Wybrane polecenia:

  • savefs – zapisuje partycję do pliku archiwum
  • restfs – odtwarza partycję z podanego archiwum
  • savedir – tworzy archiwum ze wskazanego folderu
  • restdir – odtwarza dane ze zarchiwizowanego folderu

Wybrane opcje:

  • -v – tryb verbose
  • -e – wyłącza wskazane pliki/foldery z archiwizacji
  • -z – poziom kompresji od 1 (najszybsza) do 9 (najlepsza); domyślnie wynosi 3
  • -s – podział archiwum na części
  • -j – włączenie wielowątkowości

Przykładowe zastosowanie

  1. Zapis pojedynczej partycji do archiwum: fsarchiver savefs /mnt/backup/kopia1.fsa /dev/sda1
  2. Zapis dwóch partycji: fsarchiver savefs /mnt/backup/kopia2.fsa /dev/sda1 /dev/sda2
  3. Odtworzenie jedynie pierwszej partycji z archiwum (partycje w archiwum są indeksowane od 0): fsarchiver restfs /mnt/backup/kopia2.fsa id=0,dest=/dev/sda1
  4. Odtworzenie dwóch partycji z archiwum: fsarchiver restfs /mnt/backup/kopia2.fsa id=0,dest=/dev/sda1 id=1,dest=/dev/sda2
  5. Zapis partycji do archiwum i podział na części po 700 MB: fsarchiver savefs -s 700 /mnt/backup/kopia1.fsa /dev/sda1
  6. Zapis partycji z wyłączeniem pliku pagefile.sys: fsarchiver savefs /mnt/backup/kopia1.fsa /dev/sda1 -e pagefile.sys
  7. Zapis partycji z wykorzystaniem wielowątkowości: fsarchiver -j2 -o savefs /mnt/backup/kopia1.fsa /dev/sda1
  8. Zapis zawartości /home/user1/documents do archiwum: fsarchiver savedir /mnt/backup/documents.fsa /home/user1/documents
  9. Przywrócenie powyższego archiwum do katalogu /home/user2/kopia: fsarchiver restdir /mnt/backup/documents.fsa /home/user2/kopia

Uwagi odnośnie użytkowania

  • Nawet jeśli archiwum zawiera tylko jedną partycję, podczas przywracania należy podać jej id=0
  • Docelowa partycja musi istnieć i posiadać odpowiedni system plików. Program nie odtworzy obrazu na nieprzydzielone miejsce i nie utworzy takiego systemu plików, jaki był na partycji źródłowej (ale poradzi sobie z zapisaniem np. na EXT3 archiwum “zdjętego” z NTFS)
  • Wygodnie jest podać opcję -v: fsarchiver -v savefs /mnt/backup/kopia1.fsa /dev/sda1. Dzięki temu będziemy widzieć postęp działania. W przeciwnym wypadku program podczas pracy nie odpowiada i dopiero po zakończeniu wyświetla podsumowanie.
  • Program nie obsługuje potoków (stdin/stdout). Developerzy twierdzą, że z racji posiadania wbudowanych narzędzi do kompresji i szyfrowania nie jest to priorytet, ale właśnie przez brak tej funkcji fsarchiver nie został włączony do Clonezilli.
  • Opcji -e (--exclude) można używać zarówno podczas tworzenia, jak i odtwarzania archiwum. Jeśli podamy -e sbin, program pominie /sbin, /usr/sbin, /usr/local/sbin itd, ale w przypadku -e /sbin pominięty będzie tylko podany folder.
  • Dopuszczalne jest stosowanie gwiazdek: "-e '*.[ch]'" spowoduje pominięcie “*.c” oraz “*.h”. Większą liczbę plików do pominięcia definiujemy następująco: -e pagefile.sys -e '*.tmp' -e /var/tmp

Jak to wygląda w praniu?

Teraz pora na kawałek praktyki, czyli utworzenie kopii dysku, a następnie odtworzenie jej. Załóżmy że, mamy zrobić kopię dysku, na którym znajdują się dwie partycje: /dev/sda1 oraz /dev/sda2. Uruchamiamy system działający jako LiveCD (choćby SystemRescueCD). Mamy oczywiście podłączony jakiś zewnętrzny dysk na naszą kopię, który zamontujemy jako /mnt/backup i utworzymy na nim folder kopia1.

Teraz pora na rozpoczęcie backupu. Powiedzmy że będziemy chcieli widzieć postęp pracy programu (opcja -v) oraz zechcemy podzielić obraz na części po 4000 MB do nagrania na płyty DVD (opcja -s). Jako że jest to kopia konkurencyjnego systemu, chcemy też pominąć plik pagefile.sys (opcja -e). Polecenie wygląda tak:

fsarchiver -v savefs -s 4000 /mnt/backup/kopia1/kopia.fsa /dev/sda1 /dev/sda2 -e pagefile.sys

Program rozpoczyna pracę; oto przykładowy fragment postępu:

-[00][  3%][REGFILEM] /I386/ZCOREM.DL_
-[00][  3%][REGFILEM] /I386/ZEEVERM.DL_
-[00][  3%][REGFILE ] /I386/ZIPFLDR.DL_
-[00][  3%][REGFILEM] /I386/ZNETM.DL_
-[00][  3%][REGFILEM] /I386/ZONECLIM.DL_
-[00][  3%][REGFILEM] /I386/ZONELIBM.DL_
-[00][  3%][REGFILEM] /I386/ZONEOC.DL_
-[00][  3%][REGFILEM] /I386/_DEFAULT.PI_
-[00][  3%][REGFILE ] /IO.SYS
-[00][  3%][REGFILE ] /MSDOS.SYS
-[00][  3%][REGFILEM] /NTDETECT.COM
-[00][  3%][REGFILE ] /NTLDR
-[00][  3%][DIR     ] /OpenOffice
-[00][  3%][DIR     ] /OpenOffice/licenses
-[00][  3%][REGFILE ] /OpenOffice/licenses/license_pl.html
-[00][  3%][REGFILE ] /OpenOffice/licenses/license_pl.txt
-[00][  4%][REGFILE ] /OpenOffice/openofficeorg1.cab
-[00][  4%][REGFILE ] /OpenOffice/openofficeorg32.msi
-[00][  4%][DIR     ] /OpenOffice/readmes
-[00][  4%][REGFILE ] /OpenOffice/readmes/readme_pl.html
-[00][  4%][REGFILE ] /OpenOffice/readmes/readme_pl.txt
-[00][  4%][DIR     ] /OpenOffice/redist
-[00][  4%][REGFILE ] /OpenOffice/redist/vcredist_x64.exe
-[00][  4%][REGFILE ] /OpenOffice/redist/vcredist_x86.exe
-[00][  4%][REGFILE ] /OpenOffice/setup.exe
-[00][  4%][REGFILEM] /OpenOffice/setup.ini

Po zakończeniu wyświetla się podsumowanie:

Statistics for filesystem 0
* files successfully processed:....regfiles=238, directories=3, symlinks=0, hardlinks=0, specials=0
* files with errors:...............regfiles=0, directories=0, symlinks=0, hardlinks=0, specials=0

Obraz dysku jest gotowy. Pora na jego przywrócenie. Po uruchomieniu systemu live z naszym programem montujemy dysk z backupem i wydajemy polecenie:

fsarchiver -v restfs /mnt/backup/kopia1/kopia.fsa id=0,dest=/dev/sda1 id=1,dest=/dev/sda2

Po zakończeniu zobaczymy analogiczne podsumowanie, po czym można zrestartować komputer i cieszyć się odzyskanym systemem.

  • Pingback: Fsarchiver – backup z poziomu konsoli - Posix, GNU, Linux, BSD, Unix, Open Source…()

  • Gawron

    Bardzo fajny artykuł. Wszystkie najważniejsze informacje opisane w prosty i przejrzysty sposób. Partimage przestał być rozwijany i teraz do tworzenia kopii zapasowej partycji ext4 można użyć jedynie fsarchiver lub partclone. Dzięki temu opisowi zapis i odtwarzanie partycji stały się równie łatwe jak w partimage. Dziękuję.

  • hello_world

    <code>oper_save.c#947,filesystem_mount_partition(): filesystem of partition [/dev/sdb1] is not supported by fsarchiver: filesystem=[vfat]</code>

    Niestety tego jeszcze trochę jest na kompach. Cieszy że jest implementacja ntfs

    • Gość

      Czy FSArchiver potrafi odtworzyć obraz partycji po zmniejszeniu partycji po backup-ie?

    • Marcin

      Tak, sam testowałem taką możliwość.
      Zainstalowałem system, stworzyłem kopię Boot loadera (przy pomocy dd) i kopię partycji C z WinXP (za pomocą fsarchiver). Wyzerowałem dysk dla całkowitej destrukcji danych, po zerowaniu stworzyłem nowy układ partycji z tym że teraz dysk C był mniejszy niż poprzednio, odtworzyłem z kopii boot loader, odzyskałem dane w kopii partycji, po restarcie całkiem świeżutki system ze wszystkimi ustawieniami i programami jakie miałem w momencie wykonywania kopii dysku C.

  • muser

    Kilka lat temu próbowałem go użyć i były problemy z polskim Windowsem (wtedy chyba XP to był), katalogi zostały przywrócone z krzaczkami zamiast polskich liter i całość nie nadawała się za bardzo do użycia. Nie wiem, czy w tej materii są postępy…