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