Linux 中划分磁盘的方式有几种:raid、分区、LVM。该如何选择?
我们有一台带有 10 多个磁盘的服务器。系统中的某些数据是临时的,我们希望对它们使用 RAID 0。有些数据很重要,所以我们使用 RAID 1。当然,还有一些操作系统和应用程序,但是我们可以承受它们的消失,因此没有为它们计划 RAID。
以下是文件列表以及为它们计划的 RAID:
/ : no raid
/opt/app/logs : raid 0
/opt/data/tmp : raid 0
/opt/data/database/data : raid 1
/opt/backup : raid 1
有几种方法可以分割磁盘:
1)使用RAID:
one disk without RAID
2 RAID 0
2 RAID 1
2)使用分区:
one disk without RAID
one RAID 0 with 2 partitions
one RAID 1 with 2 partitions
3)使用LVM:
one disk without RAID
one RAID 0 with 2 logvols
one RAID 1 with 2 logvols
请问,有人能弄清楚这一点吗,根据行业实践或个人经验或参考专家/书籍来告诉你?
我们正在进行一个实际生产项目。抱歉,我们没有足够的知识,但我们必须执行它。
英语不好,如果您需要更多信息,请告诉我。
谢谢!XM
编辑:Linux 设置了 2 个分区(其中一个是 /boot),其中一个分区在其磁盘上有 2 个日志卷(swap、/);我们不关心它们。
答案1
我喜欢的布局是:
2 disks for the OS in RAID1 (protected against a HDD failure)
2n disks for the RAID10 (protected against a HDD failure)
rest of the disks for RAID0 (no redundancy, maximum speed)
如果您确实坚持使用单个系统磁盘,它不会改变布局。
在(每个)系统磁盘上,我都会为 /boot 文件系统创建一个单独的分区。我将其余磁盘设为 LVM 物理卷。我喜欢让 OS 文件系统填满单独的逻辑卷(/tmp、/var、/opt,如果有东西在其中写入日志)。因此,这将导致 /boot(镜像,无 LVM)和 /、/tmp、var 以及可能的 /opt 文件系统,每个文件系统都位于镜像磁盘上的单独逻辑卷上。
在每个其他磁盘上,我将创建一个 Linux raid 类型的分区,并创建适当的 RAID 阵列(一个 RAID 10,一个 RAID 0)。在每个阵列上,我将创建一个 Linux LVM 类型的分区,并创建两个单独的卷组,一个用于冗余数据,一个用于非冗余数据。然后,对于您计划创建的每个文件系统,我将创建一个逻辑卷。
我建议在每个卷组中留出一些未使用的空间,这样您就可以执行 LVM 快照并对文件系统进行 fsck,而无需关闭服务器。我还会禁用所有文件系统的自动 fsck(tune2fs -i 0 -c 0 /device/name)。
基本原理
1) 操作系统磁盘镜像。
系统硬盘故障会导致整台机器瘫痪。您的数据受到保护,但生产将停止,直到您能找到替换磁盘并重新安装/恢复操作系统为止。在生产环境中,安装一个磁盘通常更便宜。
2)对磁盘进行 RAID 阵列分区。
我使用的所有服务器都有分区表。您可能只使用整个磁盘作为 RAID / LVM 卷,但最终会有一些机器有分区表(内容在 /dev/sdX1 上),而有些机器没有(内容在 /dev/sdX 上)。如果发生故障并需要在压力下恢复,我希望环境中少一个变量。
3)RAID 阵列上的 LVM
LVM 有两个优点:轻松更改文件系统大小,并且能够在不关闭整个服务器的情况下对文件系统进行 fsck。静默数据损坏是可能发生的,而且确实会发生。检查它可能会让您省去很多麻烦。
4)tune2fs -i 0 -c 0
重启后对大型文件系统进行意外 fsck 是一件耗时又费脑力的事情。禁用它并定期对文件系统的 LVM 快照进行 fsck。
问题:/opt/backup 是您计划保存生产环境备份的地方吗?
不。
将备份放在机器的其他地方。恶意程序、拼写错误的命令(例如rm -rf / tmp/unimportant/file
)或水溅到/淹没在错误的地方都会导致您的系统和备份丢失。如果其他方法都失败了,请准备两个外部 USB 磁盘进行备份,这比将分区放在同一个盒子里要好。
答案2
您没有提供太多有关各个区域的大小及其使用方式的信息。假设 tmp 需要快速随机访问并存储较小的文件,数据库具有事务性工作负载,日志主要是只写的,并且备份很少恢复,我可能会选择:
/opt/data/database/data
4 (maybe 6) dedicated disks as RAID 1+0
这大概就是服务器的价值所在——所以您希望它尽可能快/尽可能安全。
只有在您将大量非常大的文件存储在那里并使用顺序访问时,临时文件系统的 Raid 0 才有意义。通常,这不是我期望看到的临时文件的访问模式。Raid 0 适用于您的日志 - 但您真的想专门为日志使用 2 个磁盘吗?我可能会选择将 2 个磁盘分成 2 个分区,每个磁盘一个作为用于日志的 raid 0,每个磁盘一个作为用于 tmp 的 raid 1。
我强烈建议对根文件系统进行镜像以实现容错。因此,这里有 2 个磁盘,同样分为 2 个分区,镜像用于根文件系统,条带化用于交换。
根据临时空间和虚拟内存之间的关系,如果他们没有做同样的事情,将 2 组 2 个临时分区合并并交换成 4 个磁盘条带集阵列可能是明智的。
....还有 2 个磁盘用于备份。但我建议您将备份保存在其他地方。如果是我,我会将它们用作数据库 raid 集的临时成员 - 然后拆分该集并将它们作为独立集启动/在它们上启动 DBMS 的新实例,以最短的停机时间获得备份。
至于您是否使用分区或 LVM - 没有太多可供选择 - 我倾向于使用分区,因为它使配置一组非常混乱的交叉依赖关系变得更加困难。
答案3
您可能应该按照存储供应商的建议去做。假设您有一个硬件电池备份的 RAID 控制器系统,因此您可以使用供应商的工具以最佳方式对其进行配置。
在这种系统中,不要做“太奇怪的”事情真的很重要。