블록 파티션이 주어지면 열려 있는 LUKS 장치를 찾습니다.

블록 파티션이 주어지면 열려 있는 LUKS 장치를 찾습니다.

블록 파티션(예 /dev/sdf3: )이 주어지면 해당 파티션에서 열려 있는 LUKS 장치를 찾고 싶습니다. 예를 들어:

$ some_command /dev/sdf3
/dev/mapper/luks-01234567-89ab-cdef-0123-456789abcdef

또는 파티션에 열려 있는 LUKS 장치가 없으면 아무것도 반환하지 않거나 오류 반환 값을 반환할 수 있습니다.

위의 내용을 달성하기 위해 어떤 명령을 사용할 수 있습니까?

답변1

#!/bin/bash

dev_name="$1"

test -z "$dev_name" && exit 2
test -b "/dev/${dev_name}" || exit 2
test -d "/sys/block/${dev_name}" || exit 2

majmin=$(<"/sys/block/${dev_name}/dev")
cryptsetup isLuks "/dev/${dev_name}" ||
    exit 1 # not correct with external LUKS header
dmsetup table |
    awk -v dev="$majmin" '$4 == "crypt" && $8 == dev { name=$1;sub(":$","",name); print name }'

답변2

당신은 lsblk이 일을 할 수 있나요? 예를 들어:

$ lsblk /dev/sda2
NAME         MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda2           8:2    0 96.9G  0 part  
└─sda2_crypt 253:0    0 96.9G  0 crypt /home

관련 정보