GRUB2 and systemd present a major change for Linux boot options in Red Hat Enterprise Linux 7 and SUSE Linux Enterprise Server, including a change in how admins troubleshoot a server that doesn't boot properly and requires essential recovery tasks.
When a Linux server boots, it first reads the GRUB2 configuration to discover which disk contains the root file system, as well as where to find the kernel and initramfs. If something is configured incorrectly, the system administrator must change the settings to allow the server to boot properly.
To do so, press the Escape key when GRUB2 loads to see available boot options. Select the option you want to modify and press e to enter the editor mode. This will show all the options that are loaded from the GRUB2 configuration files in /etc/default/grub and /etc/grub.d.
From the Linux boot options menu, select the line that you want to edit. Often, this is the line that loads the kernel. Some of the most important boot options have changed in RHEL 7 and SUSE LES. Systemd.units, or collections of systemd services that need to be started, replace runlevels, rescue mode and emergency mode.
Systemd.units provide many services for Linux boot options. And there are a few key systemd.unit services that all Linux administrators must know:
- rescue.target: Rescue mode, which loads all the services needed for a fully operational system, but no network services or other non-essential services. It is comparable to runlevel 1 from the init boot procedure.
- emergency.target: A minimal mode in which almost nothing is loaded. You'll have a root file system, but very few services. This target can be compared to passing the init=/bin/bash mode when starting on an init-based server.
- multi-user.target: Replaces the runlevel 3. It is the basic mode a server starts in by default.
- graphical.target: The new version of runlevel 5 that starts all services as well as the graphical interface.
- poweroff.target: The old runlevel 0, which shuts down the server.
- reboot.target: The old runlevel 6, which reboots a server.
To specify which targets to use during boot, pass them as an argument to the GRUB2 line that loads the kernel. To do this, you should either specify systemd.unit=emergency.target, or add the name of the target you want to start to the end of the line that loads the kernel.
To enter any of these targets, use the systemctl command -- as in systemctl isolate reboot.target. Distribution vendors keep the old commands operational to simplify the process. So if you cannot get accustomed to the new way of working, the telinit 6 command will work.
When you finish applying modifications to the line from the GRUB menu, use Ctrl-X to boot. Once in a specific mode, like emergency mode, type the systemctl command to find out which systemd services started. This provides an overview of all loaded services. In emergency.target mode, these will be minimal (see Figure 3).
After troubleshooting, use systemctl, followed by the name of the target you want to go, to restart the normal server state. For example, type systemctl isolate multi-user.target to start the equivalent of runlevel 3.
Changing GRUB2 default settings
If you entered the GRUB2 boot menu to modify the default GRUB2 startup, you should permanently apply them to GRUB2 configuration. Type the command grub2-mkconfig -o /boot/grub2/grub.cfg. This writes the settings you used to boot your server to the default GRUB2 configuration file /boot/grub2/grub.cfg. It only works if your grub configuration contained some real errors.
Change the grub configuration to change the default behavior of GRUB2. Start with the file /etc/default/grub, which contains most of the common GRUB2 settings you had to change. The GRUB_CMDLINE_LINUX line contains every option that your server's kernel starts with by default. Modifying this line applies changes permanently.
Aside from the /etc/grub/default file, there are also files in the /etc/grub.d directory, which rarely require modification.
After applying changes to the GRUB2 configuration files, write them to your system with the grub2-mkconfig -o /boot/grub2/grub.cfg command.