Table of Contents

注意

  • grub 2似乎无法解密/boot从而无法启动系统,所以需要/boot不是加密的

1 进行系统备份

  • 有重要数据要注意备份
  • 将系统备份到u盘或着本地磁盘

1.1 创建分区

sudo cfdisk /dev/sdX

1.2 创建文件系统并挂载

sudo mkfs.btrfs /dev/sdX 
sudo mkdir /mnt/backup
sudo mount -t btrfs -o compress=zstd /dev/sdX /mnt/backup

-o compress=zstd 启用压缩,应该是能让空间占用小不少

1.3 备份文件系统

# 先挂载系统
sudo mkdir /mnt/root
sudo mount -t btrfs -o compress=zstd /dev/sdX /mnt/root
# 复制子卷为只读子卷
# ro为只读的缩写
sudo btrfs subvolume snapshot -r /mnt/root/@ /mnt/root/@_ro
sudo btrfs subvolume snapshot -r /mnt/root/@home /mnt/root/@home_ro
# 开始备份,用btrfs send和btrfs receive保留btrfs的属性,和timeshift备份。
# 由于刚才的btrfs的压缩挂载,空间占用会比直接用cp小很多
sudo btrfs send  /mnt/root/@_ro | sudo btrfs receive /mnt/backup/
sudo btrfs send  /mnt/root/@home_ro | sudo btrfs receive /mnt/backup/

2 加密分区

  • 启动到另一个操作系统或用u盘启动

2.1 安装加密软件包

sudo apt install cryptsetup

2.2 加密分区

sudo cryptsetup -v luksFormat --type luks2 /dev/sdX1 --label Debian

2.3 打开加密分区用备份进行还原

sudo cryptsetup open /dev/sdX cryptroot
# 打开的加密分区在/dev/mapper里
sudo mkfs.btrfs /dev/mapper/cryptroot
# 创建和挂载文件系统
sudo mkfs.btrfs /dev/mapper/cryptroot
sudo mkdir /mnt/root
sudo mount -t btrfs -o compress=zstd /dev/mapper/cryptroot /mnt/root

sudo mkdir /mnt/backup
sudo mount -t btrfs -o compress=zstd /dev/sdX /mnt/backup
# 还原备份
# 用btrfs send和btrfs receive保留btrfs属性
sudo btrfs send  /mnt/backup/@_ro | sudo btrfs receive /mnt/root
sudo btrfs send  /mnt/root/@home_ro | sudo btrfs receive /mnt/root
# 改名并改为可读写子卷
sudo mv /mnt/root/@_ro /mnt/root/@
sudo mv /mnt/root/@home_ro /mnt/root/@home
sudo btrfs property set -f /mnt/root/@ ro false
sudo btrfs property set -f /mnt/root/@home ro false

3 配置系统启动

3.1 卸载/mnt 再挂载,配置fstab和crypttab

sudo umount -R /mnt

sudo mount -t btrfs -o subvol=@,compress=zstd /dev/mapper/cryptroot /mnt
sudo mount -t btrfs -o subvol=@home,compress=zstd /dev/mapper/cryptroot /mnt/home
sudo mount /dev/sdX /mnt/boot
sudo mount /dev/sdX /mnt/boot/efi

sudo apt install arch-install-scripts # 安装必要脚本
sudo genfstab -U /mnt > /mnt/etc/fstab

编辑 /etc/crypttab:

cryptroot UUID=<你的 /dev/sdX(被加密的分区)的UUID> none luks

3.2 更新initramfs并安装GRUB

sudo update-initramfs -u -k all

grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=Debian

4 重启