我管理的服务器之一运行您描述的配置类型。它有六个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已将属性添加ashift
到zfs
命令中,以允许您指定硬盘驱动器的扇区大小。根据链接的常见问题解答,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功能都将相同地工作。
摘要
- LUKS加密设备上的ZFS运作良好。
- 如果您使用硬件加密,则只要使用硬件支持的加密方法,就不会看到性能下降。使用
cryptsetup benchmark
查看将最适合您的硬件。
- 将ZFS视为将RAID和文件系统组合为一个实体。请参阅上面的ASCII图以了解它适合存储堆栈的位置。
- 您需要解锁ZFS文件系统使用的每个LUKS加密的块设备。
- 像现在一样监视存储硬件的运行状况。
- 如果您使用具有4K块的驱动器,请注意文件系统的块对齐方式。您可能需要尝试使用luksformat选项或其他设置,以获得所需的对齐速度才能达到可接受的速度。