ฉันกำลังเขียนการติดตั้งอัตโนมัติแบบกำหนดเองโดยใช้ AIF (Arch Installation Framework) และฉันต้องการค้นหาระบบไฟล์บนพาร์ติชันที่กำหนดพาร์ติชัน
จนถึงตอนนี้ฉันมีสิ่งนี้:
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}
}
สิ่งนี้ทำงานได้ดีบนเครื่องของฉันที่มีฮาร์ดไดรฟ์เพียงตัวเดียว แต่ก็ล้มเหลว (เห็นได้ชัด) เมื่อทำงานใน VM ของฉันที่ทำงานบน LiveCD (LiveCD ถูกเลือกเป็นไดรฟ์อื่น / dev / sr0)
ฉันนึกถึงแฮ็คสองสามอย่างที่ฉันสามารถลองได้:
mount $partition; grep $partition /etc/mtab | awk ...
- ใช้
parted -mls
แต่ดึงพาร์ติชันที่ฉันสนใจด้วยการเขียนสคริปต์ที่ฉลาดแล้วแยกวิเคราะห์ตามที่ฉันทำในสคริปต์แล้ว
มีวิธีที่ดีกว่าง่ายกว่านี้หรือไม่? ฉันมีพาร์ติชั่นที่ฉันสนใจอยู่แล้วและฉันต้องการค้นหาระบบไฟล์ของพวกเขาเท่านั้น (รวมถึงค้นหา swap ที่มี)