Для автоматической расшифровки LUKS разделов и их монтирования можно использовать небольшой bash скрипт, который запускается при старте системы. Код скрипта приведён в статье.
Причина написания этой статьи: "все диски необходимо шифровать!". Это нужно не только на случай утери устройства, но и на случай замены на новое. Зачастую об этом вспоминаешь только после того, как выбросил незашифрованный носитель. После чего молишься, чтобы его на свалке никто никогда не нашёл. Но чтобы шифрование не превратилось в боль, оно должно открываться незаметно...
Далее действия для создания скрипта делаем от лица root пользователя.
Создаём файл /root/luks_passwd пишем пароль для расшифровки тома.
Создаём скрипт /root/luks_unlock, который будет разблокировать и монтировать раздел:
key_file='/root/luks_passwd' # путь к файлу с ключом mount_point='/mnt/files' # точка монтирования UUID='658f0eb8-fdc6-4440-a8fd-46b7bc8ae0ba' # UUID диска, который надо примонтировать к точке name='files' # название диска для mapper # определяем имя диска по его UUID (напр. /dev/sda1) disk='' while [[ ${#disk} == 0 ]]; do # диск может подключаться не сразу после старта системы, поэтому делаем много попыток с задержко echo "Получаем путь к диску по его UUID=${UUID}" disk=$( blkid | grep ${UUID} | awk '{print $1}' | tr -d ':|\n' ) if [[ ${#disk} == 0 ]]; then sleep 5 else echo "Диск ${name} найден тут: ${disk}" fi done # расшифровываем диск while [[ ! -e /dev/mapper/${name} ]]; do echo "Расшифровываем диск ${name}: ${disk}" cat ${key_file} | cryptsetup luksOpen ${disk} ${name} - if [[ ! -e /dev/mapper/${name} ]]; then sleep 5 else echo "Диск успешно расшифрован ${name}: ${disk}" fi done # монтируем while [[ "$( lsblk -o MOUNTPOINT | grep -i ${mount_point} | wc -l | tr -d '\n' )" == 0 ]]; do echo "Монтируем ${name}: ${disk}" mount /dev/mapper/${name} ${mount_point} sleep 5 done
Ставим скрипт /root/luks_unlock на автозагрузку через крон. Для этого можно в файле /etc/crontab добавить в конец такую строку:
@reboot root bash /root/luks_unlock
Но этот файл затрётся при полном обновлении системы (например, через команду do-release-upgrade в Ubuntu). Поэтому лучше записать в персональные cron задачи. Для этого выполняем "crontab -e" и пишем в конец:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin@reboot bash /root/luks_unlock
Обратите внимание, что если не задать SHELL и PATH, то скрипт не выполнится корректно, потому что ему будет непонятно, откуда брать утилиты "lsblk" и "blkid". А вот в общесистемном crontab файле эти директивы определены.