A couple of days ago I was contacted to analyze a newly installed Debian 12 (Bookworm) server which was unable to boot. Instead of booting the Kernel until the login prompt, the boot process was stuck mounting the file systems and failed with the error:
[ TIME ] Timed out waiting for device dev-vglxc-34994.device - /dev/vglxc/34994
[DEPEND] Dependency failed for var-lib-lxc-34994-rootfs.mount - /var/lib/lxc/34994/rootfs
[DEPEND] Dependency failed for local-fs.target - Local File Systems.
And the boot processes fell back to the maintenance mode:
Unfortunately the errors (TIME and DEPEND) are not really helpful. From this output alone there's no way of telling what's causing the problem. However the output reveals that the problem seems to be caused while trying to mount the Logical Volume /dev/vglxc/34994 to the path /var/lib/lxc/34994/rootfs. That's at least some information to continue investigating.
By disabling the relevant file system entry in /etc/fstab (in maintenance mode or by using a Linux live image and mounting the root partition), the server was able to correctly boot until the login prompt.
Once logged into the server, I was able to dig deeper. The errors seen on the console while Debian was trying to boot could also be seen using journalctl --system:
Jul 17 15:10:18 vst-srv23 systemd[1]: Dependency failed for var-lib-lxc-34994-rootfs.mount - /var/lib/lxc/34994/rootfs.
Jul 17 15:10:18 vst-srv23 systemd[1]: Dependency failed for local-fs.target - Local File Systems.
Jul 17 15:10:18 vst-srv23 systemd[1]: local-fs.target: Job local-fs.target/start failed with result 'dependency'.
Jul 17 15:10:18 vst-srv23 systemd[1]: local-fs.target: Triggering OnFailure= dependencies.
Jul 17 15:10:18 vst-srv23 systemd[1]: var-lib-lxc-34994-rootfs.mount: Job var-lib-lxc-34994-rootfs.mount/start failed with result 'dependency'.
First I wanted to make a file system check on the Logical Volume in question - but surprise! The Logical Volume was not showing up at all inside /dev/. As a matter of fact, nothing from the LVM volume group vglxc was shown. Inside /dev/mapper only the volume groups from the OS setup (vg-root and vg-swap) showed up:
root@vst-srv23:~# ls -la /dev/mapper/
total 0
drwxr-xr-x 2 root root 100 Jul 17 15:25 .
drwxr-xr-x 19 root root 3520 Jul 17 15:25 ..
crw------- 1 root root 10, 236 Jul 17 15:25 control
lrwxrwxrwx 1 root root 7 Jul 17 15:25 vst--srv23--vg-root -> ../dm-0
lrwxrwxrwx 1 root root 7 Jul 17 15:25 vst--srv23--vg-swap_1 -> ../dm-1
Where did the volume group vglxc go?!
When, for whatever reason, a volume group is not showing up, it could be temporarily or administratively disabled. To enable/activate a volume group again, the vgchange command is used:
root@vst-srv23:~# vgchange -ay vglxc
/usr/sbin/thin_check: execvp failed: No such file or directory
WARNING: Check is skipped, please install recommended missing binary /usr/sbin/thin_check!
2 logical volume(s) in volume group "vglxc" now active
I did not expect this output at all! The warning shows that a recommended binary is missing - the command /usr/sbin/thin_check. It turns out that this volume group is part of a LVM Thin Pool.
Although there were warnings above, the volume group vglxc was enabled and can now be seen in /dev/:
root@vst-srv23:~# ls -la /dev/vg
vga_arbiter vglxc/
After searching for Debian packages containing that binary /usr/sbin/thin_check it shows that this command is part of the thin-provisioning-tools package. The lvm2 package lists thin-provisioning-tools as a recommended package:
A quick check on that Debian server showed that it was not installed. Let's do this:
root@vst-srv23:~# apt install thin-provisioning-tools
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
thin-provisioning-tools
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 391 kB of archives.
After this operation, 1438 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian bookworm/main amd64 thin-provisioning-tools amd64 0.9.0-2 [391 kB]
Fetched 391 kB in 0s (952 kB/s)
Selecting previously unselected package thin-provisioning-tools.
(Reading database ... 43112 files and directories currently installed.)
Preparing to unpack .../thin-provisioning-tools_0.9.0-2_amd64.deb ...
Unpacking thin-provisioning-tools (0.9.0-2) ...
Setting up thin-provisioning-tools (0.9.0-2) ...
Processing triggers for man-db (2.11.2-2) ...
Processing triggers for initramfs-tools (0.142) ...
update-initramfs: Generating /boot/initrd.img-6.1.0-10-amd64
The installation output reveals that this package (thin-provisioning-tools) does have an effect on the boot process, as the initramfs was updated after the package was installed.
After the logical volume mount was enabled in /etc/fstab and a reboot launched, the server successfully booted and mounted the logical volume /dev/vglxc/34994 to the path /var/lib/lxc/34994/rootfs.
When using LVM Thin Pools and auto-mounting these at boot time (usually using /etc/fstab), your system needs the thin-provisioning-tools or the volume group in question cannot be properly activated during boot - causing your system to fail back to the emergency mode.
In Ubuntu Linux, the package thin-provisioning-tools is usually automatically installed as a recommended package of the lvm2 package. But in Debian Linux, the recommended packages are often/by default not installed. In this situation however it turns out it's not just a recommendation, but rather a necessity.
No comments yet.
AWS Android Ansible Apache Apple Atlassian BSD Backup Bash Bluecoat CMS Chef Cloud Coding Consul Containers CouchDB DB DNS Database Databases Docker ELK Elasticsearch Filebeat FreeBSD Galera Git GlusterFS Grafana Graphics HAProxy HTML Hacks Hardware Icinga Influx Internet Java KVM Kibana Kodi Kubernetes LVM LXC Linux Logstash Mac Macintosh Mail MariaDB Minio MongoDB Monitoring Multimedia MySQL NFS Nagios Network Nginx OSSEC OTRS Office OpenSearch PGSQL PHP Perl Personal PostgreSQL Postgres PowerDNS Proxmox Proxy Python Rancher Rant Redis Roundcube SSL Samba Seafile Security Shell SmartOS Solaris Surveillance Systemd TLS Tomcat Ubuntu Unix VMWare VMware Varnish Virtualization Windows Wireless Wordpress Wyse ZFS Zoneminder