Re: [PATCH] libfrog: obtain the actual available device when the root device is /dev/root

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




在 2025/9/10 8:06, Dave Chinner 写道:
> On Tue, Sep 09, 2025 at 07:29:02PM +0800, Wu Guanghao wrote:
>> When starting a Fedora virtual machine using QEMU, if the device corresponding
>> to the root directory is the entire disk or a disk partition, the device
>> recorded in /proc/self/mounts will be /dev/root instead of the true device.
> 
> How does this /dev/root situation occur? My fedora VMs
> show the real root device and not /dev/root in /proc/self/mounts,
> so it's not clear to me why /dev/root is being reported here?
> 
I am using a Fedora 42 Server qcow2 image, and then I convert the image to partitions
and LVM devices using qemu-nbd. Afterwards, I pass through the partition devices and
LVM devices using qemu.

$ lsblk
...
nbd0                  43:0    0   10G   0 disk
├─nbd0p1            43:1    0   500M  0 part
├─nbd0p2            43:2    0   1000M 0 part
└─nbd0p3            43:3    0   8.5G  0 part
  └─systemVG-LVRoot 253:7   0   8.5G  0 lvm

qemu start scripts:

qemu-system-aarch64 \
	 ... \
	 -drive id=root,if=virtio,media=disk,format=raw,file=/dev/systemVG/LVRoot \
	 -drive id=boot,if=virtio,media=disk,format=raw,file=/dev/nbd0p2 \
	 -drive id=efi,if=virtio,media=disk,format=raw,file=/dev/nbd0p1 \

> This smells of a custom boot sequence that is mounting the root
> filesystem on a temporary initramfs /dev/root node (which then gets
> removed once the initramfs is done) rather than using pivot_root to
> move the real root fs into place once the real device nodes have
> been initialised and the root fs mounted using them... 
> 
>> This can lead to the failure of executing commands such as xfs_growfs/xfs_info.
>>
>> $ cat /proc/self/mounts
>> /dev/root / xfs rw,seclabel,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota 0 0
>> devtmpfs /dev devtmpfs rw,seclabel,relatime,size=4065432k,nr_inodes=1016358,mode=755 0 0
>> ...
> 
>>
>> $ mount
>> /dev/sda3 on / type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
>> devtmpfs on /dev type devtmpfs (rw,relatime,seclabel,size=4065432k,nr_inodes=1016358,mode=755)
>> ...
>>
>> $ xfs_growfs /
>> xfs_growfs: / is not a mounted XFS filesystem
>>
>> $ xfs_growfs /dev/sda3
>> xfs_growfs: /dev/sda3 is not a mounted XFS filesystem
>>
>> $ xfs_info /
>> /: cannot find mount point.#
>>
>> So, if the root device is found to be /dev/root, we need to obtain the
>> corresponding real device first.
> 
> IMO, having a bogus device in /proc/self/mounts output is the
> problem that needs to be fixed here. Working around a broken
> /dev/root device in every userspace utility that reads
> /proc/self/mounts does not feel like the right way to address this
> problem.
> 
I have reviewed the source code of the util-linux mount command and the e2fsprogs resize2fs command,
and both of these have logic for checking and handling /dev/root.

> -Dave.




[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux