Estou escrevendo uma instalação automatizada personalizada usando o AIF (Arch Installation Framework) e preciso encontrar o sistema de arquivos em uma partição, dada uma partição.
Até agora eu tenho isso:
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}
}
Isso funcionou bem na minha máquina com apenas um disco rígido, mas falhou (obviamente) ao executar na minha VM executando em um LiveCD (o LiveCD estava sendo escolhido como outra unidade, / dev / sr0).
Pensei em alguns hacks que eu poderia tentar:
mount $partition; grep $partition /etc/mtab | awk ...
- use
parted -mls
, mas retire a partição que me interessa com scripts inteligentes e analise como já faço no scriptt
Existe uma maneira melhor e mais simples de fazer isso? Já tenho as partições em que estou interessado e só preciso encontrar seus sistemas de arquivos (assim como encontrar a troca disponível).