RAID,LVM和LUKS的最佳顺序


13

我将使用Debian GNU / Linux 8安装文件服务器。

我想要使​​用mdadm的软件RAID-1以及使用LUKS的加密磁盘。我也喜欢拥有LVM的灵活性。

有不同的方法可以做到这一点。一种方法是:首先使用mdadm设置RAID-1。然后设置LVM PV以覆盖创建的/ dev / mdX。然后设置LV并使用LUKS对其加密。然后使用文件系统(例如ext4)格式化这些文件。结果是这样的布局:

RAID --> LVM --> LUKS --> ext4

或者我可以按其他顺序进行:

RAID --> LUKS --> LVM --> ext4

甚至:

LVM --> RAID --> LUKS --> ext4

甚至可能完全不同的顺序。

不同方法的优缺点是什么?什么能提供最佳性能,安全性,可维护性等?

有这样做的“最佳方法”吗?

Answers:


18

首先,LUKS和LVM的顺序取决于您是否要为不同的LV使用不同的LUKS密码或其他设置。如果说,您需要为不同的LV设置不同的密码,那么您肯定需要将LUKS放在LVM之上。另一方面,如果所有LV共享相同的密码和设置(例如keylen),则您希望LUKS在LVM之下,这样就不必处理拥有多个LUKS分区的开销(想想您想需要更改密码时必须要做的事情)。

其次,您几乎总是希望RAID处于最低级别,因此,当一个磁盘失效时,可以轻松,透明地进行交换。如果要在LVM之上设置RAID,则当一个磁盘死掉时必须更换PV,这将是一个很大的麻烦。而且,LVM之上的RAID将完全破坏LVM的灵活性。然后,您可能需要再次在RAID之上设置LVM的第二层!

因此,因为在大多数情况下,人们只需要使用一个密码,就可以满足:

RAID-> LUKS-> LVM-> ext4

在某些情况下,您可能需要使用LVM将多个RAID设备组合为一个大卷,然后可以执行以下操作:

RAID-> LVM-> LUKS(-> LVM)-> ext4

从理论上讲,如果每一层都正确设置,顺序应该不会对性能产生太大影响,而且在实践中,我还没有看到这种设置的性能会特别糟糕。最重要的事情可能是对齐:

  1. 确保您的分区对齐1MB(对于SSD非常重要);
  2. 对于RAID层,明智地选择块大小
  3. 对于LVM,请确保设置--dataalignment为与RAID块大小匹配(可能会有所帮助)。

此外,如果在SSD上,请确保您启用陆氏TRIM /放弃直通加入rd.luks.options=discard/etc/default/grubdiscard/etc/crypttab(这些是我在Red Hat / Fedora Linux系统做的。可能是在Debian略有不同。)LVM和RAID应该自动支持丢弃如果您使用的是新内核。

当然,这些只是一般准则。如果您有特殊需要,请随时在此处更新您的问题或评论。


感谢您的快速回复。好点!如果性能差异不大,您能否发表评论?
托马斯

更新了一些性能说明。
严丽

1
还应该指出,您并非总是需要使用MDADM(尽管我希望这将是最典型的解决方案)。
-LVM

@davidgo是的。我也想提一提,但没有这样做,因为我不确定这是否是正确的方法。我还没有亲自尝试过(大多数情况下我使用的RAID级别较高,例如5或6),并且已经阅读了有关LVM镜像的混合反馈,例如该问题的一些答案所提到的。
严丽

@严,我同意。我也总是使用mdadm RAid(1)
davidgo

4

如果您想要所有RAID,LUKS和LVM,我建议您RAID -> LUKS -> LVM -> FSRAID --> LVM --> LUKS --> LVM --> FS并不比RAID -> LUKS -> LVM-扩展卷只是将更多RAID -> LUKS设备添加到卷组更好。

RAID --> LVM --> LUKS --> FS -仅加密特定的逻辑卷具有默认情况下不加密所有内容的功能(可能被视为优点或缺点),但是它将使扩展根FS更容易。

当用户以错误的顺序扩展/调整大小时,在逻辑卷之上扩展LUKS是常见的问题根源。在整个md RAID设备上具有LUKS将简化大小调整-添加新的md设备,在其之上创建LUKS,将设备添加到/ etc / crypttab(至少在Fedora和RHEL克隆上),并扩展卷组。如果根FS在卷组上,则需要rd.luks.uuid向内核cmdline 添加另一个条目(编辑/ etc / default / grub并重新生成grub.cfg。)

LUKS -> RAID通常是错误的-数据将被多次加密,从而浪费更多的CPU周期。也有可能在磁盘发生故障时错误地将故障磁盘替换为新磁盘而未设置LUKS。

扩展和缩小:

扩展时,始终从堆栈底部开始,而顶部时则收缩。

例:

扩展 RAID -> LVM -> LUKS -> FS(如果卷组中有足够的可用空间,则前两个步骤是可选的):

  1. 添加新磁盘并创建md RAID。
  2. 将mdX设备添加到卷组。
  3. 扩展逻辑卷。
  4. 扩展LUKS设备。
  5. 扩展FS。

收缩率 RAID -> LVM -> LUKS -> FS

  1. 收缩FS。
  2. 收缩LUKS设备。
  3. 缩小逻辑卷。
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.