Estoy escribiendo una instalación automatizada personalizada usando AIF (Arch Installation Framework), y necesito encontrar el sistema de archivos en una partición dada una partición.
Hasta ahora tengo esto:
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}
}
Esto funcionó bien en mi máquina con solo un disco duro, pero falló (obviamente) cuando se ejecutaba en mi VM ejecutándose en un LiveCD (el LiveCD se estaba recogiendo como otra unidad, / dev / sr0).
He pensado en un par de trucos que podría probar:
mount $partition; grep $partition /etc/mtab | awk ...
- uso
parted -mls
, pero extraiga la partición que me interesa con secuencias de comandos inteligentes, luego analice como ya lo hago en la secuencia de comandos
¿Hay una manera mejor y más simple de hacer esto? Ya tengo las particiones que me interesan, y solo necesito encontrar sus sistemas de archivos (así como encontrar el intercambio disponible).