Oversimplified: It's the service that handles starting and stopping of other services, including starting them in the right order after boot. Many people hate it because of astrology and supersticion. Allegedly it's "bloated". But still it has become the standard on many (most?) distros, effectively replacing init.
I like init. It's simple. I like systemd as well. It's convenient. Beyond that i don't have very strong feelings on the matter.
Now that you mention it, I find systemd messing with my DNS settings incredibly annoying as well, so I can't help but agree on that point. At this production system at work, when troubleshooting, I often need to alter DNS between local, local (in chroot), some other server in the same cluster, and a public one. This is done across several service restarts and the occasional reboot. Not being able to trust that resolv.conf remains as I left it is frustrating.
On the newest version of our production image, systemd-resolvd is disabled.
Thank you, Callyral. I didn't know either. But now I'm trying to learn Linux again after 30 years of not touching it, so this is helpful.
If I may ask an additional possibly stupid question (coming from Windows/Mac): as an init system in Linux, after you get past BIOS and POST at power up, is systemd also responsible for the initial OS software boot process (the "bootstrap" or Boot Manager in DOS/Windows) or is that another process altogether?
Or, asked another way, does systemd load the Linux kernel, and if not, what does?
Just so you know, I have no real skin in this game yet; I'm just trying to figure out where systemd starts and stops so that I can follow the [endless] debate, lol.
Or, asked another way, does systemd load the Linux kernel, and if not, what does?
Immediately after the BIOS/POST, the first thing that starts is the boot loader. This is usually a piece of software called GRUB. There's a part of GRUB in the Master Boot Record on the drive, that the loads the rest of GRUB from /boot. /boot has to be a basic partition so that the MBR code can mount it, so for example if you use something a bit fancier (like LVM) then you'll usually have a separate small ext2 or FAT partition just for /boot.
GRUB shows a list of available kernels, and other operating systems (if any are installed), based on a config in /boot.
Once you select a kernel to boot (or wait a few seconds for it to automatically choose the default option), it starts loading the kernel. There is a small disk image called the "initial ramdisk" in /boot, usually with a name like initrd or initramfs. This is a small ramdisk that contains all the drivers needed to mount your root partition - for example, drive drivers (NVMe, SATA, etc), file system drivers (ext4, ZFS, XFS, etc), LVM, RAID drivers if needed, and so on. If the root disk is on an NFS network share (not as common any more, but still doable), it also needs to contain network drivers for your network card. It also contains a few basic utilities, usually provided by BusyBox.
Some Linux distros (such as Debian) build a custom initramfs, whereas others (like Fedora) have a generic one containing all possible drivers.
The initial ramdisk then mounts the root partition and hands control over to the Linux kernel, which starts actually booting the OS. The very first process the kernel starts running is the init process, which these days is usually systemd but can be a different one like sysvinit or runit.
Okay, yeah. This makes much more sense now. I really appreciate it. I've been seeing the GRUB menu in LiveUSB boots but didn't understand that it was part of the initial boot process for general Linux systems (for whatever reason I had it stuck in my head that it was just for USB booting). And you've placed systemd exactly where it makes sense to me as the init process for that OS.
That is extremely helpful. Thank you so much for taking the time to write the entire boot order, because it just got crystal clear for me. Much appreciated!