Linux中的ZFS RAID和LUKS加密


24

我计划在Linux中为LUKS加密的Z-RAID池设置一组3个2TB 7200rpm驱动器(对于NAS解决方案)。

我对当前问题的理解是,实现此目标的唯一方法是对luksFormat每个物理设备进行组装,然后从未锁定的LUKS容器中组装一个zpool。

我对此有以下担忧:

  • 它不会严重阻碍写入性能吗?在这种设置中,冗余数据被加密了几次,因为LUKS并不“知道” Z-RAID。在LUKS-on-mdadm解决方案中,数据被加密一次,并且仅多次写入磁盘。我的CPU支持Intel AES-NI。

  • 当在设备映射器LUKS容器(而不是物理设备)上运行时,ZFS是否会意识到磁盘故障?重复数据删除和其他ZFS功能如何?


4
我不会的 听起来很容易失败。
ewwhite 2014年

3
@MadHatter因为是ZFS。你不能那样做。
迈克尔·汉普顿

1
很好(我相信你的话)。使含有单个大文件中的单个大ZFS,回送挂载和加密认为
MadHatter支持Monica 2014年

1
@eewhite我只是想弄清楚在Linux上使用ZFS加密的选项,直到ZFS内核模块本身实现加密为止。但是我必须同意-LUKS和ZFS似乎相处不融洽。
MasterM 2014年

4
永远不要创建大型文件,并使用ZFS对其进行环回。当CoW的操作空间用尽时,您将池浪费到无法使用的速度。
维尼修斯Ferrão

Answers:


27

我管理的服务器之一运行您描述的配置类型。它有六个1TB硬盘驱动器,上面带有LUKS加密的RAIDZ池。我还用LUKS加密的ZFS镜像中的两个3TB硬盘驱动器,每周更换一次,以备不时之需。服务器已经使用这种配置大约三年了,我从来没有遇到过问题。

如果您需要在Linux上使用加密的ZFS,则建议您进行此设置。我使用的是ZFS-Fuse,而不是Linux上的ZFS。但是,我相信,除了Linux上的ZFS之外,其他任何结果都不会比我使用的设置更好。

在这种设置中,冗余数据被加密了几次,因为LUKS并不“知道” Z-RAID。在LUKS-on-mdadm解决方案中,数据被加密一次,并且仅多次写入磁盘。

请记住,LUKS不知道RAID。它只知道它位于块设备的顶部。如果您随后使用mdadm创建RAID设备luksformat,则是mdadm将加密的数据复制到基础存储设备,而不是LUKS。

LUKS常见问题解答中的问题2.8解决了加密应该在RAID之上还是在RAID之上。它提供了下图。

Filesystem     <- top
|
Encryption
|
RAID
|
Raw partitions
|
Raw disks      <- bottom

由于ZFS结合了RAID和文件系统功能,因此您的解决方案将需要如下所示。

RAID-Z and ZFS Filesystem  <-top
|
Encryption
|
Raw partitions (optional)
|
Raw disks                  <- bottom

我将原始分区列为可选分区,因为ZFS期望它将使用原始块存储而不是分区。尽管您可以使用分区来创建zpool,但不建议这样做,因为它将添加无用的管理级别,并且在计算分区块对齐的偏移量时需要考虑到这一点。

它不会严重阻碍写入性能吗?我的CPU支持Intel AES-NI。

只要您选择AES-NI驱动程序支持的加密方法,就不会出现性能问题。如果您具有cryptsetup 1.6.0或更高版本,则可以运行cryptsetup benchmark并查看哪种算法将提供最佳性能。

有关LUKS推荐选项的问题也可能有价值。

鉴于您具有硬件加密支持,由于分区未对齐,您更有可能面临性能问题。

Linux上的ZFS已将属性添加ashiftzfs命令中,以允许您指定硬盘驱动器的扇区大小。根据链接的常见问题解答,ashift=12它会告诉您您正在使用4K块大小的驱动器。

LUKS常见问题解答指出,LUKS分区的对齐方式为1 MB。问题6.12和6.13对此进行了详细讨论,并提供了有关如何使LUKS分区标头变大的建议。但是,我不确定是否可以使其足够大以确保将在4K边界上创建ZFS文件系统。如果这是您需要解决的问题,我很想听听这对您有何帮助。由于您使用的是2TB驱动器,因此您可能不会遇到此问题。

当在设备映射器LUKS容器(而不是物理设备)上运行时,ZFS是否会意识到磁盘故障?

ZFS会注意磁盘故障,因为它可以读取和写入磁盘而不会出现问题。ZFS需要块存储,并且不关心或不知道该存储的具体信息及其来源。它仅跟踪遇到的任何读取,写入或校验和错误。由您来监视基础存储设备的运行状况。

ZFS文档中有一节有关故障排除的内容,值得阅读。有关更换或修复损坏的设备的部分介绍了在故障情况下可能遇到的问题以及如何解决该问题。您将在此处执行与没有ZFS的设备相同的操作。检查系统日志中是否有来自SCSI驱动程序,HBA或HD控制器和/或SMART监视软件的消息,然后采取相应措施。

重复数据删除和其他ZFS功能如何?

无论基础块存储是否已加密,所有ZFS功能都将相同地工作。

摘要

  1. LUKS加密设备上的ZFS运作良好。
  2. 如果您使用硬件加密,则只要使用硬件支持的加密方法,就不会看到性能下降。使用cryptsetup benchmark查看将最适合您的硬件。
  3. 将ZFS视为将RAID和文件系统组合为一个实体。请参阅上面的ASCII图以了解它适合存储堆栈的位置。
  4. 您需要解锁ZFS文件系统使用的每个LUKS加密的块设备。
  5. 像现在一样监视存储硬件的运行状况。
  6. 如果您使用具有4K块的驱动器,请注意文件系统的块对齐方式。您可能需要尝试使用luksformat选项或其他设置,以获得所需的对齐速度才能达到可接受的速度。

3
+1用于寻找一种通过示例实现此目的的方法。
ewwhite 2014年

1
1 MiB已经可以被4KiB整除,因此,如果您使用原始磁盘,则应该一直正确对齐直到ashift = 20(我认为这在我的职业生涯中没有必要)。
迈克尔·汉普顿

1
再说一件事:我投票支持您的答案,因为这是OP所期望的,而且写得很好,因此比我的答案更好。
维尼修斯Ferrão

3
@ViníciusFerrão:还请注意,FreeBSD和FreeNAS使用相同的方法进行ZFS加密。geli用于创建加密设备的设备,并且通过ZFS使用的第二个设备使明文数据可用。请参阅doc.freenas.org/index.php/Volumes#Encryption的第二个要点。
海星

2
@CMCDragonkai由于L2ARC和SLOG设备都包含池中的一点点数据,因此,如果要加密存储以提供机密性(通常这是首先使用加密存储的要点),那么您几乎肯定希望运行任何类似加密的L2ARC和SLOG设备。
CVn

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.