在Linux上具有高级function的ZFS / Btrfs / LVM2类存储?

我在Linux机器上有3个相同的内部7200 RPM SATA硬盘驱动器。 我正在寻找一个存储设置,这将给我所有这一切:

  • 不同的数据集(文件系统或子树)可以具有不同的RAID级别,因此我可以select性能,空间开销和不同数据集的风险权衡,同时拥有less量物理磁盘(非常重要的数据可以是3xRAID1,重要数据可以是3xRAID5,不重要的可重复数据可以是3xRAID0)。
  • 如果每个数据集都具有明确的大小或大小限制,则可以扩大和缩小大小限制(如果需要,可以离线)
  • 避免使用内核模块
  • R / W或只读COW快照。 如果是块级快照,则在快照过程中文件系统应该同步并停顿。
  • 能够添加物理磁盘,然后增大/重新分配RAID1,RAID5和RAID0卷以利用新的主轴,并确保没有主轴比其他主轴热(例如,在NetApp中,将RAID-DP RAID组扩展了几个磁盘将不会在没有明确的重新分配的情况下平衡它们之间的I / O)

不需要,但不错:

  • 透明压缩,每个文件或子树。 如果像NetApps一样首先分析数据的可压缩性并仅压缩可压缩数据,则更好
  • 重复数据删除不具有巨大的性能损失或需要大量内存(NetApp在周末会执行重复数据删除,这很好)
  • ZFS等无提示数据损坏的抵制(这不是必需的,因为我从来没有看到ZFS报告这些特定磁盘上的数据损坏)
  • 存储分层可以是自动的(基于caching规则)或用户定义的规则(是的,我现在拥有全部相同的磁盘,但是这将使我可以在将来添加读/写SSDcaching)。 如果是用户定义的规则,则这些规则应该能够在文件级别而不是块级别上升级到SSD。
  • 节省空间的小文件打包

我在Linux上试过ZFS,但是限制是:

  • 升级是额外的工作,因为该软件包位于外部存储库中,并与特定的内核版本绑定; 它没有与包pipe理器集成
  • 写入IOPS不会随着raidz vdev中的设备数量而扩展。
  • 无法将磁盘添加到raidz vdevs
  • 无法在RAID0上select数据,以减less开销并提高性能,而无需额外的物理磁盘或为ZFS提供磁盘的单个分区

LVM2上的ext4看起来像一个选项,除了我不能分辨是否可以收缩,扩展和重新分配到新的RAIDtypes的逻辑卷(当然,我可以在一堆文件上试验LVM)。 据我所知,它没有任何好的东西,所以我想知道是否有更好的东西。 我曾经看过LVM的危险和警告,但是再一次,没有一个系统是完美的。

你要求太多 这些是不切实际的要求,尤其是考虑到你正在谈论三重低速消费磁盘。 你在计划什么?

  • 在Linux和四个磁盘上使用ZFS 。 如果你正在谈论扩展,你可能有四个数据磁盘的空间。 你没有提到你的Linux发行版,但升级不是CentOS 6.x的问题。 镜子是可扩展的。 RAID-Z1 / 2/3集合根本不是。 设置压缩每个文件系统,并完成它。 您可以通过复制来重新平衡数据。 但是计划好一些,扩展问题不会是一个限制。 这为您提供压缩,快照,分层和数据完整性。 忘记在ZFS上重复数据删除。 你可能不需要它。 如果这样做,则应该计划所需的资源需求。

  • 至于ZFS在Linux上的限制,您应该了解规划ZFS存储设置的基本知识 。 使用ZIL设备来增加写入IOPS。

  • 有硬件RAID解决scheme,如HP智能arrays控制器线,这将允许在一组驱动器上的不同RAID保护…它在扩展期间自动重新平衡/重新分配数据。 减less是不可能的。 您可以将HP逻辑驱动器导出为ZFS的块设备,这样您就可以获得文件系统的好处,但也可以灵活使用底层硬件设备。 在以下示例中,zpools vol1vol2由与HP RAID控制器输出中的logicaldrive 2logicaldrive 3对应的单个设备组成:

ZFS池信息:

[root@ZFS-on-Linux ~]# zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT vol1 119G 48.2G 70.8G 40% 1.00x ONLINE - vol2 99.5G 42.6G 56.9G 42% 1.00x ONLINE - 

HP RAID控制器输出:

 Smart Array P400 in Slot 8 (sn: P61630G9SVN702) array A (SAS, Unused Space: 609621 MB) logicaldrive 1 (72.0 GB, RAID 1+0, OK) logicaldrive 2 (120.0 GB, RAID 1+0, OK) logicaldrive 3 (100.0 GB, RAID 5, OK) physicaldrive 1I:1:1 (port 1I:box 1:bay 1, SAS, 146 GB, OK) physicaldrive 1I:1:2 (port 1I:box 1:bay 2, SAS, 146 GB, OK) physicaldrive 1I:1:3 (port 1I:box 1:bay 3, SAS, 146 GB, OK) physicaldrive 1I:1:4 (port 1I:box 1:bay 4, SAS, 146 GB, OK) physicaldrive 2I:1:5 (port 2I:box 1:bay 5, SAS, 146 GB, OK) physicaldrive 2I:1:6 (port 2I:box 1:bay 6, SAS, 146 GB, OK) physicaldrive 2I:1:7 (port 2I:box 1:bay 7, SAS, 146 GB, OK) physicaldrive 2I:1:8 (port 2I:box 1:bay 8, SAS, 146 GB, OK) 

结合上面的两个,你得到了你的大部分要求。

这是你的愿望清单。

Linux md RAID( mdadm )+ LVM将为您带来大部分的需求,而且几乎没有任何好的东西。

您可以将磁盘分割成分区。 在不同的分区上执行不同级别的RAID。 将md RAID卷放入LVM卷组中,从VG创build逻辑卷。 在LV上放一个文件系统(如ext4)。 如果没有LVM,可以启动md RAID1。 因此,使用不带LVM的RAID1作为/ boot。 md RAID卷可以缩小和增长购买添加磁盘, LVM和ext4也是如此 。

LVM可以做快照。 但是它们不是本地的COW,所以如果快照使用相同的物理磁盘, 性能会受到影响。 它们最适合于备份时间点临时捕获,而不适用于像ZFS那样的无限制快照。

它可能看起来像这样:

 sda1 + sdb1 + sdc1 = md0 RAID1 sda2 + sdb2 + sdc2 = md1 RAID10 (yes, you can do odd numbered RAID10) sda3 + sdb3 + sdc3 = md2 RAID5 sda4 + sdb4 + sdc4 = md3 RAID0 md0 = no LVM, format as ext4, mount as /boot md1 = LVM, divide into two LVs Format one LV as ext4, mount as / (root) Use other LV for swap md2 = LVM, create one LV make the LV is smaller than the VG, to leave space for snapshots Format the LV as ext4, mount as /data md3 = LVM, one LV taking the whole VG Format as ext4, mounts as /stuff_i_want_to_lose