在 Linux 中分区磁盘的最佳方法?(raid、分区或 LVM)

在 Linux 中分区磁盘的最佳方法?(raid、分区或 LVM)

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 控制器系统,因此您可以使用供应商的工具以最佳方式对其进行配置。

在这种系统中,不要做“太奇怪的”事情真的很重要。

相关内容