Piszę niestandardową automatyczną instalację za pomocą AIF (Arch Installation Framework) i muszę znaleźć system plików na partycji, na której jest partycja.
Do tej pory mam to:
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}
}
Działa to dobrze na moim komputerze z tylko jednym dyskiem twardym, ale zawiodło (oczywiście) podczas działania na mojej maszynie wirtualnej działającej na LiveCD (LiveCD był odbierany jako inny dysk, / dev / sr0).
Pomyślałem o kilku hackach, które mogłem wypróbować:
mount $partition; grep $partition /etc/mtab | awk ...
- użyj
parted -mls
, ale wyciągnij partycję, na której mi zależy, dzięki sprytnemu skryptowi, a następnie przeanalizuj, jak już to zrobiłem w skryptach
Czy istnieje lepszy, prostszy sposób na zrobienie tego? Mam już partycje, którymi się interesuję, i muszę tylko znaleźć ich systemy plików (jak również znaleźć dostępną wymianę).
command-line
filesystems
system-installation
block-device
beatgammit
źródło
źródło
Odpowiedzi:
Myślę, że znalazłem odpowiedź:
blkid
Ze strony podręcznika:
Najwyraźniej drukuje nazwę urządzenia wraz z typem systemu plików (wraz z kilkoma innymi przydatnymi informacjami). Aby uzyskać listę wszystkich urządzeń z ich typami:
Aby znaleźć wszystkie
/dev/sd*/
urządzenia, po prostu dodaj grep:Więc po prostu
cut
lub,awk
aby uzyskać to, czego potrzebujesz.źródło
blkid -s TYPE -o value /dev/sda3
sudo
jeśli nie jesteś rootem! Ten mnie przyłapał, ponieważblkid
nie drukuje żadnych komunikatów o błędach i wychodzi z kodem stanu 0, jeśli nie może uzyskać dostępu do urządzeń blokowych ...grep
dosed
.grep foo | sed 's/pattern/repl/'
jest bardziej czytelnie napisanesed '/foo/s/pattern/repl/'
file -s /path/to/device
zidentyfikuje system plików na dysku / partycji / plasterku.A la:
przynajmniej w Linuksie tak.
źródło
| cut -d: -f2 | cut -d( -f1
lub coś. Nablkid
pewno nie jest tak ładny . :)Pokaż tylko znacznik TYPE urządzenia blokowego i wyświetl tylko jego wartość:
Przykład:
źródło
Druga opcja, która działa z wieloma systemami plików i ma tę zaletę, że działa nawet z systemami plików, które mają uszkodzone struktury
testdisk
. (Możesz uruchomić,sudo apt install testdisk
aby go zainstalować.)Skryptuj go, aby zwrócić typ systemu plików taki jak ten:
źródło