/path/to/directory/
暗号化されたボリューム内のすべての深さへのパス。 Bashスクリプトでは、このパスに関連付けられているブロックデバイスが次のものであることを確認する必要があります。移動可能機器。私はアーチLinuxを使用しています。
似たような質問(例:下記の質問やその他の質問)をたくさん見ましたが、適切な答えが見つかりませんでした。
- linux - どのSD *がUSBであるかを確認する方法は? - UnixとLinuxスタックの交換
- bash - /dev/sdXがUSBまたはHDDに接続されているかどうかはどうすればわかりますか? - UnixとLinuxスタックの交換
- mount - USBスティックのデバイスパスをどうやって知ることができますか? - Ubuntuに尋ねる
私が使用するものの例は次のとおりです。
findmnt -n -o SOURCE --target /path/to/directory/
/dev/mapper/luksdev[/@subvolume]
findmnt -D --target /path/to/directory
SOURCE FSTYPE SIZE USED AVAIL USE% TARGET
/dev/mapper/luksdev[/@subvolume] btrfs 4.5T 203.5G 4.3T 4% /path/to/directory
df -P /path/to/directory/ | awk 'END{print $1}'
/dev/mapper/luksdev
--target
(パスが正しいマウントポイントでない場合は、findmntパラメータが必要なように見えます。)
スクリプトが/dev/sda1
次に関連するブロックデバイスを決定できる場合は、さらに一/dev/mapper/luksdev
歩近づきます。
udevadm info --query=all --name=/dev/sda1 | grep ID_BUS | grep "=usb"
E: ID_BUS=usb
しかし、すべてのリムーバブルデバイスがUSBではないとします。そうですか?
ところで、BTRFS関連のアプローチがより簡単になれば満足です。私は確認した:
btrfs - 暗号化されたファイルシステムでルートファイルシステムの物理ブロックデバイスを探しますか? - UnixとLinuxスタックの交換
編集:Vojtech Trefnyの答えによると:
mapper_path=$(findmnt -n -o SOURCE --target /path/to/directory/ | cut -d [ -f 1)
mydev=$(lsblk -sl -o NAME /${mapper_path} | tail -n 1)
drive_name=$(udisksctl info -b /dev/${mydev} | grep "Drive:" | cut -d"'" -f2)
drive_name=$(echo $drive_name | sed -e 's|/org/freedesktop/UDisks2/drives/||')
udisksctl info -d ${drive_name} | grep "\sRemovable:" | cut -d":" -f2 | tr -d "[:blank:]"
答え1
/dev/mapper
パスからディスク名を取得する最も簡単な方法は、デバイスを逆順lsblk
にリストすることです。-s
$ lsblk -sl -o NAME /dev/mapper/<name> | tail -1
sda
ここで最も簡単な方法は、おそらくsysfsでremovable
プロパティをチェックすることです。
$ cat /sys/block/sda/removable
0
ただし、ここではsysfs情報に加えていくつかの追加チェックを実行するUDiskを使用することをお勧めします。したがって、一部のリムーバブルデバイスでは、sysfsが間違っている可能性があると思います。 DBusを使用してbusctl
UDiskと通信したり、udisksctl
grepを使用して出力から通信したりできます。
$ busctl get-property org.freedesktop.UDisks2 /org/freedesktop/UDisks2/block_devices/sda org.freedesktop.UDisks2.Block Drive
o "/org/freedesktop/UDisks2/drives/<drive_name>"
$ busctl get-property org.freedesktop.UDisks2 /org/freedesktop/UDisks2/drives/<drive_name> org.freedesktop.UDisks2.Drive Removable
b false
または
$ udisksctl info -b /dev/sda | grep "Drive:" | cut -d"'" -f2
/org/freedesktop/UDisks2/drives/<drive_name>
$ udisksctl info -d <drive_name> | grep "\sRemovable:" | cut -d":" -f2 | tr -d "[:blank:]"
false