如果 /dev/root 丢失,如何确定根设备?

如果 /dev/root 丢失,如何确定根设备?

在我现在使用的发行版 Arch Linux ARM 中,Linux 无需初始 RAM 磁盘即可启动,这意味着内核会完成安装根文件系统的所有工作。此系统安装在 SD 卡上,上面有一个脚本,需要确定其所在文件系统的设备节点。此设备节点可以根据我启动设备的方式而变化(例如,我将其连接到另一个已在运行的设备)。

我可以使用 确定挂载点df -k --output=target ${0} | sed "1d"。要确定源设备,我运行df -k --output=source ${0} | sed "1d"。如果我已启动到 Arch Linux,则最后一条命令的结果会显示/dev/root不存在的当然,在某些系统上,udev 会创建一个/dev/root到真实根设备的符号链接,但我的系统不会这样做。我可以查看内容,/proc/cmdline但在内核正常运行期间它保持不变,所以这意味着它不可靠。

当我得到时/dev/root,我如何确定它所代表的真正底层块设备?

答案1

来自的回答这里的评论非常简单。只需调用:

findmnt -n -o SOURCE /

前提findmnt是存在...

答案2

mount命令将显示:

mount | sed -n 's|^/dev/\(.*\) on / .*|\1|p'

答案3

我发现这篇博文对于在 Linux 中查找根设备和主磁盘非常有帮助。

您需要lsblk安装 CentOS/RHEL 提供的实用程序util-linux。例如,这样的变体将为您提供根设备的磁盘名称:

lsblk -oMOUNTPOINT,PKNAME -rn | awk '$1 ~ /^\/$/ { print $2 }'
sda3

findmnt来自同一个包将为您提供实际的底层根设备名称:

findmnt -oTARGET,SOURCE -rn /
/ /dev/mapper/vg01-lv_root

这两个实用程序的标志将以适合shell 的-P格式为您提供相同的信息:eval

findmnt -oTARGET,SOURCE -Pn /
TARGET="/" SOURCE="/dev/mapper/vg01-lv_root"

lsblk -oMOUNTPOINT,PKNAME -Pn | grep 'MOUNTPOINT="/"'
MOUNTPOINT="/" PKNAME="sda3"

答案4

您可以使用stat /和检查设备主/次设备号,或者借助命令rdev自动解释该设备号。

相关内容