Miten instansseja pelastetaan?
OpenStack tarjoaa pelastustilan virtuaalikoneiden palauttamiseen. Se on komento, jonka avulla virtuaalikone voidaan käynnistää toisella levykuvalla. Tätä voidaan käyttää, kun virtuaalikone ei käynnisty esimerkiksi kernel panic -virheen, täyden levyn tai kadonneen yksityisen avaimen vuoksi. Kun voit käynnistää toisesta levykuvasta, pystyt liittämään nykyisen levysi, muokkaamaan sen tiedostoja ja korjaamaan ongelman.
Oireet
Kernel panic
Tarkista instanssin konsoliloki (verkkokäyttöliittymä: Instances > <your instance> > Log)
[ 1.041853] Loading compiled-in X.509 certificates
[ 1.043433] Loaded X.509 cert 'CentOS Linux kpatch signing key:ea0413152cde1d98ebdca3fe6f0230904c9ef717'
[ 1.046556] Loaded X.509 cert 'CentOS Linux Driver update signing key:7f421ee0ab69461574bb358861dbe77762a4201b'
[ 1.050310] Loaded X.509 cert 'CentOS Linux kernel signing key:d4115f110055db56c8d605ab752173cfb1ac54d8'
[ 1.053448] registered taskstats version 1
[ 1.055861] Key type trusted registered
[ 1.057771] Key type encrypted registered
[ 1.059249] IMA: No TPM chip found, activating TPM-bypass! (rc=-19)
[ 1.061680] Magic number: 14:548:18
[ 1.063246] ep_81: hash matches
[ 1.064844] rtc_cmos 00:00: setting system clock to 2018-08-23 08:02:54 UTC(1535011374)
[ 1.067954] md: Waiting for all devices to be available before autodetect
[ 1.069982] md: If you don't use raid, use raid=noautodetect
[ 1.072041] md: Autodetecting RAID arrays.
[ 1.073689] md: autorun ...
[ 1.074976] md: ... autorun DONE.
[ 1.076358] List of all partitions:
[ 1.077771] No filesystem could mount root, tried:
[ 1.079600] Kernel panic - not syncing: VFS: Unable to mount root fs onunknown-block(0,0)
[ 1.082286] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 3.10.0-862.11.6.el7.x86_64 #1
[ 1.085033] Hardware name: Fedora Project OpenStack Nova, BIOS 0.5.1 01/01/2011
[ 1.087639] Call Trace:
[ 1.088800] [<ffffffff871135d4>] dump_stack+0x19/0x1b
[ 1.090453] [<ffffffff8710d11f>] panic+0xe8/0x21f
[ 1.091982] [<ffffffff8776c761>] mount_block_root+0x291/0x2a0
[ 1.093704] [<ffffffff8776c7c3>] mount_root+0x53/0x56
[ 1.095394] [<ffffffff8776c902>] prepare_namespace+0x13c/0x174
[ 1.097281] [<ffffffff8776c3df>] kernel_init_freeable+0x1f8/0x21f
[ 1.099244] [<ffffffff8776bb1f>] ? initcall_blacklist+0xb0/0xb0
[ 1.101131] [<ffffffff87101bc0>] ? rest_init+0x80/0x80
[ 1.102813] [<ffffffff87101bce>] kernel_init+0xe/0xf0
[ 1.104497] [<ffffffff871255f7>] ret_from_fork_nospec_begin+0x21/0x21
[ 1.106367] [<ffffffff87101bc0>] ? rest_init+0x80/0x80
[ 1.107997] Kernel Offset: 0x5a00000 from 0xffffffff81000000 (relocation range:0xffffffff80000000-0xffffffffbfffffff)
Loki kertoo, että instanssi ei voinut käynnistyä, koska se ei löydä juuritiedostojärjestelmää: "Kernel panic - not syncing: VFS: Unable to mount root fs onunknown-block(0,0)". Korjaus on käyttää jotakin aiempaa toimivaa ydintä. Koska et voi käynnistää palvelinta, korjaus täytyy tehdä taltiolle (käynnistystiedostoihin) toisen instanssin avulla.
Pääsy evätty
Ongelma voi olla niinkin yksinkertainen kuin:
$ ssh cloud-user@<floating-ip>
cloud-user@<floating-ip>: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
Ongelman korjaaminen, nova rescue
Huomaa, että minkä tahansa ongelman korjaamiseen on yleensä useita tapoja. Tämä UKK on tarkoitettu lähinnä näyttämään yksi tapa korjata tällaisia ongelmia. Vaikka Grubin käynnistysparametreja saa muokata, root-käyttäjän single mode -tila on oletuksena poistettu käytöstä turvallisuussyistä. Pelastuksen suorittaminen tapahtuu seuraavasti:
-
Sinulla täytyy olla asennettuna OpenStackin komentorivityökalut. Sinun täytyy myös kirjautua sisään; katso ohje Määritä terminaaliympäristösi OpenStackia varten.
-
Hae palvelimen tunniste ja tallenna se ympäristömuuttujaan nimeltä
INSTANCE_UUID:$ openstack server list +--------------------------------------+-----------+--------+----------------------------+-------+----------------+ | ID | Name | Status | Networks | Image | Flavor | +--------------------------------------+-----------+--------+----------------------------+-------+----------------+ | 55555566-ffff-4a52-5735-356251902325 | comp1 | ACTIVE | net=192.168.211.211 | | standard.small | +--------------------------------------+-----------+--------+----------------------------+-------+----------------+ -
Hae levykuvan tunniste. Voit tallentaa tunnisteen ympäristömuuttujaan
IMAGE_UUID. Käytä samaa levykuvaa kuin instanssissasi: (Tunniste voi poiketa alla olevasta esimerkistä)$ openstack image list +--------------------------------------+----------------------+--------+ | ID | Name | Status | +--------------------------------------+----------------------+--------+ | 56b70226-0c52-48c6-973f-3f726b5e7dc0 | CentOS-7 | active | | 2d20266d-43f7-499e-b6e6-090b09416b16 | CentOS-7-Cuda | active | | c80adfec-05a8-4c42-8922-4bccdf90df40 | CentOS-8-Stream | active | | 2ca237c5-bd0a-4469-ae9f-20878dd288a9 | Fedora Cloud Base 31 | active | | ee19819d-17d5-4f71-ac38-e024d046eb6a | Ubuntu-18.04 | active | | 668d235f-e6e4-421d-964c-0016f9560206 | Ubuntu-20.04 | active | | aea0bf58-85fb-4f9c-b2ea-ffa6c7a07c02 | Ubuntu-22.04 | active | | 3a9aad67-0f9c-4493-b574-17fe28d40afc | cirros | active | +--------------------------------------+----------------------+--------+ -
Sammuta instanssi:
-
Tarkista, että virtuaalikone on pysäytetty:
Tilan pitäisi olla
SHUTOFF -
Olet nyt valmis käynnistämään instanssin pelastustilan:
-
Varmista seuraavalla komennolla, että instanssi on pelastustilassa:
Tilan pitäisi olla
RESCUE
Yhdistäminen
SSH:lla
Pelastuslevykuva saa samat SSH-avaimet kuin pelastettavassa virtuaalikoneessa on määritetty, joten sinun pitäisi voida muodostaa SSH-yhteys instanssiin samalla käyttäjällä ja IP-osoitteella kuin normaalisti.
Saat tämän varoituksen: WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!. Tämä liittyy niin sanottuihin host keys -avaimiin, jotka tallennetaan virtuaalikoneen levylle ja muuttuvat, koska käynnistät eri levyltä. Korjaa tämä poistamalla instanssisi IP-osoitetta vastaava rivi tiedostosta ~/.ssh/known_hosts. Vaihtoehtoisesti voit suorittaa seuraavan komennon:
Poudan selainkonsolilla (Cirrosilla)
Joissakin tapauksissa, esimerkiksi jos olet kadottanut yksityisen SSH-avaimen, sinun täytyy käyttää Poudan selainkonsolia. Jotta tämä toimisi, sinun täytyy valita yllä olevassa vaiheessa 3 levykuvaksi Cirros.
Kirjaudu Poudan selainkäyttöliittymään: https://pouta.csc.fi. Etsi instanssisi ja napsauta console.

Käyttäjätunnuksen ja salasanan pitäisi näkyä konsolitekstissä kirjautumiskehotteen yläpuolella.
Cirros
Cirros-levykuva on pieni Linux-jakelun levykuva, jossa ohjelmistotuki ja tietoturvapäivitykset ovat rajalliset. Sitä tulisi käyttää vain pelastustoimiin silloin, kun normaali SSH-yhteys ei ole mahdollinen.
Cirros ei tue XFS-tiedostojärjestelmää, jota Almalinux käyttää.
Levyn liittäminen
-
Tarkista, mitä taltioita sinulla on. Jos muita taltioita ei ole liitetty, tuloksen pitäisi näyttää suunnilleen tältä:
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS vda 253:0 0 3.5G 0 disk ├─vda1 253:1 0 2.5G 0 part / ├─vda14 253:14 0 4M 0 part ├─vda15 253:15 0 106M 0 part └─vda16 259:0 0 913M 0 part vdb 253:16 0 80G 0 disk ├─vdb1 253:17 0 79G 0 part ├─vdb14 253:30 0 4M 0 part ├─vdb15 253:31 0 106M 0 part /boot/efi └─vdb16 259:1 0 913M 0 part /boot -
Liitä nyt
vdb1hakemistoon/tmp/mntja siirry siihen hakemistoon:
Käynnistyslataimen (Grub) muokkaaminen
Joskus ongelma voi johtua viallisesta ytimestä. Voit muokata Grubia niin, että käynnistysvalikko näytetään, kun käynnistät koneen.
-
Etsi
boot-osio aiemmin suoritetunlsblk-komennon tulosteesta -
Tässä esimerkissä
boot-osio on/dev/vdb16. Suorita nämä komennot liittääksesi tarvittavat eri taltiot: (root-taltio on jo liitetty. Katso yllä oleva osio Levyn liittäminen) -
Seuraavaksi muokkaamme grubia. Muokattavat tiedostot ovat hieman erilaiset
AlmalinuxissajaUbuntussa:Almalinux
Muuta
GRUB_TIMEOUTarvoksi15(esimerkiksi). Tallenna ja poistu.Ubuntu
Muuta
GRUB_TIMEOUTarvoksi15(esimerkiksi). Tallenna ja poistu.Muuta
GRUB_TIMEOUT_STYLEarvoksimenu. Tallenna ja poistu. -
Nyt on aika päivittää grub tekemillämme muutoksilla. Suorita nämä komennot:
Almalinux
Ubuntu
Nyt voit poistua virtuaalikoneesta ja poistaa pelastustilan käytöstä noudattamalla ohjetta täällä
Kun virtuaalikone käynnistyy, näet käynnistysvalikon ja voit valita toisen ytimen.
Käytä chroot-komentoa /-kansion vaihtamiseen
Jos instanssissasi on ongelmia rikkinäisten pakettien tai ajureiden vuoksi, voit siirtyä alkuperäiseen ympäristöösi ja korjata ongelmat seuraavilla komennoilla:
$ sudo mv /tmp/mnt/etc/resolv.conf{,.bak}
$ sudo cp /etc/resolv.conf /tmp/mnt/etc/resolv.conf
$ sudo chroot /tmp/mnt
chroot on nyt vaihtanut juurikansiosi / hakemistoksi /tmp/mnt/ (virtuaalikoneesi levyosio). Voit tehdä mitä tahansa korjauksia tai muutoksia, kuten poistaa paketin tai asentaa sen uudelleen.
Poistu pelastustilasta
-
Kirjaudu ulos instansseista ja poista instanssin pelastustila käytöstä komennolla
unrescue: -
On hyvä ajatus varmistaa, että uudelleenkäynnistys toimii ytimen uudelleenasennuksen jälkeen:
odota käynnistymistä ja muodosta siihen uudelleen SSH-yhteys:
Sen pitäisi toimia kuten ennen ongelmatilannetta.
Jos instanssisi käynnistyy käynnistettävältä taltiolta
Jos tilanteesi on tämä:
$ openstack server list
+--------------------------------------+-------------------+--------+------------------------------------------------+--------------------------+-----------------+
| ID | Name | Status | Networks | Image | Flavor |
+--------------------------------------+-------------------+--------+------------------------------------------------+--------------------------+-----------------+
| 8bbffd1b-99b2-494a-9501-890db20fc2a7 | machine | ACTIVE | project_200xxxx=192.168.1.0, 123.45.67.89 | N/A (booted from volume) | standard.small |
Voit käynnistää uuden koneen ja liittää taltion siihen tiedostojen muokkaamista varten.
Warning
Ennen koneen poistamista varmista, ettei taltiota poisteta automaattisesti. Voit tarkistaa tämän suorittamalla seuraavan komennon:
-
Poista kone, joka käynnistyy taltiolta
-
Luo uusi kone (käynnistä levykuvasta) ja liitä taltio siihen
-
Liitä Floating IP ja muodosta siihen yhteys
-
Muodosta SSH-yhteys uuteen koneeseen ja tunnista taltio.
vdb1on todennäköisesti etsimäsi osio.$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS vda 253:0 0 80G 0 disk ├─vda1 253:1 0 79G 0 part / ├─vda14 253:14 0 4M 0 part ├─vda15 253:15 0 106M 0 part /boot/efi └─vda16 259:0 0 913M 0 part /boot vdb 253:16 0 20G 0 disk ├─vdb1 253:17 0 19G 0 part ├─vdb14 253:30 0 4M 0 part ├─vdb15 253:31 0 106M 0 part └─vdb16 259:1 0 913M 0 part -
Luo liitospiste ja liitä osio
-
Voit nyt muokata tarvitsemiasi tiedostoja hakemistossa
/tmp/mnt
Kun olet valmis, voit yksinkertaisesti sammuttaa virtuaalikoneen, irrottaa taltion ja käynnistää uuden koneen käynnistettävältä taltiolta.