Перенос системы на зашифрованный раздел Luks
2026-03-10 22:50 Diff

Теги: linux, grub, luks, debian 8.10, ubuntu 16.04, cryptsetup, aes-cbc, aes-lrw, aes-xts, системное администрирование, uuid, перенос системы на зашифрованный раздел luks, шифрование дисков в linux

Был солнечный тёплый день, когда мне поручили зашифровать все сервера. А это более 50 разных машин: на Centos, debian и ubuntu. Яростно погуглив, порыскав по форумам, я не нашёл однозначного решения. Помогли инструкции по переносу машин с диска на диск и инструкции запуска системы с флешки. Всё получилось, и вот уже несколько десятков машин крутятся с такой схемой.

Итак, то же нужно сделать?

Представляю вашему вниманию самописную инструкцию по переносу на зашифрованный раздел c использованием ESX 6.0. Её можно использовать и для переноса системы, если не брать в расчёт шифрование.

1. Подготовка к переносу

Сначала подключаем диск нужного размера:

1.1 Разбиваем диск на 2 и более разделов

/boot должен быть отдельно. Он, как вы догадались, не будет зашифрован. Диск не обязательно должен совпадать с исходным размером:

Форматируем /boot mkfs.ext4 /dev/sda1

Создаём зашифрованный раздел cryptsetup luksFormat /dev/sdb2

Важно: YES большими буквами! В принципе указание об этом будет, но на басурманском языке.

1.2 Инициализируем раздел

cryptsetup luksOpen /dev/sdb sdb2_crypt и не забываем дописывать аргумент или удивляемся, что сделано не так.

1.3 Далее я создал LVM на него и положил систему

Тут всё просто:

pvcreate /dev/mapper/sda2_crypt

Указываем зашифрованный диск:

vgcreate crypto /dev/mapper/sda2_crypt

1.4 Создаём раздел под корневой раздел

lvcreate -l 100FREE% -n название раздела, название группы или как на картинке немного по-другому:

1.5 Создаём раздел для файла подкачки

lvcreate -L 2G -n swap название группы

Проверяем:

lvscan

1.6 Форматируем LVM

mkfs.ext4 /dev/crypto/vol1 mkfs.ext4 /dev/crypto/SWAP

Если нет swap, создаём и подключаем. Размер выбираем так, что если памяти выделено 2 Гб то swap должен быть от 2 до 4 Гб.

1.7 Создаём swap

fallocate -l 4G /swapdir/swapfile

Проверяем , что он создан:

1.8 Настраиваем права

chmod 600 /swapdir/swapfile

Делаем из файла swap:

1.9 Подключаем в систему

Проверяем:

Теперь самое интересное — всё то, что нажито непосильным трудом!

2. Приступаем к переносу!

2.1 Создаём папки

mkdir /mnt/new mkdir /mnt/old mkdir /mnt/boot

2.2 Монтируем

Текущий корневой раздел монтируем в папку old.

2.3 Новый LVM раздел

mount /dev/crypto/vol1/ /mnt/new/

2.4 Раздел загрузки

mount /dev/sdb1 /mnt/boot

2.5 Копируем корневой раздел

rsync -av /mnt/old/ /mnt/new/

2.6 Копируем загрузку

rsync -av /mnt/old/boot/ /mnt/boot/

3. Перенос системы

3.1 Монтируем систему

Mount –bind /sys /mnt/new/sys Mount –bind /dev /mnt/new/dev Mount –bind /proc /mnt/new/proc

3.2 Меняем корневой раздел

Посмотреть все UUID. Ваши будут отличаться от представленных:

3.3 Монтирование дисков в новой системе

vim /etc/fstab /dev/mapper/crypto-vol1 / ext4 noatime,errors=remount-ro 0 1 UUID="3efdf7e2-4bff-4fd6-b95a-60bb60ece16c" /boot ext4 default 0 1 UUID=”09f94ec7-cb53-4bdf-9c20-d10b9b358719” /swap swap sw 0 0

3.4 Монтируем Luks, чтобы загружался при загрузке

3.5 UUID крипто диска прописываем:

sda2_crypt UUID=0a6accdb-9968-403a-b8bd-f9be6d3aaaec none luks

!!!Рекомендую сделать снапшот или бекап перед этим этапом!!!

4 Загрузка

4.1 Редактируем GRUB

Vim /etc/default/grub GRUB_ENABLE_CRYPTODISK=y

4.2 Устанавливаем GRUB на диск, с которого будет грузится:

Могут быть сообщения об ошибках lvm, игнорируем их.

4.3 Обновляем GRUB

4.4 Обновляем образ

update-initramfs -k all –u

4.5 Делаем EXIT

Из корневого раздела /mnt/new

4.6 Отмонтируем

umount /mnt/new/sys umount /mnt/new/dev umount /mnt/new/proc umount /mnt/new umount /mnt/boot

4.7 Выключаемся

4.8 Меняем диск загрузки, грузимся

После смены дисков, их названия изменятся. Например, были sdb — станет sda и наоборот.

Тестировалось на debian 8 и Ubuntu 16.04 для centos немного другая схема вместо grub-update , grub-mkconfig , а вместо update-initramfs dracut.

5. Варианты шифрования

CBC:# cryptsetup -y --cipher aes-cbc-essiv:sha256 --key-size 256 luksFormat /dev/sdx LRW:# cryptsetup -y --cipher aes-lrw-benbi --key-size 384 luksFormat /dev/sdx XTS:# cryptsetup -y --cipher aes-xts-plain --key-size 512 luksFormat /dev/sdx

Вот и всё! Надеюсь, сильно не наврал! Если что — пишите в комментариях! Полезные ссылки: — Вики о шифрованииШифрование дисков в Linux