
Rozwiązywanie problemów z uruchamianiem systemu operacyjnego na serwerach bez KVM nie jest łatwe. Tworzymy sobie KVM-over-IP za pomocą obrazu przywracającego i maszyny wirtualnej.
W przypadku wystąpienia problemów z systemem operacyjnym , administrator ładuje obraz przywracania i przeprowadza niezbędne prace. Taki sposób doskonale sprawdza się, gdy przyczyna awarii jest znana, a obraz przywracania i zainstalowany na serwerze system operacyjny są z tej samej rodziny. Jeśli przyczyna awarii jest jeszcze nieznana, należy obserwować proces ładowania systemu operacyjnego.
Zdalny KVM
Dostęp do konsoli serwera można uzyskać za pomocą wbudowanych narzędzi, takich jak IPMI lub Intel® vPro™, lub z użyciem zewnętrznych urządzeń nazywanych IP-KVM. Istnieją sytuacje, w których wszystkie wymienione technologie są niedostępne. Jednak to nie koniec. Jeśli serwer można zdalnie zrestartować do obrazu przywracania opartego na systemie operacyjnym rodziny Linux, można szybko zorganizować KVM-over-IP.
Obraz przywracania to pełnoprawny system operacyjny, który jest umieszczany w pamięci RAM. Dzięki temu możemy uruchamiać dowolne oprogramowanie, w tym maszyny wirtualne (VM). Możliwe jest uruchomienie VM, w której będzie działał system operacyjny serwera. Dostęp do konsoli VM można zorganizować, na przykład, przez VNC.
Aby uruchomić system operacyjny serwera wewnątrz VM, należy wskazać dyski serwera jako dyski VM. W systemach operacyjnych rodziny Linux fizyczne dyski są przedstawiane jako urządzenia blokowe typu /dev/sdX, z którymi można pracować jak z zwykłymi plikami.
Niektóre hipernadzorcy, takie jak QEMU i VirtualBox, pozwalają na przechowywanie danych VM w "surowym" formacie, to znaczy tylko dane magazynu bez metadanych hipernadzorcy. Dzięki temu VM można uruchomić przy użyciu fizycznych dysków serwera.
Taki sposób wymaga zasobów do uruchomienia obrazu przywracania i VM w jego wnętrzu. Jednak przy dostępności czterech lub więcej gigabajtów pamięci RAM nie stanowi to problemu.
Przygotowanie środowiska
Jako maszynę wirtualną można użyć lekkiego i prostego programu , który najczęściej nie jest częścią obrazu przywracania, dlatego musi być zainstalowany oddzielnie. Obraz przywracania, który oferujemy klientom, oparty jest na , w którym używany jest menedżer pakietów pacman.
Najpierw należy upewnić się, że obraz przywracania korzysta z najnowszych wersji oprogramowania. Sprawdzenie i zaktualizowanie wszystkich komponentów systemu operacyjnego można wykonać następującą komendą:
pacman -Suy
Po aktualizacji należy zainstalować QEMU. Komenda do instalacji przez pacman będzie wyglądać tak:
pacman -S qemu
Sprawdzimy, czy qemu zainstalowało się poprawnie:
root@sel-rescue ~ # qemu-system-x86_64 --wersja
Wersja emulatora QEMU 4.0.0
Prawa autorskie (c) 2003-2019 Fabrice Bellard i programiści projektu QEMU
Jeśli wszystko jest w porządku, obraz przywracania jest gotowy do pracy.
Uruchomienie wirtualnej maszyny
Najpierw należy zdecydować o liczbie zasobów przydzielanych VM i ustalić ścieżki do fizycznych dysków. W naszym przypadku przydzielimy dwa rdzenie i dwa gigabajty pamięci RAM wirtualnej maszynie, a dyski znajdują się pod ścieżką /dev/sda i /dev/sdb. Uruchomimy VM:
qemu-system-x86_64
-m 2048M
-net nic -net user
-enable-kvm
-cpu host,nx
-M pc
-smp 2
-vga std
-drive file=\/dev\/sda,format=raw,index=0,media=disk
-drive file=\/dev\/sdb,format=raw,index=1,media=disk
-vnc :0,password
-monitor stdio
Nieco bardziej szczegółowo, co oznacza każdy z parametrów:
- -m 2048M — przydzielamy 2 GB pamięci RAM na VM;
- -net nic -net user — dodajemy proste połączenie z siecią przez hipernadzorcę przy użyciu NAT (Network Address Translation);
- -enable-kvm — włączamy pełną wirtualizację KVM (Kernel Virtual Machine);
- -cpu host — mówimy wirtualnemu procesorowi, aby uzyskał pełną funkcjonalność procesora serwera;
- -M pc — typ sprzętu PC;
- -smp 2 — wirtualny procesor powinien być dwurdzeniowy;
- -vga std — wybieramy standardową kartę graficzną, która nie obsługuje dużych rozdzielczości ekranu;
- -drive file=\/dev\/sda,format=raw,index=0,media=disk
- file=\/dev\/sdX — ścieżka do urządzenia blokowego, reprezentującego dysk serwera;
- format=raw — oznaczamy, że w wskazanym pliku wszystkie dane są w „surowej” postaci, to znaczy jak na dysku;
- index=0 — numer dysku, powinien zwiększać się o jednostkę dla każdego następnego dysku;
- media=disk — wirtualna maszyna powinna rozpoznać tę pamięć jako dysk;
- -vnc :0, password — uruchamiamy serwer VNC domyślnie na 0.0.0.0:5900, jako autoryzację używamy hasła;
- -monitor stdio — komunikacja administratora z qemu będzie odbywać się przez standardowe strumienie wejścia-wyjścia.
Jeśli wszystko jest w porządku, uruchomi się monitor QEMU:
Monitor QEMU 4.0.0 - wpisz 'help' po więcej informacji
(qemu)
Wskazaliśmy, że autoryzacja odbywa się za pomocą hasła, ale nie określiliśmy samego hasła. Można to zrobić, wysyłając komendę change vnc password w monitorze QEMU. Ważna uwaga: hasło nie może mieć więcej niż osiem znaków.
(qemu) zmień hasło vnc
Hasło: ******
Po tym możemy połączyć się z dowolnym klientem VNC, na przykład Remmina, pod adresem IP naszego serwera z podanym przez nas hasłem.


Teraz widzimy nie tylko możliwe błędy na etapie ładowania, ale także możemy z nimi walczyć.
Po zakończeniu prac należy wyłączyć maszynę wirtualną. Można to zrobić zarówno wewnątrz systemu operacyjnego, wysyłając sygnał do wyłączenia, jak i wydając polecenie system_powerdown w monitorze QEMU. Będzie to równoważne naciśnięciu przycisku wyłączenia: system operacyjny wewnątrz maszyny wirtualnej zakończy pracę w sposób płynny.
Instalacja systemu operacyjnego
Maszyna wirtualna ma pełny dostęp do dysków serwera i dlatego może być używana do ręcznej instalacji systemu operacyjnego. Jedynym ograniczeniem jest ilość pamięci RAM: nie zawsze można umieścić obraz ISO w pamięci operacyjnej. Przeznaczymy cztery gigabajty pamięci RAM na przechowanie obrazu w /mnt:
mount -t tmpfs -o size=4G tmpfs /mnt
Zainstalujemy również obraz instalacyjny systemu operacyjnego FreeBSD 12.0:
wget -P /mnt ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/12.0/FreeBSD-12.0-RELEASE-amd64-bootonly.iso
Teraz można uruchomić VM:
qemu-system-x86_64
-m 2048M
-net nic -net user
-enable-kvm
-cpu host,nx
-M pc
-smp 2
-vga std
-drive file=\/dev\/sda,format=raw,index=0,media=disk
-drive file=\/dev\/sdb,format=raw,index=1,media=disk
-vnc :0,password
-monitor stdio
-cdrom /mnt/FreeBSD-12.0-RELEASE-amd64-bootonly.iso
-boot d
Flaga -boot d ustawia bootowanie z napędu CD. Łączymy się klientem VNC i widzimy bootloader FreeBSD.

Z racji, że do uzyskania dostępu do internetu używano adresu DHCP, po konfiguracji może być konieczne uruchomienie właśnie zainstalowanego systemu i poprawienie ustawień sieciowych. W niektórych przypadkach może być konieczna instalacja sterowników karty sieciowej, ponieważ karta sieciowa zainstalowana w serwerze i emulowana w VM różnią się.
Podsumowanie
Taki sposób organizacji zdalnego dostępu do konsoli serwera zużywa część zasobów serwera, jednak nie stawia szczególnych wymagań co do sprzętu serwera, dlatego może być realizowany w praktycznie każdych warunkach. Zastosowanie takiego rozwiązania znacznie upraszcza diagnostykę usterek oprogramowania oraz przywracanie działania zdalnego serwera.
Źródło: habr.com
