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

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

Я знаю, что можно использовать cryptsetup isLuksкоманду, чтобы узнать, является ли раздел контейнером LUKS. Я хочу иметь возможность использовать эту команду с точкой монтирования контейнера LUKS в случае, если я не уверен, что знаю имя устройства раздела. Как это сделать одной командой?

Например, у меня есть контейнер Luks в /dev/sda2, я открываю его с помощью

$ cryptsetup 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

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

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

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

решение2

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

cryptsetup isLuks -v `df /mountpoint | tail -n1 | awk '{print $1;}'`

решение3

кто-то упомянул использованиеlsblk

Это относительно простой способ, но только если вы это сделаете.

alias lsblk2='lsblk -o type,name,label,partlabel,size,fstype,model,serial,wwn,uuid'

Тогда вывод от lsblk будет иметь много дополнительной полезной информации, и покажет, FSTYPEа crypto_LUKSзатем покажет результирующие разделы внизу. И у вас также будет модель диска и серийный номер для ссылки, которые я нахожу полезными для понимания вещей.

man lsblkи добавьте любые опции после, которые, -oпо вашему мнению, сделают его более полезным для вас.

Я думаю так... получение простого видимого древовидного списка всех дисков, которые Linux видит в данный момент... это самый прямой способ с минимальным набором текста узнать, какие диски/разделы зашифрованы с помощью Luks, по крайней мере, так crypto_LUKSя вижу, используя RHEL 7.9.

решение4

Мне это помогло:

for part in $(lsblk -o NAME -ln | grep -E '^[^loop]'); do
    if cryptsetup isLuks /dev/$part 2> /dev/null; then
        lsblk /dev/$part -ln -o MOUNTPOINT
    fi
done

Команда lsblkимела только NAMEопцию, поэтому мы получим только имя разделов в системе. -lnТакже выход из заголовка и формы дерева, поэтому это чистый список. grepКоманда необязательна, она пропустит проверку разделов цикла, созданных snap. Затем еще один lsblkдля раздела, определенного как LUKS.

Это сложно, но LUKS и cryptsetupработает с разделами, а не с точками монтирования. Если вы собираетесь использовать его внутри скрипта, вы можете создать его как функцию для лучшей практики.

Связанный контент