Я пишу пользовательскую автоматическую установку с использованием 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}
}
Это работало нормально на моей машине только с одним жестким диском, но не получилось (очевидно) при работе на моей виртуальной машине, работающей на LiveCD (LiveCD был выбран как другой диск, / dev / sr0).
Я подумал о паре хаков, которые я мог бы попробовать:
mount $partition; grep $partition /etc/mtab | awk ...
- использовать
parted -mls
, но вытащить раздел, который мне нужен с умным сценарием, а затем разобрать, как я уже делаю в scriptt
Есть ли лучший, более простой способ сделать это? У меня уже есть разделы, которые меня интересуют, и мне нужно только найти их файловые системы (а также найти доступный своп).
Ответы:
Я думаю, что нашел ответ:
blkid
Со страницы руководства:
По-видимому, он печатает имя устройства вместе с типом файловой системы (вместе с некоторой другой полезной информацией). Чтобы получить список всех устройств с их типами:
Чтобы найти все
/dev/sd*/
устройства, просто добавьте grep:Тогда просто
cut
илиawk
чтобы получить то, что вам нужно.источник
blkid -s TYPE -o value /dev/sda3
sudo
если вы не root! Это поймало меня, потомуblkid
что не печатает никаких сообщений об ошибках и выходит с кодом состояния 0, если не может получить доступ к блочным устройствам ...grep
кsed
.grep foo | sed 's/pattern/repl/'
более четко написаноsed '/foo/s/pattern/repl/'
file -s /path/to/device
идентифицирует файловую систему на диске / разделе / слайсе.А ля:
по крайней мере, в Linux это так.
источник
| cut -d: -f2 | cut -d( -f1
или что-то. Это не так красиво, какblkid
, это точно. :)Показывать только тег TYPE блочного устройства и выводить только его значение:
Пример:
источник
Вторым вариантом, который работает со многими файловыми системами и имеет преимущество работы даже с файловыми системами, которые имеют поврежденные структуры, является
testdisk
. (Вы можете запустить,sudo apt install testdisk
чтобы установить его.)Сценарий, чтобы вернуть только тип файловой системы, как это:
источник