Tôi đang viết một cài đặt tự động tùy chỉnh bằng AIF (Khung cài đặt Arch) và tôi cần tìm hệ thống tệp trên một phân vùng được cung cấp một phân vùng.
Cho đến nay tôi có điều này:
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}
}
Điều này hoạt động tốt trên máy của tôi chỉ với một ổ cứng, nhưng nó đã thất bại (rõ ràng) khi chạy trong VM của tôi chạy trên LiveCD (LiveCD đang được chọn là một ổ đĩa khác, / dev / sr0).
Tôi đã nghĩ về một vài hack tôi có thể thử:
mount $partition; grep $partition /etc/mtab | awk ...
- sử dụng
parted -mls
, nhưng rút ra phân vùng tôi quan tâm với kịch bản thông minh, sau đó phân tích cú pháp như tôi đã làm trong scriptt
Có cách nào tốt hơn, đơn giản hơn để làm điều này? Tôi đã có các phân vùng mà tôi quan tâm và tôi chỉ cần tìm hệ thống tập tin của họ (cũng như tìm kiếm trao đổi có sẵn).