Вопрос или проблема
Я нахожусь на 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 может быть указан только как запрос.
Поэтому попробуйте сделать что-то вроде:
- смонтируйте usb-накопитель с ключом в любое место, которое вам нравится
- импортируйте пул без загрузки ключа, потому что вы хотите переопределить
атрибутkeylocation
с помощьюzfs load-key
. Без параметра-l
любые зашифрованные наборы данных не будут смонтированы, что вам и нужно. - загрузите ключи для наборов данных
- смонтируйте наборы данных.
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
Важные замечания
-
Разделение понятий: Помните, что команда
zpool
работает с пулами, а командаzfs
— с файловыми системами. В данном примереrpool
обозначает как пул, так и верхний уровень файловой системы, что может вызвать путаницу. -
Обновление ключа: Вы можете переопределить местоположение файла ключа или даже установить его в качестве свойства доступным для пула, но это требует дополнительной настройки и понимания архитектуры ZFS.
-
Проверка статуса: Чтобы проверить состояние ключей и их загрузку, можно использовать команду:
zfs get keystatus rpool
Эта команда покажет состояние ключа для вашего пула rpool
.
- Работа с другим массивом данных: Если у вас есть несколько зашифрованных файловых систем в пуле, вы можете использовать флаг
-r
для загрузки всех дочерних экземпляров.
В заключение, работа с зашифрованными пулами ZFS требует знаний как о ZFS, так и о подходах к работе с ключами. Всегда убедитесь, что у вас есть резервные копии вашего файла ключа, чтобы избежать потери данных.