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).
command-line
filesystems
system-installation
block-device
beatgammit
fonte
fonte
Respostas:
Eu acho que encontrei a resposta:
blkid
Na página do manual:
Aparentemente, imprime o nome do dispositivo junto com o tipo de sistema de arquivos (junto com outras informações úteis). Para obter uma lista de todos os dispositivos com seus tipos:
Para encontrar todos os
/dev/sd*/
dispositivos, basta adicionar um grep:Então apenas
cut
ouawk
para obter o que você precisa.fonte
blkid -s TYPE -o value /dev/sda3
sudo
se você não é root! Este me chamou a atenção porqueblkid
não imprime nenhuma mensagem de erro e sai com o código de status 0 se não puder acessar dispositivos de bloco ...grep
parased
.grep foo | sed 's/pattern/repl/'
é escrito de maneira mais limpased '/foo/s/pattern/repl/'
file -s /path/to/device
identificará o sistema de arquivos em um disco / partição / fatia.À la:
pelo menos no Linux ele faz.
fonte
| cut -d: -f2 | cut -d( -f1
algo assim. Não é tão bonito quantoblkid
isso, com certeza. :)Mostrar apenas a tag TYPE do dispositivo de bloco e gerar apenas seu valor:
Exemplo:
fonte
Uma opção secundária que funciona com muitos sistemas de arquivos e tem o benefício de trabalhar mesmo com sistemas de arquivos que possuem estruturas danificadas
testdisk
. (Você pode corrersudo apt install testdisk
para instalá-lo.)Script para retornar apenas o tipo de sistema de arquivos como este:
fonte