Co je časná podpora kdump?
V předchozích verzích CentOS/RHEL (5/6/7) se služba kdump spouštěla velmi pozdě v zaváděcí sekvenci. Během spouštění se tak ztratí informace o raných haváriích. Po spuštění CentOS/RHEL 8 byl zaveden nový mechanismus kdump nazvaný „časná podpora kdump“, který tento problém řeší. Raný Kdump ukládá vmlinuz a initramfs havarijního jádra do initramfs zaváděcího jádra a načítá je přímo do vyhrazené paměti (crashkernel) během počáteční fáze zavádění.
Balíček „kexec-tools“ má nyní 2 extra moduly pro načtení havarijního jádra a initramfs co nejdříve během zaváděcí sekvence, aby se zachytil výpis z havárie zaváděcího jádra.
/usr/lib/dracut/modules.d/99earlykdump/early-kdump.sh /usr/lib/dracut/modules.d/99earlykdump/module-setup.sh
# dracut --list-modules | grep earlykdump earlykdump
Ve výchozím nastavení je podpora raného kdump zakázána a musíme ji povolit ručně. Podporuje také všechny cíle výpisu a konfigurační parametry podporované dřívějšími konfiguracemi kdump v CentOS/RHEL 5,6,7.
Konfigurace služby kdump
1. V níže uvedeném příspěvku o konfiguraci kdump nakonfigurujte kdump a ujistěte se, že je služba kdump ve stavu spuštěného.
CentOS / RHEL 7 :Jak nakonfigurovat kdump# systemctl enable --now kdump.service
# systemctl status kdump.service ● kdump.service - Crash recovery kernel arming Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled) Active: active (exited) since Mon 2019-08-19 23:42:11 IST; 16h ago Main PID: 1255 (code=exited, status=0/SUCCESS) Tasks: 0 (limit: 26213) Memory: 0B CGroup: /system.slice/kdump.service Aug 19 23:42:09systemd[1]: Starting Crash recovery kernel arming... Aug 19 23:42:11 kdumpctl[1255]: Kdump already running: [WARNING] Aug 19 23:42:11 systemd[1]: Started Crash recovery kernel arming.
2. Uveďte seznam modulů s předčasným výpisem, které jsou k dispozici v system
# dracut --list-modules | grep earlykdump earlykdump
3. Připojte parametr rd.earlykdump na kernelopty řádek v /boot/grub2/grubenv soubor:
# cat /boot/grub2/grubenv # GRUB Environment Block saved_entry=4eb68bf18e86437d9c957ff4863a3288-4.18.0-80.el8.x86_64 kernelopts=root=/dev/mapper/ol-root ro crashkernel=auto resume=/dev/mapper/ol-swap rd.lvm.lv=ol/root rd.lvm.lv=ol/swap rd.earlykdump boot_success=0 ################################################################################################### ################################################################################################### ###################################################################################################
Znovu vytvořit iniramfs
1. Nyní je dalším krokem opětovné vytvoření initramfs pro přidání modulů early-kdump:
# lsinitrd | grep -i early
# dracut -f --add earlykdump
Například:
# lsinitrd |grep -i early Arguments: -f --add 'earlykdump' earlykdump -rwxr-xr-x 1 root root 1940 Jun 17 10:29 usr/lib/dracut/hooks/cmdline/00-early-kdump.sh
2. Restartujte box pro načtení změn
# reboot
3. Jakmile je server opět online, zkontrolujte stav early-kdump:
# journalctl -x |grep -i early-kdump Aug 20 16:08:09 [HOSTNAME] dracut-cmdline[196]: early-kdump is enabled. Aug 20 16:08:10 [HOSTNAME] dracut-cmdline[196]: kexec: loaded early-kdump kernel
Včasné testování-kdump
Nyní otestujeme raný kdump pomocí vlastních souborů systemd unit a vyděsíme se pomocí selhání SysRq.
1. Vytvořte název souboru jednotky /etc/systemd/system/test_early_kdump.service .
# touch /etc/systemd/system/test_early_kdump.service
2. Poskytněte příslušná oprávnění:
# chmod 664 /etc/systemd/system/test_early_kdump.service
Soubor jednotky by měl vypadat takto:
# cat /etc/systemd/system/test_early_kdump.service [Unit] Description=test_early_kdump Service Before=kdump.service [Service] ExecStart=/usr/local/test_early_kdump.sh Type=simple [Install] WantedBy=default.target
3. Poté vytvořte další skript /usr/local/test_early_kdump.sh soubor pro předání příkazu sysrq crash:
# cat /usr/local/test_early_kdump.sh #!/bin/bash /usr/bin/echo c > /proc/sysrq-trigger
4. Poskytněte spustitelné oprávnění pro skript:
# chmod +x /usr/local/test_early_kdump.sh
5. Znovu načtěte démona systemd:
# systemctl daemon-reloadDŮLEŽITÉ :Nespouštějte službu test_early_kdump.service (zhroucení testu), jinak systém okamžitě spadne.
6. Povolte tuto službu test_early_kdump na úrovni spouštění:
# systemctl enable test_early_kdump.service
7. Restartujte systém:
# rebootPoznámka :Při spouštění systému podle vlastního testovacího skriptu spustí selhání a bude se restartovat.
8. Zakažte soubory uživatelských jednotek a skriptů a po testování je odstraňte. Spusťte systém v záchranném režimu pomocí ‘systemd.unit=rescue.target ‘ a zakázat službu ‘test_early_kdump’ při spouštění.
# systemctl disable test_early_kdump.service
Výše uvedený příkaz zakáže soubor uživatelských jednotek. Příště se systém spustí normálně.
Jak nabootovat do záchranného režimu nebo nouzového režimu prostřednictvím Systemd v CentOS/RHEL 7 a 89. Po dokončení zhroucení TEST odeberte soubory uživatelských jednotek a soubor skriptu selhání:
# rm /etc/systemd/system/test_edump.service rm: remove regular file '/etc/systemd/system/test_edump.service'? y
# rm /usr/local/test_early_kdump.sh
10. Zkontrolujte /var/crash/ složku podle kdump.conf (cesta /var/crash) uvedené pro vmcore:
# ls -l /var/crash/127.0.0.1-2019-08-20-17:09:23 total 56648 -rw-------. 1 root root 57959829 Aug 20 17:09 vmcore -rw-r--r--. 1 root root 41452 Aug 20 17:09 vmcore-dmesg.txt