Мне известно, что я могу использовать команду cryptsetup isLuks
, чтобы узнать, является ли раздел контейнером LUKS. Я хочу использовать эту команду с точкой монтирования контейнера LUKS для случая, когда я не могу быть уверен, что знаю имя устройства раздела, как я могу сделать это с помощью одной команды?
Например, У меня есть контейнер Luks в /dev/sda2
, я открываю его с помощью
$ crypsetup luksOpen /dev/sda2 vault
Затем я монтирую контейнер с
$ mount /dev/mapper/vault /mountpoint
В этот момент я хотел бы знать, есть ли /mountpoint
является контейнером Luks
$ cryptsetup isLuks -v /dev/sda2
Command successful.
$ cryptsetup isLuks -v /mountpoint
Command failed with code 15: Block device required
$ cryptsetup isLuks -v /dev/mapper/vault
Command failed with code 22: Device /dev/mapper/vault is not a valid LUKS device.
Обычно я использовал бы lsblk
, чтобы получить блочное устройство точки монтирования, но это возвращает путь /dev/mapper/vault
.
└─sda2 8:8 0 9.3G 0 part
└─vault 252:0 0 9.3G 0 crypt /mountpoint
Если бы я мог как-то разрешить /dev/mapper/vault
- /dev/sda2
, я бы мог использовать подстановку команд внутри команды cryptsetup isLuks
.
Было бы замечательно найти что-то более элегантное, чем использовать awk
или что-то для разбора выходных данных mount
, но если это единственный способ, то это работает, я полагаю.
Это должно сработать. Это немного долго, но создание функции bash упростит это:
cryptsetup isLuks -v `df /mountpoint | tail -n1 | awk '{print $1;}'`
У меня была такая же проблема. Решается так.
lsblk -sJp | jq -r --arg dsk "/dev/mapper/disk_name" '.blockdevices | .[] | select(.name == $dsk) | .children | .[0] | .name'
Возврат, например. /dev/sda2