我想使用BTRFS RAID1和dm_crypt在微型服务器上。困难的部分是我不明白文件系统和 LUKS 的工作原理。假设我们在驱动器上有 2 个分区,并且我们对整个驱动器进行加密。这是否意味着两个分区都将被加密,如果不知道密钥,我就无法知道它们有哪些文件系统?如果是这样,那么我不明白如何在这样的驱动器上有一个未加密的启动分区(加载 dm_crypt 所必需的),或者如果我加密两个驱动器并且它们在解密之前彼此不知道,btrfs raid1 将如何工作?另一方面,如果 dm_crypt 使用 btrfs 分区来存储加密的数据(例如在一个巨大的文件中),那么 btrfs 清理是否只对这个巨大的文件起作用,并且一个无法纠正的错误不会杀死磁盘的全部内容吗?
答案1
这是否意味着两个分区都将被加密,并且如果不知道密钥,我就无法分辨它们有什么文件系统?
是的,两个分区都将被加密为 LUKS 分区。您将能够分辨出它们是 LUKS 加密分区。如果没有密钥(和/或密码),您将无法分辨分区内的内容。
如果是这样,那么我不明白如何可能有一个未加密的启动分区......
要么 (a) 启动分区是一个单独的 [未加密的] 分区,要么 (b) 启动加载程序 [GRUB?] 要求输入密码并知道如何解密和挂载启动分区。 (我通常在 Ubuntu 中使用未加密的启动分区。 我曾经在 Manjaro Linux 的安装中看到过加密的启动分区。)
此设置的主要问题在于,由于 raid1 位于上层,因此两个 hdd/ssd 将采用不同的加密,这意味着性能损失和大量不必要的加密。
我听说磁盘加密的开销可以忽略不计。我从来没有遇到过问题。但我从未测量过性能影响,而且我的系统不需要高速磁盘 IO。
无论如何,您只需在写入数据时支付多重加密的费用。读取时,只需读取一份数据。
我使用 LUKS + ZFS + RAID1,但仅用于/home
。我ext4
使用/
,ext2
以及/boot
。
(请注意,如果您有 N>2 个磁盘,则 BTRFS 的“RAID1”模式实际上并不是 RAID1,因为 BTRFS 只会创建 2 个数据副本,而不是 RAID1 所要求的 N 个副本。换句话说,具有 N>2 个磁盘的 BTRFS“RAID1”为您提供了更多的存储空间,而不是更多的冗余。)
答案2
我阅读了主题中的一些文本。根据他们的说法,分区和格式化是独立的过程,所以我不必通过对块设备进行分区来提供文件系统类型(ssd/hdd/virtual?)。dm-crypt 可以通过单独加密每个块(或扇区?)将未加密的块设备转换为加密的块设备,并且 btrfs 可以存在于该加密的块设备上。
注意:dmcrypt + btrfs 需要 4+ 内核才能正常工作;3.2 内核存在兼容性和安全性问题,4.0 内核存在性能问题。
此设置的主要问题是,由于 raid1 将位于上层,因此两个 hdd/ssd 的加密方式不同,这意味着性能损失和大量不必要的加密。根据我阅读的其他文本/答案,现在没有办法做到这一点。人们正在研究 btrfs 加密,但目前还没有稳定的东西。目前,使用 ecryptfs 的堆叠方法(btrfs FAQ 提到)比 dm-crypt 慢很多,所以这也不是一个好的解决方案。另一个选择是使用 zfs,它具有加密支持,但据我所知。与 btrfs 相比,它消耗大量内存。
更新(2019 年 1 月):
我也检查了 zfs,它有很好的原生加密功能,而且你也可以加密交换分区,所以我认为这是可行的方法。但它也有一些缺点,它占用更多内存,而且添加新磁盘不像使用 btrfs 那样简单。
答案3
也许我误解了你的问题,但这应该完全没问题。
您的系统的先决条件是在访问 LUKS 设备之前打开/解密它们。可以通过两种基本方式进行设置:
- 在启动所需的文件系统上:你必须
passphrase
在启动时输入你的(grub
或内核,取决于你是否充分对你的磁盘进行 FDE)- 这将有一个
0
安装顺序/etc/fstab
- 这将有一个
- 或者不需要启动,例如数据驱动器。
- 我将以此为例;它看起来是一个稍微复杂一些的情况。
假设你有一个非加密的btrfs
和LUKS/dev/sda1
加密btrfs
的/dev/sdb1
/dev/sdc1
因此您需要所有相关的设备opened
/ decrypted
。这是一个完全独立于 BTRFS 的步骤 / 实体。LUKS 使用内核设备映射器,因此这意味着:
- 如果没有
LUKS
,您将通过标准设备路径引用您的 btrfs 文件系统,执行您的分区,例如/dev/sda1
(注意,我们谈论的是分区而不是整个sda
驱动器,因为文件系统包含在那里)。 - 和
LUKS
,luks 在概念上包装了文件系统。当你(手动,或者例如在启动时自动)luksOpen
它(再次devicemapper
使用内核)时,你最终会得到一个/dev/mapper/your_label
。你仍然有正常的/dev/sda1
节点,但是这个不是将被使用;dev/mapper/
节点是(后luks-open 在概念上与/dev/sda1
- 相同,它是您的 btrfs 文件系统所在的位置。
一旦您有了btrfs
可用的文件系统,例如/dev/sda1
等等/dev/mapper/your_label
,您就可以执行btrfs
所需的任何任务,例如device add
创建raid1
数组。
现在——如何“使btrfs
文件系统自动可用?
- 当然你可以手动解锁
- 你的 LUKS 可以是包含你的根文件系统的,这意味着你必须按照其他指南来解锁它
grub
或你的内核initramfs
- 您有一个已解锁的安全文件系统(例如,您的根文件系统),我们可以使用
keyfile
+/etc/crypttab
自动解锁它。
以最后一个为例,因为这似乎是你问的情况
脚步:
- 创建一个
keyfile
并将其与驱动器关联cryptsetup luksAddKey /dev/sdb1
(提示您输入 LUKS 密码)——网上有很多这方面的教程,比如https://access.redhat.com/solutions/230993 - 创建一个条目,
/etc/crypttab
告诉您的系统安装该设备(注意,使用UUID=
not/dev/sdb1
... 但那是另一个话题!)。由于您的根文件系统之前已luksOpen
编辑,因此现在可以使用密钥文件,该文件将自动用于打开它。
现在你的btrfs
文件系统可用/解密了,并且可以像没有 LUKS 一样工作(尽管是在/dev/mapper/...
节点上,而不是/dev/sd...
节点上)`