Хочете зашифрувати root у вже встановленому Debian/Ubuntu, але без перевстановлення? Це реально. Далі — безпечний і відтворюваний план: підготуємо носій, створимо LUKS-контейнер, перенесемо систему через rsync, налаштуємо crypttab/fstab, згенеруємо initramfs і відновимо GRUB. Ми працюватимемо через термінал Linux, торкнемося трохи bash скрипти та обов’язково згадаємо про резервне копіювання системи 🔐
Підготовка: що перевірити перед стартом
Перед будь-якими діями зробіть повний бекап важливих даних (краще — образ диска). Далі — перевірки і план:
- LiveUSB з Debian/Ubuntu (та сама архітектура, що й ваша система).
- Вільний розділ або другий диск для нового шифрованого root (або простір для перерозмітки).
- Версія GRUB: якщо 2.06 або новіше — можна зберігати /boot всередині LUKS2; якщо старіша — використовуйте LUKS1 або окремий незашифрований /boot.
# Перевірити версію GRUB (у вашій системі або в chroot пізніше)
grub-install --version
# Подивитись розмітку дисків
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINTS
blkid
План завантаження:
- Варіант A (рекомендовано): окремий незашифрований /boot (~1 ГБ) + зашифрований root.
- Варіант B: зашифрований /boot (GRUB_ENABLE_CRYPTODISK=y, GRUB ≥ 2.06; для сумісності краще LUKS1 на момент написання).
Порада: якщо не впевнені в сумісності, використовуйте LUKS1 для розділу з ядром/інітрамфс або створіть окремий /boot. Це зменшує сюрпризи при відновленні завантаження ⚠️
How-to: перенос системи у новий LUKS‑root
Крок 0. Завантаження з LiveUSB та підготовка сесії
# У Live-сесії отримати root
sudo -i
# Для прикладу: вихідний root = /dev/sda2, новий розділ під LUKS = /dev/sda3
export SRC=/dev/sda2
export NEW=/dev/sda3
Крок 1. Створюємо LUKS і файлову систему
Оберіть тип LUKS за сумісністю: LUKS2 (сучасно) або LUKS1 (краще для старішого GRUB).
# Якщо у вас GRUB < 2.06 або хочете максимум сумісності для /boot всередині LUKS
cryptsetup luksFormat --type luks1 "$NEW"
# Інакше (за замовчуванням сучасний варіант)
# cryptsetup luksFormat "$NEW"
cryptsetup open "$NEW" cryptroot
mkfs.ext4 -L rootfs /dev/mapper/cryptroot
mkdir -p /mnt/newroot
mount /dev/mapper/cryptroot /mnt/newroot
Крок 2. Монтуємо старий root та копіюємо систему
mkdir -p /mnt/oldroot
mount "$SRC" /mnt/oldroot
# Копіюємо все, крім псевдо‑ФС
rsync -aAXHv --numeric-ids \
--exclude={'/dev/*','/proc/*','/sys/*','/run/*','/tmp/*','/mnt/*','/media/*','/lost+found'} \
/mnt/oldroot/ /mnt/newroot/
Якщо у вас вже є окремий /boot, змонтуйте його в /mnt/newroot/boot перед генерацією initramfs. Якщо /boot досі в корені, ви можете або створити окремий незашифрований /boot і скопіювати туди вміст, або використати GRUB з cryptodisk (див. нижче).
Крок 3. Налаштовуємо crypttab і fstab
# UUID LUKS-контейнера (потрібен для /etc/crypttab)
LUKS_UUID=$(cryptsetup luksUUID "$NEW")
# UUID файлової системи в середині LUKS (для /etc/fstab)
FS_UUID=$(blkid -s UUID -o value /dev/mapper/cryptroot)
# /etc/crypttab (відкриття LUKS під час initramfs)
cat > /mnt/newroot/etc/crypttab <<EOF
cryptroot UUID=$LUKS_UUID none luks,discard
EOF
# /etc/fstab (монтування кореня та, за потреби, /boot)
cat >> /mnt/newroot/etc/fstab <<EOF
UUID=$FS_UUID / ext4 defaults,discard 0 1
# Якщо є окремий /boot, додайте тут його UUID і точку монтування
# UUID=<BOOT_UUID> /boot ext4 defaults 0 2
EOF
Крок 4. Переходимо у chroot та відновлюємо завантаження
# Підмонтування для chroot
for i in dev proc sys run; do mount --bind /$i /mnt/newroot/$i; done
# Якщо EFI, змонтуйте ESP (зазвичай /dev/sdX1) у /mnt/newroot/boot/efi
# mkdir -p /mnt/newroot/boot/efi; mount /dev/sdX1 /mnt/newroot/boot/efi
chroot /mnt/newroot /bin/bash -c '
set -e
export DEBIAN_FRONTEND=noninteractive
apt update
apt install -y cryptsetup-initramfs
# Увімкнути підтримку зашифрованого /boot у GRUB (коли /boot всередині LUKS)
if ! grep -q ^GRUB_ENABLE_CRYPTODISK /etc/default/grub; then
echo "GRUB_ENABLE_CRYPTODISK=y" >> /etc/default/grub
fi
# Оновити initramfs та GRUB-меню
update-initramfs -k all -u
update-grub
# ВСТАНОВЛЕННЯ GRUB (оберіть варіант під вашу платформу)
# BIOS/Legacy (приклад для /dev/sda):
# grub-install /dev/sda
# UEFI x86_64 (приклад, якщо ESP змонтовано в /boot/efi):
# apt install -y grub-efi-amd64
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian
# На Ubuntu замініть bootloader-id відповідно (ubuntu)
'
Вийдіть з chroot, відмонтуйте все і перезавантажтесь у ваш новий LUKS‑root.
# Вихід із chroot робиться автоматично після виконання блоку
for i in run sys proc dev; do umount -R /mnt/newroot/$i; done
umount -R /mnt/newroot || true
cryptsetup close cryptroot
reboot
Міні‑скрипт для копіювання та підготовки chroot
Щоб не друкувати довгі команди вручну, можна використати невеличкий фрагмент — це чисто приклад для «bash скрипти» і адаптації під ваші пристрої:
#!/usr/bin/env bash
set -euo pipefail
SRC=${1:-/dev/sda2}
NEW=${2:-/dev/sda3}
cryptsetup luksFormat "$NEW"
cryptsetup open "$NEW" cryptroot
mkfs.ext4 -L rootfs /dev/mapper/cryptroot
mount /dev/mapper/cryptroot /mnt/newroot
mount "$SRC" /mnt/oldroot
rsync -aAXHv --numeric-ids --exclude={'/dev/*','/proc/*','/sys/*','/run/*','/tmp/*','/mnt/*','/media/*','/lost+found'} /mnt/oldroot/ /mnt/newroot/
Альтернативні способи
1) In-place шифрування існуючого root (офлайн)
Можна шифрувати розділ «на місці», без копіювання, але лише офлайн (через LiveUSB) і з невеликим вільним місцем у кінці розділу. Ризик вищий — спершу зробіть резервне копіювання системи!
# Новіші cryptsetup
cryptsetup reencrypt --encrypt --reduce-device-size 16M --type luks2 /dev/sda2
# Старіший інструмент
# cryptsetup-reencrypt --encrypt --reduce-device-size 16M --type luks1 /dev/sda2
Після цього створіть ФС у /dev/mapper/… (як ви назвали), налаштуйте crypttab/fstab, initramfs і GRUB аналогічно до основного способу.
2) LVM поверх LUKS (класичний підхід)
Замість однієї ФС всередині LUKS створіть фізичний том LVM і логічні томи для root, swap, home. Це гнучкіше для розширення й знімків, але трохи складніша інсталяція.
3) Ключі TPM/файл-ключ
Можна уникнути введення пароля щоразу: зберегти ключ у initramfs або використати TPM (systemd-cryptenroll). Врахуйте загрози й тестуйте ретельно.
GUI-спосіб (частково)
Повністю «клікати» міграцію кореня не вийде. Але можна за допомогою GNOME Disks підготувати LUKS-розділ: створити новий розділ, обрати «Зашифрований, сумісний з Linux (LUKS)», задати пароль — і потім повернутися в термінал Linux для копіювання через rsync та налаштувань initramfs/GRUB.
FAQ
Система завантажилась у initramfs (BusyBox)
Ймовірно, відсутній cryptsetup у initramfs або помилка в /etc/crypttab чи /etc/fstab. Перевірте:
- cryptsetup-initramfs встановлено; виконайте update-initramfs -u -k all у chroot;
- У crypttab правильний UUID LUKS (cryptsetup luksUUID /dev/sdXN);
- У fstab — UUID файлової системи всередині LUKS, а не «сирого» розділу.
GRUB не питає пароль або пише «no such cryptodisk»
- Додайте GRUB_ENABLE_CRYPTODISK=y в /etc/default/grub і запустіть update-grub.
- Якщо GRUB старий, використайте LUKS1 або окремий /boot.
- Перевстановіть GRUB у chroot (grub-install + update-grub).
Неправильні UUID або розділи
Завжди перевіряйте lsblk і blkid у Live-сесії після кожної зміни. Не плутайте UUID LUKS-контейнера (для crypttab) і UUID ФС усередині (для fstab).
EFI чи BIOS?
UEFI потребує змонтованої ESP в /boot/efi під час grub-install. Для BIOS достатньо вказати диск (наприклад, /dev/sda).
Як розблокувати root по SSH на ранньому етапі завантаження?
Встановіть dropbear-initramfs та додайте свій публічний ключ:
apt install dropbear-initramfs
mkdir -p /etc/dropbear-initramfs
cat ~/.ssh/id_ed25519.pub >> /etc/dropbear-initramfs/authorized_keys
update-initramfs -u
Як зробити резервну копію заголовка LUKS?
cryptsetup luksHeaderBackup /dev/sdXN --header-backup-file luks-header.img
# Відновити (лише якщо потрібно і ви розумієте ризики)
# cryptsetup luksHeaderRestore /dev/sdXN --header-backup-file luks-header.img
Порада від Kernelka
Перш ніж чіпати бойову систему — потренуйтеся у віртуалці або на другому диску. Зберігайте пароль LUKS у менеджері паролів, а ще краще — створіть екстрений ключ і запишіть його на USB. Маленькі кроки, перевірки після кожного етапу — і все запрацює з першого разу 💡 Це саме ті поради Linux, що економлять години налагодження.
Підсумок
- Підготуйте LiveUSB, бекап та місце під LUKS.
- Створіть LUKS-контейнер, ФС і перенесіть систему через rsync.
- Правильно заповніть /etc/crypttab та /etc/fstab.
- Згенеруйте initramfs, увімкніть GRUB cryptodisk за потреби, перевстановіть GRUB.
- Перевіряйте UUID і розмітку після кожної операції.
- За необхідності скористайтеся альтернативами: in-place reencrypt, LVM-on-LUKS, TPM-ключі.
Готово! Тепер ваш Debian/Ubuntu завантажується з зашифрованого LUKS‑root без перевстановлення системи.

Прокоментувати
На сайті відображається лише твоє ім'я та коментар. Електронна пошта зберігається виключно для зв'язку з тобою за потреби та в жодному разі не передається стороннім особам.