在我现在使用的发行版 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
答案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
自动解释该设备号。