U. *_*lle 8 linux raid raid-1 luks btrfs
如何加密 RAID 分区btrfs?
在 RAID 之上运行加密是许多来源中的最佳实践,甚至是cryptsetupFAQ 推荐的(参见 2.2)。我希望它能够跳过加密/解锁两次、复制配置、消除密钥管理开销并保持简单和愚蠢的原因。
尽管我们有这种最佳实践,但我在网上找到的几乎所有指南都btrfs首先加密磁盘/分区,然后btrfs在这些磁盘上创建阵列。由于上述原因,我不希望这样。
luksFormat在 RAIDed btrfs 分区上交互运行时,我得到:
WARNING: Device /dev/sdc1 already contains a 'btrfs' superblock signature.
WARNING!
========
This will overwrite data on /dev/sdc1 irrevocably.
Run Code Online (Sandbox Code Playgroud)
所以我猜这就是 RAID 被破坏的原因。有没有办法让这个拓扑(创建btrfsRAID 分区后加密)在不破坏 RAID 的情况下工作?
sudo parted --script <disk-name> \
mklabel gpt \
mkpart 'btrfs-raid1-partition' 1MiB 100%
Run Code Online (Sandbox Code Playgroud)
sudo mkfs.btrfs \
-L 'btrfs-raid1-array' \
-d raid1 \
-m raid1 \
/dev/sdb1 /dev/sdc1 # Two partitions from two different disks
Run Code Online (Sandbox Code Playgroud)
echo -n 'mysecret' | \
sudo cryptsetup luksFormat \
--batch-mode \
--type luks2 \
'/dev/sdc1/
Run Code Online (Sandbox Code Playgroud)
由于镜像 RAID 1 配置,我预计其他设备也会被加密,但其他磁盘没有获得相同的配置。sudo btrfs fi show当我运行或时,我还看到其他分区从 RAID 阵列中删除sudo blkid --match-token TYPE=btrfs。
use*_*686 13
你不能这样做,因为 Btrfs 不是块设备 RAID 阵列,它是一个恰好包含数据镜像的文件系统。
\n首先,通过执行您所做的操作(即尝试对设备进行 luksFormat sdc1),对于 Linux 包含 \xe2\x80\x93 甚至 mdraid 或 dm-raid 的任何 RAID 系统,您都会遇到相同的故障。它们实际上并没有改变底层设备的工作方式\xe2\x80\x93,它们通过为您提供一个实现镜像的新虚拟设备来工作。
例如,通过 mdadm 设置 RAID1 将创建一个虚拟/dev/md0块设备,您可以为 LUKS 创建或初始化该虚拟块设备。然而,即使 RAID 阵列“在线”,原始名称/dev/sdc1仍然代表各个设备;直接写入其中一个只会写入该单个磁盘并损坏阵列。cryptsetup luksFormat /dev/md0例如,通过 mdadm 初始化 LUKS 的正确方法是。
(即使是硬件 RAID 阵列也以同样的方式工作;例如,如果您有 HP SmartArray 卡,操作系统将只能看到虚拟 RAID 磁盘,而看不到任何单独的物理磁盘。)
\n那么 Btrfs 创建的虚拟设备在哪里呢?没有,因为它不是块级RAID系统;它本身就是一个文件系统,只是恰好支持多个支持设备进行数据镜像。(打个比方,要使用 Btrfs 进行加密,您需要将其分开并在“中间”插入 LUKS。)
\n(嗯,您可以losetup在 Btrfs 文件系统中创建一个大型映像文件并使用 LUKS 对其进行初始化,但是随后您需要将另一个文件系统放入该 LUKS 卷中,并且在另一个 Btrfs 之上运行 Btrfs 会有点愚蠢.)
这意味着您不能在 Btrfs“之上”使用 LUKS。如果您需要数据加密,其他选项是:
\n设置 ZFS 阵列,因为 ZFS 现在集成了数据加密,无需 LUKS。
\n使用常规 mdadm(或 dm-raid 或 LVM)创建 RAID 阵列,将 LUKS 放在其上,然后在该 LUKS 卷中使用 Ext4 或 XFS。(可能是 Btrfs,但不使用 Btrfs 级别的数据镜像,仅使用 mdadm。我认为这就是 Synology 所做的......)
\n再等几年,Btrfs 最终会获得文件级加密,就像 ZFS 或 Ext4 和 XFS 中常见的“fscrypt”功能一样。
\n