如何在 Solus OS (Linux) 下将 btrfs raid 1 添加到加密的 lvm2 卷组?

如何在 Solus OS (Linux) 下将 btrfs raid 1 添加到加密的 lvm2 卷组?

我拥有的:

在 56G SSD 上安装带有加密 LVM2 的 Solus OS,无需交换 - 效果非常好。我有 32G RAM,所以交换现在不是问题 - 它是我未来的主要设备,主要用作办公室、Web、Daw 和 Rust 编程的桌面(不是同时使用所有功能)。

我想做的事:

将两个在 raid 1 配置中使用 btrfs 格式化的 1T hds 添加到实际的 lvm2 卷组中,它们应该包含 /home (以及已经存在的所有内容)并在引导期间安装为 /home,以便我将拥有 1T 空间对于/home,带有软件镜像。 RAID 级别 1 必须用于数据和元数据。

/home 应使用已使用的密钥短语保持加密状态。另外,我想使用 -o 压缩力安装 btrfs,这必须在 fstab 和 fscrypt 中完成。我目前不确定它是 fscrypt 还是其他听起来类似的东西。

到目前为止我所理解的:

  1. 创建 btrfs raid
  2. 将 /home 中的所有内容复制到临时安装的 /home-btrfs
  3. 做一些魔法来获得:ssd 上的 /home 消失,卸载 /home-btrfs 将 btrfs-raid 添加到卷组并将 btrfs-raid 挂载为 /home - 一切都再次加密,但有更多空间

有谁可以向我解释一下吗?我不确定我是否理解得足以开始。我不害怕终端或任何 cli。我刚刚决定退出 Windows 10 的供应商锁定,转而使用 Linux。我知道该配置会带来一些性能影响,但这对我来说没关系。

我目前的计划是这样做:

  1. gparted 将创建一个分区表 (gpt) 并使用 btrfs 格式化 /dev/sdb1
  2. 打开终端/外壳
  3. sudo 安装 /dev/sdb1 /home-btrfs
  4. 使用 cp -var /home /home-btrfs 将所有内容从 /home 复制到 /home-btrfs
  5. gparted 将在 /dev/sdc -> /dev/sdc1 上创建分区表 (gpt)
  6. btrfs 设备添加 /dev/sdc1 /home-btrfs
  7. btrfs fi 平衡启动 -mconvert=raid1,soft -dconvert=raid1,soft /home-btrfs
  8. 打开第二个 shell 来观察 raid 转换进度
  9. btrfs 文件系统平衡状态 /home-btrfs
  10. btrfs 平衡开始 -dusage=0 -musage=0 /mnt/btrfs (摆脱空块)
  11. 我陷入困境,因为现在我无法将 lvextend、pvcreate、vgextend 和 lvm2 中的其他内容纳入我的计划。

我为我糟糕的语法道歉。是的,我花了很多时间使用这里的搜索功能和谷歌,但找不到我需要的答案。

答案1

Solus OS 使用 systemd,因此/etc/crypttab用于配置需要解锁的 LUKS 设备,以便可以使用/etc/fstab.程序如下。

使用 LUKS 和 BTRFS 镜像 (raid1) /home

  1. 使用软件中心安装btrfs-progs.
  2. 创建一个 LUKS 密钥文件,该文件将存储在您的加密文件中/,并用于解锁以下内容的新 LUKS 容器/homesudo dd bs=512 count=4 if=/dev/urandom of=/root/home.key
  3. 使用密钥文件在两台设备上创建 LUKS 容器:sudo cryptsetup luksFormat /dev/sdb /root/home.key && sudo cryptsetup luksFormat /dev/sdc /root/home.key
  4. 解锁两个 LUKS 容器:sudo cryptsetup open --type luks /dev/sdb home0 --key-file /root/home.key && sudo cryptsetup open --type luks /dev/sdc home1 --key-file /root/home.key
  5. 创建 BTRFS 文件系统:sudo mkfs.btrfs -d raid1 -m raid1 /dev/mapper/home0 /dev/mapper/home1
  6. 将 BTRFS 文件系统挂载到某处(您只需指定其中一个设备):mount /dev/mapper/home0 /mnt
  7. 创建/home子卷,为您提供 BTRFS 的更多灵活性:sudo btrfs subvol create /mnt/home
  8. 将您的主目录复制到子卷:cp -var /home /mnt
  9. 创建/修改/etc/crypttab,以便解锁新的 LUKS 容器:sudo echo "home0 /dev/sdb /root/home.key" >> /etc/crypttab && sudo echo "home1 /dev/sdc /root/home.key"
  10. 进行修改/etc/fstab,使其安装在您的新家中:sudo echo "/dev/mapper/home0 /home btrfs defaults,subvol=/home" >> /etc/fstab
  11. 重启。

当您重新启动时,您的新 raid1 BTRFS 文件系统将安装在 /home 处。剩下的项目是删除旧的 /home。要做到这一点:

删除旧的 /home

  1. 重新启动,但当出现 systemd-boot 菜单时,按e钥匙。
  2. 现在您将能够编辑内核命令行。添加"systemd.unit=rescue"
  3. 按 ENTER 键以使用添加的内核命令行进行引导,以便引导至单用户模式。这将允许您卸载/home.
  4. 卸载/homeumount /home.
  5. 删除旧的/home.请小心,我建议进行备份:cd /home && rm -fR .
  6. 重启。

请注意,分区和 LVM 都不需要,因为您仅将整个设备用于 BTRFS。您也不需要重新平衡 BTRFS,因为它是使用两个设备创建的,并且从一开始就采用 RAID1 配置。

此外,LUKS 容器是使用密钥文件解锁的,因此系统不会提示您输入密码三次。但您可能需要将密码添加到另一个 LUKS 插槽中,以防密钥文件发生问题。

提示

最后,我强烈建议备份所有三个 LUKS 标头。如果任何标头损坏并且您没有备份,那么您不妨将磁盘发送到垃圾填埋场。

相关内容