Portál AbcLinuxu, 6. května 2025 02:50
# cat kexec-load@.service [Unit] Description=************************************ load %i kernel into the current kernel *************************************** Documentation=man:kexec(8) DefaultDependencies=no Before=shutdown.target umount.target final.target [Service] Type=oneshot ExecStart=/usr/sbin/kexec --load /boot/vmlinuz-%i --initrd=/boot/initrd.img-%i --reuse-cmdline --reset-vga --console-vga --append='root=UUID=c6666e43-97e9-43c8-8635-64e83a65af33 ro' [Install] WantedBy=kexec.targetA mám ho enabled. 4.19.0-11-amd64 je můj stávající, běžící, fungující kernel.
# systemctl enable kexec-load@4.19.0-11-amd64.service Created symlink /etc/systemd/system/kexec.target.wants/kexec-load@4.19.0-11-amd64.service → /etc/systemd/system/kexec-load@.service.Restart pomocí kexec nefunguje, protože se můj unit kexec-load@4.19.0-11-amd64.service nespustí. Restartuje se to normálním způsobem. Takže jsem vytvořil druhý unit, až na detaily úplně stejný, jako ten předchozí, který ovšem nepoužívá service template.
# cat kexec-load-kernel.service [Unit] Description=........................... load %v kernel into the current kernel ........................................ Documentation=man:kexec(8) DefaultDependencies=no Before=shutdown.target umount.target final.target [Service] Type=oneshot ExecStart=/usr/sbin/kexec --load /boot/vmlinuz-%v --initrd=/boot/initrd.img-%v --reuse-cmdline --reset-vga --console-vga --append='root=UUID=c6666e43-97e9-43c8-8635-64e83a65af33 ro' [Install] WantedBy=kexec.targetService je enabled.
# systemctl enable kexec-load-kernel.service Created symlink /etc/systemd/system/kexec.target.wants/kexec-load-kernel.service → /etc/systemd/system/kexec-load-kernel.service.Nyní by se při restartu systému pomocí výše uvedeného příkazu měly spustit oba dva unity, které by udělaly úplně totéž.
# systemctl list-dependencies kexec.target kexec.target ● ├─kexec-load-kernel.service ● ├─kexec-load@4.19.0-11-amd64.service ● └─systemd-kexec.serviceJenže při rebootu (který ve výsledku poběhne korektně pomocí kexec) se spustí pouze jeden - kexec-load-kernel.service. To znamená, že to takhle jde, ale něco je špatně. Změna pořadí pomocí úpravy Before|After nemá vliv, pořád se spustí jen ten jeden. Takže otázka zní, co je tam špatně? Proč nefunguje unit template? Templatovaný service unit se prostě vůbec nespustí, ačkoliv má úplně stejné závislosti, jako ten druhý.
Řešení dotazu:
Naveden článkem na root.cz zkouším reboot pomocí kexec. Postupuji podle návodu pro Arch Linux, mám ale Debian. Nechodí to.Oznacil, lebo odpoved riesi tento problem. Skusal som to na legacy boot. UEFI mam primarne na Win, a na select Android.
Očekávám, že příkazem systemctl start kexec.target dojde ke korektnímu ukončení služeb a k restartu systému pomocí kexec.Neviem, ako u Tebe, ale systemctl start kexec.target robi u mna tak ako ocakavas, ze by malo. Otazka, riesis nieco specialne, alebo co chces dosiahunut? Chces spustat vypnutie cez service, a nie cez systemctl start kexec.target?
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.