私は組み込みLinux用に開発中です。パーティションを自動的に回復するbashスクリプトを作成したいと思います。
キーがマウントポイントであり、値がマウントされるデバイスである連想配列を宣言しました。
私の質問は、デバイスに異なるファイルシステムがある可能性があるため、fsck
正しいバージョンを選択する必要があることです。
各ファイルシステムには、fsck
などの独自のバリエーションがあります。fsck.vfat
fsck.ext4
正しいバリアントが呼び出されるように、何らかの方法でこれをループにインポートする必要があります。残念ながら、主な亜種は、fsck
私の設定でファイルシステムの自動回復または検出を提供しません。
だから本当の質問はここでルックアップテーブルを持つ方法です。
declare -A arrPartitionsToCheck=(
[/run/media/my-backup]="/dev/sda1" # vfat
[/run/media/my-data]="/dev/sdb1" # ext4
)
for part in "${!arrPartitionsToCheck[@]}"; do
# Unmount
# umount /dev/sda1
umount "${arrPartitionsToCheck[$part]}"
# Select the right variant of FSCK and repair automatically
fsck.vfat -a "${arrPartitionsToCheck[$part]}"
# Mont Again! For example
# mount /dev/sda1 /run/media/my-backups
mount "${arrPartitionsToCheck[$part]}" "$part"
done
ベストアンサー1
からファイルシステムの種類を取得できますlsblk
。たとえば、私のコンピュータでは次のようになります。
$ lsblk -o PATH,FSTYPE
PATH FSTYPE
/dev/mapper/home ext4
/dev/nvme0n1
/dev/nvme0n1p1 vfat
/dev/nvme0n1p2
/dev/nvme0n1p3 BitLocker
/dev/nvme0n1p4 ntfs
/dev/nvme0n1p5 ext4
/dev/nvme0n1p6 crypto_LUKS
/dev/nvme0n1p7 swap
したがって、これを念頭に置いて、次のことを行うことができます(データを正しくインポートする値がない場合は、値を追加するために後処理を実行する必要がありました)。
#!/bin/bash
declare -A arrPartitionsToCheck=(
[/run/media/my-backup]="/dev/sda1" # vfat
[/run/media/my-data]="/dev/sdb1" # ext4
)
## store the file system types
declare -A fileSystems="( $(lsblk -o PATH,FSTYPE | awk 'NF==1{$2="."}1' ) )"
for part in "${!arrPartitionsToCheck[@]}"; do
device=${arrPartitionsToCheck[$part]}
fstype=${fileSystems[$device]}
# Unmount
# umount /dev/sda1
umount "${arrPartitionsToCheck[$part]}"
# Select the right variant of FSCK and repair automatically
fsck."$fstype" -a "${arrPartitionsToCheck[$part]}"
# Mont Again! For example
# mount /dev/sda1 /run/media/my-backups
mount "${arrPartitionsToCheck[$part]}" "$part"
done