推荐的方式将较小的分区合并为一个大目录

推荐的方式将较小的分区合并为一个大目录

我的服务器上有一个特定的分区 (/var),几天后就会填满。我正在运行一个繁忙的邮件服务器,所有用户邮件都发送到这里。

但是,现在我需要增加存储空间以容纳更多电子邮件。

Filesystem      Size  Used Avail Use% Mounted on
udev            3.9G  4.0K  3.9G   1% /dev
tmpfs           796M  556K  796M   1% /run
/dev/sda6       254G   32G  209G  14% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
none            5.0M  4.0K  5.0M   1% /run/lock
none            3.9G   80K  3.9G   1% /run/shm
none            100M     0  100M   0% /run/user
/dev/sda1       188M   66M  114M  37% /boot
/dev/sda7       1.6T  1.2T  364G  76% /var

所以在网上查了很多资料,也有一些建议。

我遇到的第一个是使用 LVM 分区。因此,我可以向服务器添加第二块硬盘,然后使用 LVM 将两个硬盘合并为一个逻辑分区。当我仍在阅读如何准确做到这一点时,我读到如果一个驱动器发生故障,那么数据就会丢失,并且没有简单的恢复方法。这让我开始寻找第二种选择。

第二个是使用联合文件系统,它使我能够将多个目录合并为一个。到目前为止,我已经遇到过这些实现; unionfs、aufs、mhddfs 和overlayfs。在这种情况下,我可能会启动第二个硬盘,或者从填充较少的分区借用一些空间,就像我的根目录一样。

我已经在本地主机上尝试了overlayfs,因为它已被添加到主流Linux内核中。

有很多选项,我不确定我应该在生产关键型邮件服务器上采用哪种解决方案。我希望得到一些指点。谢谢。

答案1

首先,覆盖/联合文件系统不是这里的正确答案。这些情况适用于您有一个包含大部分数据的只读文件系统,并且需要在可写文件系统之上进行一些有限的自定义(例如,LiveCD 使用覆盖文件系统来允许可写文件系统的印象,甚至尽管媒体是只读的)。

LVM 几乎肯定是您想要的,而且它不一定不可靠(它可以通过复制进行 RAID 设置)。或者,您可以放入一个新的(更大的)硬盘驱动器,然后将/var其放在上面,尽管我建议只将/var/mail您的主要邮件存储目录放在上面,并将其余部分保留在原处。

在理想情况下,您应该考虑获取多个相同大小的硬盘驱动器,并在/var/mail最上面的硬盘驱动器上运行 RAID10 或 RAID5/6,然后努力让用户清理硬盘上的旧电子邮件。服务器(这种情况是大多数邮件提供商对服务器上的邮件存储设置上限的部分原因)。

答案2

您的最佳选择是添加至少两个大型驱动器(例如 4TB 或更多)并使用某种形式的 RAID-1 或​​ RAID-10 - 如果您的“关键任务”服务中没有任何存储冗余,您可以做错了。

如果仅添加两个驱动器,请使用 RAID-1。对于四个或更多使用 RAID-10。我建议不要对邮件使用 RAID-5 或 RAID-6,因为邮件存储需要大量 I/O 带宽,而 RAID-5 比 RAID-1/RAID-10 慢得多(RAID-6 甚至更慢) 。

实现 RAID-1/RAID-10 的方法有多种,包括mdadm、 和lvm。使用其中任何一个,您都可以创建 RAID 阵列,使用您首选的文件系统对其进行格式化,然后将其安装在/var/mail.您还可以根据需要在将来添加更多驱动器,只要您的文件系统支持增长(例如 xfs 有xfs_growfs, ext2/3/4 有resize2fs)。

另一个选项是使用btrfs。它内置了对类似 RAID 的功能的支持,并且在您向其中添加更多存储驱动器时会自动扩大文件系统。它还支持错误检测和更正、快照、子卷、透明文件压缩等。

ZFS 具有与 btrfs 类似的功能(也是我个人使用的),但缺点是它不是(并且可能永远不会由于 CDDL 和 GPL 之间的许可证不兼容)成为主线内核的一部分。它仅作为补丁或 DKMS 模块提供。如今这不是什么大问题,但需要做更多的工作。

我的建议是使用 btrfs 或 zfs。 IMO 现在没有任何充分的理由使用普通的旧 mdadm 或 lvm,除非您已经在使用它并且在该技术方面拥有丰富的经验和投资。

此站点上有许多问题和解答,详细介绍了如何设置 mdadm、lvm、btrfs 和/或 zfs 等。

无论如何,无论您如何实现 RAID 或类似 RAID 的文件系统,您都必须以最短的停机时间将旧邮件传输到新文件系统。在所有情况下,过程都类似于:

  1. 安装新驱动器。如果您没有热插拔托架,则需要一些停机时间。

  2. 设置新的 raid 和/或文件系统

  3. 将其安装为/var/mail.new

  4. 同步/var/mail//var/mail.new/

  5. 您可以根据需要多次重复步骤 4,直到有时间完成此过程(最好在工作时间以外完成)。除了步骤 1 中可能出现的一些停机时间之外,到目前为止不应该有用户可见的停机时间......最多,他们可能已经注意到作业rsync运行时系统比平常慢一些。

  6. 停止你的 MTA(sendmail、exim、postfix 或其他)和 pop/imap 守护进程,以及任何其他写入/var/mail/.如果您有任何用户登录 shell 来阅读邮件(例如使用 mutt),请告诉他们注销,并且在完成之前不要让他们再次登录。

    简而言之,您需要停止写入/var/mail.您稍后将在步骤 13 中重新启动它们。

  7. 运行最后的rsyncfrom /var/mail/to/var/mail.new/来同步自上次运行以来的所有更改。

  8. mv /var/mail /var/mail.old

  9. mkdir /var/mail

  10. unmount /var/mail.new and re-mount it as /var/mail (perhaps with mount --move /var/mail.new /var/mail as mentioned by Austin Hemmelgarn)

  11. 检查 的所有权和权限/var/mail.old并确保/var/mail完全相同。

    这可以通过以下方式轻松完成:

    chmod --reference=/var/mail.old /var/mail

    (注意--reference需要 GNU 版本的chmod,这是 Linux 上的标准)

  12. 编辑/etc/fstab以便/var/mail在重新启动后始终安装新文件系统

  13. 您现在可以重新启动 MTA、pop 和 imap 服务并允许用户再次登录。密切监视它以确保它正常工作。

  14. 在您闲暇时,当您确定新设置工作正常并且不再需要旧邮件目录时,您可以删除/var/mail.old及其所有内容。

顺便说一句,执行此操作后,您最终将获得超过 1TB 的可用空间/var。这可能超出了您的需求。

相关内容