[linux-lvm] How LVM root volumes gets mounted at boot time ?

Peter Rajnoha prajnoha at redhat.com
Mon Jul 28 08:22:53 UTC 2014

On 07/25/2014 10:50 PM, Vivek Satpute wrote:
> Hi, 
> I am seeing that LVM2 is integrated with systemd framework and so
> accordingly there are many changes in the way how LVM rootfs volume get
> mounted at boot-up time.
> For root LVM volume, LVM create virtual block device
> "/dev/rhel_host/root". And systemd shows following description of this
> device.
> [root at host vivek]# systemctl show dev-rhel_host-root.device
> Id=dev-rhel_host-root.device
> Names=dev-rhel_host-root.device
> Following=sys-devices-virtual-block-dm\x2d0.device
> Description=/dev/rhel_host/root
> *LoadState=loaded*
> *ActiveState=active*
> *SubState=plugged*
> InactiveExitTimestamp=Thu 2014-07-24 15:13:50 IST
> InactiveExitTimestampMonotonic=17789280
> ActiveEnterTimestamp=Thu 2014-07-24 15:13:50 IST
> ActiveEnterTimestampMonotonic=17789280
> ActiveExitTimestampMonotonic=0
> InactiveEnterTimestampMonotonic=0
> CanStart=no
> CanStop=no
> CanReload=no
> CanIsolate=no
> StopWhenUnneeded=no
> RefuseManualStart=no
> RefuseManualStop=no
> AllowIsolate=no
> DefaultDependencies=yes
> OnFailureIsolate=no
> IgnoreOnIsolate=yes
> IgnoreOnSnapshot=yes
> NeedDaemonReload=no
> JobTimeoutUSec=1min 30s
> ConditionTimestampMonotonic=0
> ConditionResult=no
> Transient=no
> *SysFSPath=/sys/devices/virtual/block/dm-0*
> I want to know, 
> 1) How systemd and LVM create above dependency of "/dev/rhel_host/root"
> ? How "/dev/rhel_host/root" gets SysFsPath
> "*/sys/devices/virtual/block/dm-0" ? *

The dm-0 is the actual kernel name of the device and the sysfs item is
created automatically by block layer as for any other block device when
it's created/activated - the kernel name is always used for that sysfs

The /dev/rhel_host/root is just a symlink created in addition to that
(either by udev and driven by udev rule or by LVM directly, but udev is
used by default now and it's the preferred way).

Systemd has access to the list of device kernel names and their associated
symlinks via udev database that systemd reads. The .device systemd units
are created automatically by systemd based on incoming events.

It's possible to set the description via udev rule, but we're not doing this.
So the description you see is in the "systemctl show" output is the default
one added by systemd itself.

> 2) Which is the udev rule/systemd file creates above dependency (seen by
> command "systemctl show dev-rhel_host-root.device").

/lib/udev/rules.d/11-dm-lvm.rules and this line exactly:

# Create symlinks for top-level devices only.
ENV{DM_VG_NAME}=="?*", ENV{DM_LV_NAME}=="?*", SYMLINK+="$env{DM_VG_NAME}/$env{DM_LV_NAME}", GOTO="lvm_end"

That's for all LVs in general. The root LV is specific in a way that it's
activated in initramfs and hence it depends on how the initramfs is handled
in your distro. For example Fedora uses udev-driven dracut for the initramfs
which copies this rule into initramfs image and it activates the root LV directly,
not depending on lvmetad. But some distros may use lvmetad even in initramfs for
the root LV autoactivation (I think it's Arch Linux that does it this way at the
moment). All the /dev content is created by udev.

> 3) How LVM root volume " /dev/rhel_host/root" gets mounted ? Does it
> handled by LVmetaD ?

Mount points are never handled by lvmetad. Lvmetad only handles LVM metadata
caching and LVM volume autoactivation (with the help of udev since lvmetad needs
to know when the underlying device - PV - appears.).

Systemd itself handles mounting - it either reads /etc/fstab and translates
it into .mount systemd units or it uses native .mount systemd unit if they
exist. Systemd then waits for the particular .device unit the .mount unit is
bound to and if the device is present, it mounts it...

> Any suggestions/inputs would be welcome.
> Thanks and Regards,
> Vivek
> _______________________________________________
> linux-lvm mailing list
> linux-lvm at redhat.com
> https://www.redhat.com/mailman/listinfo/linux-lvm
> read the LVM HOW-TO at http://tldp.org/HOWTO/LVM-HOWTO/


More information about the linux-lvm mailing list