如何在不格式化的情况下加密 Fedora 上的现有磁盘?

如何在不格式化的情况下加密 Fedora 上的现有磁盘?

有许多现有的在线指南已经介绍了如何重新加密磁盘,例如麦克斯赫尔普齐格的回应这里以及文档中Arch 维基。然而,Arch wiki 更多地关注使用mkinitcpio而不是 的系统dracut,并且现有的 StackExchange 答案假设使用 ext4 文件系统。

答案1

这假设默认的 Fedora 安装具有以下基于 Btrfs 的分区:

  • 根分区(Btrfs 子卷“root”[安装在/] 和“home”[安装在/home])
  • 引导分区(安装在/boot
  • EFI 分区(仅限 UEFI 系统,安装在/boot/efi)

要求

  • 全盘备份
  • 密码设置(应包含在内,否则使用 进行安装dnf install cryptsetup
  • 至少 100 MiB 可用空间
  • 一个可以卸载根文件系统(例如。Fedora 实时 USB
  • 笔记:/etc/vconsole.conf加密屏幕将使用(使用)中定义的键盘布局localectl。布局在启动时无法更改。

指示

  1. 使用 标识根文件系统lsblk -f。存储 UUID(格式XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)以供以后使用。
  2. 使用 标识您当前的内核版本uname -r,并保存该值以供以后使用。
  3. 重新启动进入救援系统。使用 找到根文件系统blkid --uuid <UUID>,然后使用 对文件系统运行检查btrfs check <device>
  4. 挂载文件系统mount /dev/<device> /mnt
  5. 缩小文件系统以为 LUKS 标头腾出空间。建议至少 32 MiB,使用btrfs filesystem resize -32M /mnt
  6. 卸载文件系统:umount /mnt
  7. 使用 加密分区cryptsetup reencrypt --encrypt --reduce-device-size 32M /dev/<device>,并在出现提示时提供密码。
  8. 识别加密的 LUKS 分区lsblk -f(注意 UUID 已更改)。保存此 LUKS 分区 UUID 以供以后使用。
  9. 打开分区,在出现提示时提供您的密码:cryptsetup open /dev/<device> system
  10. 挂载映射的文件系统mount /dev/mapper/system /mnt
  11. 调整文件系统大小以使用所有空间:btrfs filesystem resize max /mnt,然后使用卸载文件系统umount /mnt
  12. 安装根子卷(Linux 文件系统根)mount -t btrfs -o "noatime,subvol=root,compress=zstd:1" /dev/mapper/system /mnt
  13. 使用 标识引导和 EFI 分区的设备lsblk。挂载引导文件系统 ( mount /dev/<boot device> /mnt/boot),然后挂载 UEFI 系统的 EFI 文件系统 ( mount /dev/<EFI device> /mnt/boot/efi)。
  14. 绑定挂载伪文件系统/dev, /dev/pts, /proc, /run, 和/sys, 格式为mount --bind /sys /mnt/sys
  15. 在文件系统中打开 shell:chroot /mnt /bin/bash
  16. 用文本编辑器打开/etc/default/grub,修改内核参数以识别LUKS分区,并暂时禁用SELinux强制。添加这些参数,然后保存更改并关闭文件:
GRUB_CMDLINE_LINUX="[other params] rd.luks.uuid=<LUKS partition UUID> enforcing=0"
  1. 配置 SELinux 的重新标记touch /.autorelabel
  2. 重新生成 GRUB 配置:(grub2-mkconfig -o /boot/grub2/grub.cfg也为/etc/grub2.cfg、 和 UEFI 系统生成/etc/grub2-efi.cfg
  3. 重新生成 initramfs 以确保启用 cryptsetup:dracut --kver <kernel version> --force
  4. 退出 chroot
  5. 按相反顺序卸载所有文件系统。 (对于使用 挂载的文件系统--bind,可以使用该选项-l。)使用 关闭 LUKS 分区cryptsetup close system
  6. 重新启动并登录常规系统。在启动过程中,系统会要求您输入密码来解密系统。
  7. /etc/default/grub在文本编辑器中打开,然后通过enforcing=0从中删除来重新启用 SELinux 强制执行GRUB_CMDLINE_LINUX。保存并退出。
  8. 再次使用 重新标记 SELinux touch /.autorelabel
  9. 重复步骤18重新生成 GRUB 配置。
  10. 重新启动并登录系统。

这个答案很大程度上来源于麦克斯赫尔普齐格回答Arch 维基。它也来自塞雷姆塞姆的 回答。 2023 年 3 月 16 日,更正了--reduce-device-size错误包含空格的拼写错误。

相关内容