/path/to/directory/
암호화된 볼륨 내의 모든 깊이에 대한 경로입니다. Bash 스크립트에서 이 경로와 연결된 블록 장치가 다음인지 확인해야 합니다.이동할 수 있는장비. 저는 아치 리눅스를 사용하고 있습니다.
비슷한 질문(예: 아래 나열된 질문 및 기타 질문)을 많이 살펴봤지만 적절한 답변을 찾지 못했습니다.
- linux - 어떤 sd*가 USB인지 확인하는 방법은 무엇입니까? - Unix 및 Linux 스택 교환
- bash - /dev/sdX가 USB 또는 HDD에 연결되어 있는지 어떻게 알 수 있나요? - Unix 및 Linux 스택 교환
- mount - USB 스틱의 장치 경로를 어떻게 알 수 있나요? -우분투에 물어보세요
내가 사용하는 것의 예는 다음과 같습니다.
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