Как определить, является ли раздел разделом LUKS с точки монтирования?

Мне известно, что я могу использовать команду 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, но если это единственный способ, то это работает, я полагаю.

1
задан 28 May 2019 в 16:33

2 ответа

Это должно сработать. Это немного долго, но создание функции bash упростит это:

cryptsetup isLuks -v `df /mountpoint | tail -n1 | awk '{print $1;}'`
0
ответ дан 28 May 2019 в 16:33

У меня была такая же проблема. Решается так.

lsblk -sJp | jq -r --arg dsk "/dev/mapper/disk_name" '.blockdevices | .[] | select(.name == $dsk) | .children | .[0] | .name'

Возврат, например. /dev/sda2

2
ответ дан 2 January 2021 в 11:47

Другие вопросы по тегам:

Похожие вопросы: