zfs на Linux: как импортировать зашифрованный пул, если вы не знаете, где смонтирован ключ?

Вопрос или проблема

Я нахожусь на livecd с zfs.
Я хочу импортировать зашифрованный пул, который имеет
файл ключа в качестве “пароля”.

Сначала я монтирую USB-накопитель с файлом ключа:

mkdir /tmpusb  
mount /dev/disk/by-uuid/uuidofdongle... /tmpusb  

Затем я импортирую пул:

zpool import -l -d /dev/disk/by-partlabel/ROOTPOOL1 -d /dev/disk/by-partlabel/ROOTPOOL2 -o altroot=/mnt rpool  
1 / 1 ключей успешно загружены  

Эта процедура работает.

Однако, что если я забыл директорию, в которой смонтирован накопитель?

zfs дает мне правильный ответ, но пул должен быть открыт первым!

zfs get all rpool|grep -i keyloc  
rpool  keylocation           file:///tmpusb/cifry  local  

Вопрос: есть ли способ получить это свойство с закрытым пулом?

Я использую ZFS уже более десяти лет, но никогда не использовал шифрование ZFS, поэтому, хотя я знаю много о ZFS в целом, я определенно не эксперт по шифрованию ZFS.

Насколько я знаю, вы не можете получить атрибут keylocation набора данных без импорта пула (поскольку это атрибут набора данных, а не пула – возможно, есть способ сделать это с помощью утилиты отладки zdb, но если это так, я его не знаю).

Тем не менее, вы можете переопределить атрибут после импорта пула, но перед тем, как монтировать набор данных, и вручную указать zfs, где находится файл ключа.

Судя по документации, я почти уверен, что именно для этого предназначен параметр -L команды zfs load-key. Из man zfs-load-key:

zfs load-key [-nr] [-L keylocation] -a|filesystem

Загрузить ключ для файловой системы, позволяя ей и всем дочерним
объектам, которые наследуют свойство keylocation, быть доступными.

Ключ будет ожидаться в формате, указанном
keyformat и местоположением, указанным свойством keylocation.
Обратите внимание, что если keylocation установлено в запрос,
терминал интерактивно будет ждать ввода ключа.

Загрузка ключа не будет автоматически монтировать
набор данных. Если эта функциональность желательна, zfs mount -l запросит ключ и смонтирует набор данных (см.
zfs-mount(8)).

После загрузки ключа свойство keystatus
станет доступным.

-r Рекурсивно загружает ключи для указанной
файловой системы и всех дочерних корней шифрования.

-a Загружает ключи для всех корней шифрования во всех
импортированных пулах.

-n Выполнить пробный запуск (“No-op”) load-key. Это заставит zfs
просто проверить, что предоставленный ключ правильный. Эта
команда может быть выполнена, даже если ключ уже загружен.

-L keylocation – Использовать keylocation вместо свойства keylocation.
Это не изменит значение свойства на
наборе данных. Обратите внимание, что если используется с параметрами -r или -a,
keylocation может быть указан только как запрос.

Поэтому попробуйте сделать что-то вроде:

  1. смонтируйте usb-накопитель с ключом в любое место, которое вам нравится
  2. импортируйте пул без загрузки ключа, потому что вы хотите переопределить
    атрибут keylocation с помощью zfs load-key. Без параметра -l
    любые зашифрованные наборы данных не будут смонтированы, что вам и нужно.
  3. загрузите ключи для наборов данных
  4. смонтируйте наборы данных.
zpool import rpool    # без параметра `-l`!  
zfs load-key -L /path/to/keyfile rpool  
zfs mount rpool  

Кстати: имейте в виду различие между пулом, называемым rpool, и верхним набором данных этого пула (также называемым rpool) – zpool подкоманды работают с пулами, подкоманды zfs работают с наборами данных, zvol, снимками и т.д.

Ответ или решение

Импорт зашифрованного пула ZFS в Linux без знания местоположения ключа

В условиях работы с ZFS в Linux вы можете столкнуться с ситуацией, когда необходимо импортировать зашифрованный пул, но вы не помните, где смонтирован файл ключа. Рассмотрим шаги, которые помогут вам в этом процессе.

Шаг 1: Подготовка

Для начала убедитесь, что вы находитесь в среде, где установлен ZFS, например, на LiveCD. Затем вам потребуется смонтировать USB-накопитель, на котором хранится файл ключа. Используйте следующую команду:

mkdir /tmpusb
mount /dev/disk/by-uuid/uuidofdongle /tmpusb

Здесь uuidofdongle — это UUID вашего USB-накопителя. После этого вы готовы к импортированию пула.

Шаг 2: Импорт пула

Импортируйте пул, не загружая ключи. Это делается командой:

zpool import rpool

Эта команда побудит ZFS импортировать пул rpool без автоматической загрузки ключей, так как у вас нет информации о местоположении файла ключа.

Шаг 3: Загрузка ключа из файла

После успешного импорта пула, вы можете загрузить ключ, указав путь к файлу ключа, который находится на смонтированном USB-накопителе. Используйте следующую команду:

zfs load-key -L file:///tmpusb/your_keyfile rpool

Обратите внимание: в этом случае your_keyfile — это имя вашего файла ключа.

Шаг 4: Монтирование файловой системы

После успешной загрузки ключа вы можете смонтировать файловую систему:

zfs mount rpool

Важные замечания

  1. Разделение понятий: Помните, что команда zpool работает с пулами, а команда zfs — с файловыми системами. В данном примере rpool обозначает как пул, так и верхний уровень файловой системы, что может вызвать путаницу.

  2. Обновление ключа: Вы можете переопределить местоположение файла ключа или даже установить его в качестве свойства доступным для пула, но это требует дополнительной настройки и понимания архитектуры ZFS.

  3. Проверка статуса: Чтобы проверить состояние ключей и их загрузку, можно использовать команду:

zfs get keystatus rpool

Эта команда покажет состояние ключа для вашего пула rpool.

  1. Работа с другим массивом данных: Если у вас есть несколько зашифрованных файловых систем в пуле, вы можете использовать флаг -r для загрузки всех дочерних экземпляров.

В заключение, работа с зашифрованными пулами ZFS требует знаний как о ZFS, так и о подходах к работе с ключами. Всегда убедитесь, что у вас есть резервные копии вашего файла ключа, чтобы избежать потери данных.

Оцените материал
Добавить комментарий

Капча загружается...