Ich schreibe eine benutzerdefinierte automatische Installation mit AIF (Arch Installation Framework) und muss das Dateisystem auf einer Partition finden, die einer Partition zugeordnet ist.
Bisher habe ich das:
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}
}
Dies funktionierte auf meinem Computer mit nur einer Festplatte einwandfrei, schlug jedoch (offensichtlich) fehl, wenn ich meine VM auf einer LiveCD laufen ließ (die LiveCD wurde als ein anderes Laufwerk aufgenommen, / dev / sr0).
Ich habe mir ein paar Hacks ausgedacht, die ich ausprobieren könnte:
mount $partition; grep $partition /etc/mtab | awk ...
- benutze
parted -mls
, aber ziehe die Partition, die mir wichtig ist, mit cleverem Scripting heraus und analysiere sie dann, wie ich es bereits im scriptt getan habe
Gibt es einen besseren, einfacheren Weg, dies zu tun? Ich habe bereits die Partitionen, an denen ich interessiert bin, und ich muss nur deren Dateisysteme finden (sowie den verfügbaren Swap finden).