Slow boot issue due to plymouth-quit-wait.service + ubuntu 18.04
Solution 1:
Plymouth is not slowing your boot-up process! Plymouth is responsible for the boot-up splash screen. Please read Plymouth.
It loads the boot-up logo at the beginning of the boot-up process and then waits until the boot-up process has finished so it unloads the splash screen. That is all it does and that is why it has to run in parallel and co-exist throughout the whole boot-up process. It does not delay anything, it just waits.
That is exactly what is happening. No more and no less. Please take a look at the output you added to your question and carefully read the following:
● plymouth-quit-wait.service - Hold until boot process finishes up
How to Verify?
You can verify that plymouth-quit-wait.service
is not holding anything back but the graphical login screen, by running the command:
systemctl list-dependencies --reverse plymouth-quit-wait.service
which will output all the services that depend on plymouth-quit-wait.service
(i.e services that are delayed by plymouth-quit-wait.service
). On a freshly installed Ubuntu system, the output will be like this:
plymouth-quit-wait.service
● └─multi-user.target
● └─graphical.target
Which means only the graphical login screen is configured to wait for the plymouth-quit-wait.service
and nothing else.
On the other hand if you list the services that plymouth-quit-wait.service
is configured to wait for by running the command:
systemctl list-dependencies plymouth-quit-wait.service
the output would be almost every service that should run on boot and the output will look like this:
plymouth-quit-wait.service
● ├─system.slice
● └─sysinit.target
● ├─apparmor.service
● ├─dev-hugepages.mount
● ├─dev-mqueue.mount
● ├─grub-initrd-fallback.service
● ├─keyboard-setup.service
● ├─kmod-static-nodes.service
● ├─plymouth-read-write.service
● ├─plymouth-start.service
● ├─proc-sys-fs-binfmt_misc.automount
● ├─setvtrgb.service
● ├─sys-fs-fuse-connections.mount
● ├─sys-kernel-config.mount
● ├─sys-kernel-debug.mount
● ├─systemd-ask-password-console.path
● ├─systemd-binfmt.service
● ├─systemd-hwdb-update.service
● ├─systemd-journal-flush.service
● ├─systemd-journald.service
● ├─systemd-machine-id-commit.service
● ├─systemd-modules-load.service
● ├─systemd-random-seed.service
● ├─systemd-sysctl.service
● ├─systemd-sysusers.service
● ├─systemd-timesyncd.service
● ├─systemd-tmpfiles-setup-dev.service
● ├─systemd-tmpfiles-setup.service
● ├─systemd-udev-trigger.service
● ├─systemd-udevd.service
● ├─systemd-update-utmp.service
● ├─cryptsetup.target
● ├─local-fs.target
● │ ├─-.mount
● │ ├─systemd-fsck-root.service
● │ └─systemd-remount-fs.service
● └─swap.target
● └─swapfile.swap
This confirms that plymouth-quit-wait.service
is not slowing down anything but just running in parallel waiting for the system to fully boot and then it will hide the boot-up splash screen to bring up the graphical login screen.
To understand more.
Please run the following command in the terminal:
systemd-analyze plot > ~/SystemdAnalyzePlot.svg
Then, look for SystemdAnalyzePlot.svg
in your home directory and run it in the image viewer or the Internet browser. You might need to enlarge the image so that you can read the processes names. It is worth checking and will give you a better understanding on how the boot-up process works.
You can, however, reduce your boot-up time by disabling NetworkManager-wait-online.service
so plymouth has one less process to wait for. This can indeed reduce your boot-up time. To do this please follow the steps in this answer.
Oh... and please leave plymouth alone, it's not the one that makes you wait...it's the one that waits for you.
Solution 2:
I cannot say what else is necessary, but I can maybe give a workaround for you, so that the machine starts faster.
For me the most working solution was to disable the plymouth in grub with
sudo nano /etc/default/grub
and change the line GRUB_CMDLINE_LINUX_DEFAULT
into
GRUB_CMDLINE_LINUX_DEFAULT="noplymouth video=SVIDEO-1:d"
After saving the change you must update the grub with
sudo update-grub
and then restart the machine.