我正在使用AIF(Arch安装框架)编写自定义自动安装,并且需要在给定分区的分区上找到文件系统。
到目前为止,我有这个:
grok_partitions () {
local partitions=
for label in `ls /dev/disk/by-label | grep "Arch"`
do
if [ $label == "Arch" ]
then
mount_point="/"
else
IFS="-" read base mount <<< "${label}"
mount_point="/${mount}"
fi
local partition=$(readlink -f /dev/disk/by-label/${label})
local part_no=$(echo ${partition} | grep -Po '\d+')
local fs=$(parted -mls | grep "^${part_no}" | cut -d: -f5)
partitions+="${partition} raw ${label} ${fs};yes;${mount_point};target;no_opts;${label};no_params\n"
done
# do the swap
if [ -e /dev/disk/by-label/swap ]
then
local partition=$(readlink -f /dev/disk/by-label/swap)
partitions+="$partition raw swap swap;yes;no_mountpoint;target;no_opts;swap;no_params"
else
# if there's no labeled swap, use the first one we find
local partition=$(fdisk -l | grep -m1 swap | awk '{ print $1 }')
if [ ! -e $partition ]
then
echo "No swap detected. Giving up."
exit 1
fi
partitions+="$partition raw no_label swap;yes;no_mountpoint;target;no_opts;no_label;no_params"
fi
echo -n ${partitions}
}
在只有一个硬盘的机器上,这可以正常工作,但是(显然)在运行在LiveCD上的VM中运行时失败了(显然,LiveCD被作为另一个驱动器/ dev / sr0拾取了)。
我想到了一些可以尝试的技巧:
mount $partition; grep $partition /etc/mtab | awk ...
- 使用
parted -mls
,但是使用聪明的脚本提取我关心的分区,然后像我在脚本中所做的那样进行解析
有没有更好,更简单的方法?我已经有了我感兴趣的分区,我只需要找到它们的文件系统(以及找到可用的交换)。
3
@Mikel不,这个问题着眼于已挂载的文件系统。虽然可以挂载文件系统,然后看看有什么键入的作为搭载,这会比较慢,不稳健,不用于交换的工作,只适用于由正在运行的内核支持的文件系统......
—
吉尔“SO-停止作恶”