RAID、LVM 和 LUKS 的最佳顺序

Tho*_*mas 20 linux raid debian lvm luks

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

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

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

RAID --> LVM --> LUKS --> ext4
Run Code Online (Sandbox Code Playgroud)

或者我可以用不同的顺序:

RAID --> LUKS --> LVM --> ext4
Run Code Online (Sandbox Code Playgroud)

或者甚至:

LVM --> RAID --> LUKS --> ext4
Run Code Online (Sandbox Code Playgroud)

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

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

有没有这样做的“最佳方式”?

Yan*_* Li 21

首先,LUKS 和 LVM 的顺序取决于是否要为不同的 LV 设置不同的 LUKS 密码或其他设置。如果说,你需要为不同的LV设置不同的密码,你肯定需要把LUKS放在LVM之上。另一方面,如果所有 LV 共享相同的密码和设置,如 keylen,您希望 LVM 下有 LUKS,这样您就不必处理拥有多个 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应该自动支持丢弃如果您使用新内核。

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


Mar*_*ian 6

如果你想要所有的 RAID、LUKS 和 LVM,我会推荐RAID -> LUKS -> LVM -> FS. RAID --> LVM --> LUKS --> LVM --> FS没有比RAID -> LUKS -> LVM- 扩展卷只需RAID -> LUKS向卷组添加更多设备。

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

当用户以错误的顺序扩展/调整逻辑卷的大小时,在逻辑卷之上扩展 LUKS 是一个常见的问题根源。在整个 md RAID 设备上拥有 LUKS 将简化调整大小 - 添加新的 md 设备,在其上创建 LUKS,将设备添加到/etc/crypttab(至少在 Fedora 和 RHEL 克隆上)并扩展您的卷组。如果 root 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. 缩小逻辑卷。