BTRFS 与 Luks 集成

BTRFS 与 Luks 集成

我想构建 RAID1/BTRFS/Luks 设置。到目前为止,我发现以下信息:

可以在 dm_crypt 磁盘加密子系统和 Linux 统一密钥设置 (LUKS) 层之上创建加密的 Btrfs 文件系统,该系统支持多种加密标准。但是,这种方法会禁用在原始块设备上使用 Btrfs 的一些功能和优势,例如自动固态磁盘支持和检测。

实施该解决方案的最佳方法是什么?

/dev/sda1 < 500 Gb 
/dev/sdb1 < 500 Gb 

/dev/md0 < RAID1 stripe < Luks < BTRFS < snapshots

这样的设置能行得通吗?

我看不出还有什么方法可以做到不丢失 BTRFS-es 快照功能。我可以使用 btrfs 设置没有 mdadm 的 raid,如下所示:

mkfs.btrfs -m raid1 -d raid1 /dev/sda /dev/sdb

但是后来我得到了 btrfs,我只能删除 luks 加密的图像。即使图像内部有 1 位变化也会影响 btrfs 的快照(也就是说它会再次复制整个图像文件)。

答案1

需要注意的重要一点是,如果您使用 md 进行镜像并在其上使用“-d single”创建 btrfs,您将失去从 bitrot 错误中恢复的能力(btrfs 仍会检测到它们)

因此,对于您的情况,最好的解决方案是您的第二个例子:

原始设备 -> LUKS -> 来自 LUKS 设备的 btrfs RAID1

loan 已经为你回答了 TRIM/discard 部分,我没有什么可补充的

答案2

但是,这种方法禁用了在原始块设备上使用 Btrfs 的一些功能和优势,例如自动固态磁盘支持和检测。

cryptsetup支持传递 TRIM 请求;您只需要--allow-discards在执行 时使用参数cryptsetup open,或discard在使用 时使​​用 作为选项/etc/crypttab。在执行之前执行此操作,您将看到它检测到 SSD 并打开 TRIM。您可能还希望确保在稍后安装文件系统时mkfs.btrfs使用作为选项。discard,ssd

即使图像内部有 1 位变化也会影响 btrfs 的快照(也就是说它会再次复制整个图像文件)。

BTRFS 将检测数据/元数据块中的任何位损坏,并使用另一个副本更正该块(它不会复制文件)。快照引用现有数据/元数据块,通常不会占用额外空间。如果块的一部分(文件的一部分)稍后发生变化,则会制作副本并单独引用(除非块包含整个文件,否则它不会复制文件)。未更改的块不会被复制,只会被引用。

相关内容