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

Vivek Satpute vivekonline86 at gmail.com
Thu Aug 7 18:20:35 UTC 2014


Thanks a lot Peter for replying.

I know that */sys/devices/virtual**/block/dm-0  *SysFsPath would get
created by block-layer when corresponding block device gets created.

Actually I am looking for how below dependencies is getting created for LVM
volume by systemd:

[root at host]# 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*
[...]
*SysFSPath=/sys/devices/virtual/block/dm-0*

/dev/rhel_host/root (path of LVM volume) is actually a symbolic link
pointing to /dev/dm-0, then how systemd recognize that device
dev-rhel_host-root.device
follows *sys-devices-virtual-block-dm\x2d0.device ?*


Thanks,
Vivek


On Mon, Jul 28, 2014 at 1:52 PM, Peter Rajnoha <prajnoha at redhat.com> wrote:

> 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
> path.
>
> 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/
> >
>
>
> --
> Peter
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/linux-lvm/attachments/20140807/5a4357fb/attachment.htm>


More information about the linux-lvm mailing list