Czym ratować system?
SystemRescueCd - to mini dystrybucja LiveCD bazująca na Gentoo Linux(jądro Linux 2.6.29, serwer X.org w wersji 1.5.3 i odchudzone Xfce), przeznaczona głównie do odzyskiwania danych z uszkodzonych systemów typu Linux, oraz ich "naprawy". Oprogramowanie wydawane jest w dwóch wersjach: dla komputerów PC (x86) oraz PowerPC (PPC), cała dystrybucja obsługuje kodowanie znaków UTF-8 (wszystkie programy zostały skompilowane z USE="unicode"), pozwala na zdalne użytkowanie przy pomocy VNC-server, obsługuje rozszerzone opcje bootowania pozwalające na zaawansowaną konfigurację sieci.
Dystrybucja standardowo obsługuje wiele systemów plików: ext2, ext3, ReiserFS, XFS, JFS, NTFS (ntfs3g), VFAT, btrfs, ISO9660
SystemRescueCD zawiera oprogramowanie niezbędne do naprawy systemu, nadpisania mbr, lub przywrócenia danych najczęściej wykorzystywane pewnie będą narzędzia:
- GParted - program z GUI do edycji partycji
- GNU-Parted - konsolowy program do edycji partycji
- Sfdisk - odmiana fdiska, pozwala zapisać i odczytać obraz tablicy partycji do pliku
- TestDisk - odszukuje zaginione (usunięte itp.) partycje. Obsługuje ReiserFS, NTFS, FAT32, ext2, ext3
- Partimage - pozwala na zapisanie i wczytanie obrazu całej partycji
- FSArchiver - pozwala duplikować partycje (NTFS także)
- Midnight Commander - menedżer plików
- Clam AntiVirus - program antywirusowy
- NTFS-3G - sterownik do obsługi systemu plików NTFS (odczyt i zapis)
- rsync - narzędzie pozwalające przesyłać pliki przez sieć
- MemTest+ - program do testowania pamięci
Niedawno została wydana nowa wersja oznaczona numerkiem 1.20, całość jest uruchamiana z dysku CD (obraz ISO zajmuje ~230MB) lub
można przygotować PenDrive bootowalny.
Opcje bootowania
SystemRescueCD podczas uruchamiania pozwala na dodanie dodatkowych opcji:
- docache - Załaduje cały system do pamięci RAM - dzięki temu, można wyjąć płytę z napędu (znacznie przyspiesza działanie)
- rootpass - Opcja ta pozwala zdefiniować hasło administratora systemu - użyteczne w połączeniu z ssh (czyli coś co nas interesuje - demon SSH jest uruchamiany na starcie systemu)
- dodhcp - Opcja wymusza próbę pobrania adresu dla karty sieciowej z serwera DHCP
- ethx=x.x.x.x - Pozwala ustawić adres IP statycznie
- gateway=x.x.x.x - Pozwala ustawić adres IP serwera DNS
Więcej opcji rozruchowych można podejrzeć naciskając przycisk 'F2'. Użycie parametrów bootowania wygląda następująco:
rescuecd rootpass=password docache
Personalizowanie SystemRescueCD
Jeżeli mamy serwer w zdalnej lokacji, a nie mamy do niego dostępu poprzez KVM, a o dostępie fizycznym możemy tylko pomarzyć (ale mamy tam kogoś kto potrafi włożyć i wyjąć płytkę z napędu CD, ew. zmienić kolejność bootowania) możemy spróbować
utworzyć spersonalizowaną wersję SystemRescueCD pozwalającą nam na uruchomienie systemu w taki sposób, żeby można było na niego się zalogować po SSH.
Na zrobienie własnego obrazu płyty SystemRescueCD są tak naprawdę dwa sposoby, jeden prosty i jeden trudny:
- prosty - Wykorzystać samo LiveCD SystemRescue jakąś maszynę wirtualną (Sun xVM VirtualBox) i narzędzia na dostępne na płycie
- skomplikowany - Wykorzystać obecny system operacyjny i rozpakować obraz ze squashfs - w moim przypadku się to nie udało, bo w Debianie jest po prostu stara paczka (gałąź stabilna) squashfs-tools i nie mogłem rozpakować obrazu z systemem plików
Ale wracając do samego sedna postu, by uczynić SystemRescueCD bootowalne bez dodatkowej interwencji i od razu ze startującym serwerem ssh i znanym hasłem, mamy znów dwie opcje.
- Korzystamy z kluczy SSH
- Wpisujemy hasło roota na stałe i je pamiętamy (rozwiązanie prostsze, lecz mniej bezpieczne)
Jeśli masz mało czasu
Zobacz na końcu artykułu jak to zrobić w wersji 'quick and dirty'
Personalizacja
Ja do całego procesu użyłem VirtualBoxa i zestawi skryptów dostępnych na livecd.
Ustawienia maszyny wirtualnej to:
- Dysk twardy: 3GB
- Pamięć: 1GB
Po uruchomieniu systemu należy wykonać:
- Partycjonowanie dysku:
fdisk /dev/sda i nacisnąć:
- n - utwórz nową partycję
- p - typu primary
- 1 - nr partycji
- [enter] [enter] - ustawienia początku partycji i końca (domyślne)
- Utworzenie systemu plików na dysku:
mkfs.xfs -f /dev/sda1
- A później:
% mount /dev/sda1 /mnt/custom
% sysresccd-custom extract
Spowodują one rozpakowanie obrazu squashfs (trochę to trwa) oraz przygotowanie struktury do utworzenia płyty cd. Jeśli coś jest niejasne zajrzyj na: stronę dokumentacji dotyczącej personalizacji SystemRescueCD.
Skoro mamy już rozpakowany system root, można zająć się częścią właściwą:
Montowanie, chrootowanie i proc
# mount -o bind /proc /mnt/custom/customcd/files/proc
# chroot /mnt/custom/ /bin/bash
Generowanie kluczy serwera i wyłączenie ich generowania na starcie
Uwaga: Tak naprawdę ten krok jest opcjonalny, służy tylko przyspieszeniu startu systemu.
$ ssh-keygen -t rsa1 -b 1024 -f /mnt/custom/customcd/files/etc/ssh/ssh_host_key
$ ssh-keygen -d -f /mnt/custom/customcd/files/etc/ssh/ssh_host_dsa_key
$ ssh-keygen -t rsa -f /mnt/custom/customcd/files/etc/ssh/ssh_host_rsa_key
Dodanie kluczy ssh
Uwaga:
Tutaj znajduje się dokłaadniejszy opis generacji kluczy ssh - polecam przeczytać.
$ mkdir /root/.ssh
ssh-keygen -t dsa
cp /root/.ssh/id_dsa.pub /root/.ssh/authorized_keys
Jeśli klucze są umieszczone w katalogu /root/.ssh to wszystko ;).
Hint: Znacznie lepiej by było stworzyć dedykowanego użytkownika do logowania się po ssh, a rootowi zabronić tego - no ale to niech każdy sobie sam zrobi.
Spakowanie obrazu squashfs i iso
Należy wyjść się z chroota i odmontować niepotrzebne systemy plików:
umount /mnt/custom/customcd/files/proc
oraz rozpocząć tworzenie pliku z głównym systemem plików (squashfs) - to potrwa chwilkę
/usr/sbin/sysresccd-custom squashfs
Po zakończeniu zostanie utworzony plik /mnt/custom/customcd/isoroot/sysrcd.dat.
Dodawanie dodatkowych narzędzi, skryptów, itp.
W tej chwili można dodać do płyty dodatkowe narzędzia i skrypty, wystarczy je skopiować do katalogu "/mnt/custom/customcd/isoroot/". Tylko nie należy przesadzić (płyta ma tylko 700MB pojemności -
du -sh /mnt/custom/customcd/). Dodatkowe informacje jak np automatyczne uruchamianie narzędzi użytkownika są dostępne na stronie projektu.
Ja ze swojej strony polecam skopiowanie kluczy ssh do głównego katalogu nośnika:
cp -a /mnt/custom/customcd/files/root/.ssh /mnt/custom/customcd/isoroot/ssh-keys
Wybór klawiatury
By system starował bez interwencji użytkownika trzeba wybrać domyślną klawiaturę poleceniem:
sysresccd-custom setkmap pl
Generowanie obrazu iso
/usr/sbin/sysresccd-custom isogen mojeRescue
Wersja 'quick and dirty'
Edycja opcji bootowania
Obraz squashfs rozpakowujemy tak samo tylko nie wykonujemy chrootowania i generacji kluczy.
Zamiast generowania całego obrazu kopiujemy go z obecnej płyty:
cp /mnt/cdrom/sysrescd.* /mnt/custom/customcd/isoroot/
A następnie edytujemy plik
/mnt/custom/customcd/isoroot/isolinux/isolinux.cfg
Umieszczając w nim taką dodatkową treść (zmieniając pierwszy wpis):
default rescuecd
append inintrd=initram.igz rootpass=password setkeymap=pl
Następnie należy wygenerować obraz iso:
/usr/sbin/sysresccd-custom isogen my_srcd.
Inne sposoby stworzenia SystemRescueCd z dostępem ssh
- Wykorzystanie właściwości autorun płyty SystemRescuCD - czyli napisanie skryptu podmieniającego klucze ssh (nie powinno być trudne)
- Zmiana hasła roota w chrootowanym systemie oraz wyłączenie możliwości jego generowania na starcie - robienie rzeczy na około
Inne narzędzia pomagające odtworzyć system
Jeśli okazało się, że awaria dotyczy dysku twardego, polecam skorzystanie z narzędzia
Recovery Is Possible dostępnego
tutaj - narzędzie to zawiera chyba większość programów umożliwiających odtworzenie zawartości dysku po jego uszkodzeniu.