如何通过文件系统级 RAID 仅对数据进行一次 dm 加密?

如何通过文件系统级 RAID 仅对数据进行一次 dm 加密?

我想将 dm-crypt 与 btrfs 一起使用,因为该文件系统具有 bitrot 保护。我担心的是 RADI1 位于 dm-crypt 之上的文件系统级别,因此如果我写入一个文件,它将被加密两次。

HDD.x ⇄ dm-crypt.x ↰
                    btrfs-raid1 ⇒ btrfs
HDD.y ⇄ dm-crypt.y ↲

有没有办法只加密一次数据,例如通过在dm-crypt.x两个硬盘上存储完全相同的副本? (根据btrfs 常见问题解答我需要 encryptfs 来做这样的事情:

HDD.x ↰
       btrfs-raid1 ⇒ btrfs ⇄ ecryptfs
HDD.y ↲

但如果可以通过使用 btrfs RAID1 避免额外的性能损失,我宁愿使用 dm-crypt。

答案1

目前 BTRFS 还没有直接集成这样的选项。过去,BTRFS 邮件列表上曾讨论过添加对 VFS 加密 API 的支持(ext4 和 F2FS 的透明文件加密也使用同样的 API),但似乎从未有过任何进展。

目前实现您想要的唯一方法是将复制放在 BTRFS 之外,这消除了 BTRFS 中校验和的大部分好处。 eCryptFS 是一个选项,但它几乎总是比在 BTRFS 下使用 dm-crypt 慢。 EncFS 可能是一个选择,但我对它的性能一无所知(尽管它也是基于 FUSE 的,但一般来说,BTRFS 之上的 FUSE 层速度非常慢)。

作为所有这些的替代方案,您可能会考虑在常规 RAID 之上使用更传统的文件系统(通过 MD 或 LVM),将其放在 dm-integrity 目标之上(它对存储的数据进行加密验证,本质上是就像 Android 和 ChromeOS 用于完整性检查其系统分区的 dm-verity 目标的可写版本一样工作),然后将其放在 dm-crypt 之上。做到这一点需要一个具有 dm-integrity 支持的内核(我不记得它是什么时候添加的,但它是在过去一年内),以及支持它的 cryptsetup 版本。这将为您提供与 AEAD 式加密相同级别的完整性检查。但不幸的是,为了提供与 BTRFS 相同的纠错能力,您必须将 dm-crypt 和 dm-integrity 放在 RAID 层下(否则,RAID 将看不到 dm-integrity 的 I/O 错误)层,因此永远不会被它正确纠正)。

答案2

以下设置介绍了如何在同一驱动器上的单个 LUKS 容器内设置 RAID 1。

视频说明: https://youtu.be/PWxxV98DB4c

如果需要的话卸载(使用磁盘)

查看我们正在与哪个开发人员合作

lsblk

假设我们正在使用 sdb - 仔细检查 - 备份所有数据,以防出现问题。

创建 luks 容器

sudo cryptsetup luksFormat /dev/sdb

打开容器

sudo cryptsetup luksOpen /dev/sdb mount_name

您可以将 mount_name 更改为您喜欢的名称。

选修的:

sudo wipefs --all --backup /dev/mapper/mount_name

LVM2 PV 创建:

sudo pvcreate /dev/mapper/mount_name 

可选检查PV是否已创建:

sudo pvdisplay

创建卷组

sudo vgcreate backup /dev/mapper/mount_name

创建逻辑卷

sudo lvcreate -n part_one -l 50%FREE backup

sudo lvcreate -n part_two -l 100%FREE backup

改成%需要的。将part_one、part_two更改为你喜欢的内容

转到磁盘:它们将安装为:

/dev/backup/part_one

/dev/backup/part_two

创建突袭:

sudo mkfs.btrfs -L laptop_backup_c -d raid1 -m raid1 -f /dev/backup/part_one /dev/backup/part_two

laptop_backup_c 是一个标签。换成你喜欢的。

使用 gnome 磁盘安装其中任何一个。它将出现在

/media/<user>/laptop_backup_c

user 是你的用户名

或者,创建挂载文件夹,挂载它,然后删除该挂载文件夹

卸载:

sudo umount /media/<user>/laptop_backup_c

关闭组中所有打开的卷

sudo lvchange -an backup

关闭 luks 容器

sudo cryptsetup luksClose mount_name

现在,当您插入驱动器时,它只会要求输入一次密码。/media/<user>/laptop_backup_c如果您使用 gnome 磁盘或 CLI(此处未显示)挂载任何一个逻辑卷,您的 raid 1 将被挂载。

相关内容