Saya sedang menulis instalasi otomatis khusus menggunakan AIF (Arch Installation Framework), dan saya perlu mencari sistem file pada partisi yang diberi partisi.
Sejauh ini saya punya ini:
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}
}
Ini bekerja dengan baik pada mesin saya dengan hanya satu hard drive, tetapi gagal (jelas) ketika berjalan di VM saya berjalan pada LiveCD (LiveCD diambil sebagai drive lain, / dev / sr0).
Saya telah memikirkan beberapa peretasan yang dapat saya coba:
mount $partition; grep $partition /etc/mtab | awk ...
- gunakan
parted -mls
, tapi cabut partisi yang saya pedulikan dengan scripting yang pintar, lalu uraikan seperti yang sudah saya lakukan di script
Apakah ada cara yang lebih baik dan lebih sederhana untuk melakukan ini? Saya sudah memiliki partisi yang saya minati, dan saya hanya perlu menemukan filesystem mereka (dan juga menemukan swap yang tersedia).
Jawaban:
Saya pikir saya menemukan jawabannya:
blkid
Dari halaman manual:
Tampaknya ia mencetak nama perangkat bersama dengan tipe sistem file (bersama dengan beberapa informasi berguna lainnya). Untuk mendapatkan daftar semua perangkat dengan tipenya:
Untuk menemukan semua
/dev/sd*/
perangkat, cukup tambahkan grep:Kemudian hanya
cut
atauawk
untuk mendapatkan apa yang Anda butuhkan.sumber
blkid -s TYPE -o value /dev/sda3
sudo
jika Anda tidak root! Yang ini menarik saya karenablkid
tidak mencetak pesan kesalahan dan keluar dengan kode status 0 jika tidak dapat mengakses perangkat blok ...grep
kesed
.grep foo | sed 's/pattern/repl/'
ditulis lebih rapised '/foo/s/pattern/repl/'
file -s /path/to/device
akan mengidentifikasi sistem file pada disk / partisi / slice.A la:
setidaknya, di Linux itu.
sumber
| cut -d: -f2 | cut -d( -f1
atau sesuatu. Ini tidak secantikblkid
, itu sudah pasti. :)Tampilkan hanya tag TYPE perangkat blok, dan hanya tampilkan nilainya:
Contoh:
sumber
Opsi sekunder yang bekerja dengan banyak filesystem dan memiliki manfaat bekerja bahkan dengan filesystem yang memiliki struktur yang rusak
testdisk
. (Anda dapat menjalankansudo apt install testdisk
untuk menginstalnya.)Script untuk mengembalikan hanya tipe sistem file seperti ini:
sumber