如何获得给定磁盘ID的磁盘名称?

问题描述 投票:2回答:1

stat系统调用(man 2 stat)返回包含该文件的设备的ID。

在脚本中,可以使用如下方式获得此ID

perl -e 'warn((stat "/tmp")[0])'

给出ID,如何获取磁盘名称,例如/dev/sda2/dev/disk1s1

我想最好以可移植的方式在脚本(bash,perl等)中进行操作,以使其在MacOS和Linux上都能可靠地工作。

bash macos filesystems disk stat
1个回答
0
投票

您可以使用'df'枚举文件系统,并在设备ID和磁盘之间创建映射。回想一下,每条df行将在第一列中列出安装点(/ dev / sda1,...),在第五列中列出安装点。

以下脚本将bash关联数组用于地图,并使用stat -c'%d'提取给定路径的'dev'值。

# Create map dev2fs
function file2dev {
   stat -c '%d' "$1"
# If needed, use Perl equivalent
#    perl -e 'print ((stat($ARGV[0]))[0])' "$1"
}

declare -A dev2fs
while read fs size used available use mount ; do
    id=$(file2dev $mount);
    [ "$id" ] &&  dev2fs[$id]=$fs
done <<< "$(df)"

# Map a file to device
dev=$(file2dev /path/to/file );
echo "Device=${dev2fs[$dev]}"

此外,也可以使用'mount -l'遍历已挂载的文件系统。我不确定MacOS上存在哪一个。

© www.soinside.com 2019 - 2024. All rights reserved.