向我出售分区

向我出售分区

我经常想知道为什么人们如此热衷于分区驱动器,尤其是在 Unixy 操作系统(/usr、/var 等)上。这似乎不是 Windows 安装的常见主题。

分区似乎大大增加了一个分区被填满而其他分区有大量可用空间的可能性。显然,这可以通过仔细的设计和规划来避免,但事情可能会发生变化。我在机器上多次遇到过这种情况,主要是在别人设置的机器上,或者在相关操作系统的默认安装设置下。

我听到的另一个论点是它简化了备份。它如何简化备份?我还听说它提高了可靠性。同样,如何?

我遇到的磁盘存储问题几乎 100% 都是由磁盘的物理故障引起的。是否可以说分区可能会加速硬件故障,因为在将数据从一个分区移动或复制到同一磁盘上的另一个分区时,磁盘会发生抖动?

我并不是想过多地打扰别人,我只是想看看古老的管理实践的合理性。

答案1

  • 更快的 fsck。假设您的系统由于某种原因出现故障,并且在重新启动时需要运行 fsck。如果分区非常大,则 fsck 可能需要很长时间,并且在整个系统的 fsck 完成之前,系统上的任何内容都无法正常工作。如果您对系统进行分区,使根分区非常小,那么在等待较大卷的 fsck 完成时,您可能能够启动系统并运行一些基本服务。
    • 如果您的系统驱动器较小,或者系统上只有一项服务,那么这可能并不重要。
    • 对于日志文件系统来说,大多数时候这可能并不重要,但有时即使对于日志文件系统,您也必须运行完整的 fsck。
  • 由于您可以以只读方式挂载 fs,因此安全性得到了提高。
    • 例如,在正常使用期间,没有人需要写入 /usr。那么为什么不直接挂载文件系统使其为只读呢?在不需要写入时将文件系统设置为只读将防止一些脚本小子攻击,并可能防止您在无意中破坏东西。
    • 这可能会使系统维护更加困难,因为当您需要应用更新时,您需要将其重新安装为读写模式。
  • 针对特定服务/用途改进性能和功能。
    • 某些文件系统更适合特定的服务/应用程序,或者它们允许您配置文件系统,以便在某些情况下更好地运行。也许您的文件系统包含大量小文件,您需要更多 inode。或者您可能需要存储一些大文件、虚拟磁盘映像。

我认为你不应该为每个系统设置大量分区。就我个人而言,在大多数 Linux 服务器上,我只设置一个大分区。因为我的大多数系统都有较小的驱动器,并且用途单一,并充当一些基础设施角色(dns、dhcp、防火墙、路由器等)。在我的文件服务器上,我确实设置了分区以将数据与系统分开。

是否可以说,分区可能会加速硬件故障,因为在将数据从一个分区移动或复制到同一磁盘上的另一个分区时,磁盘会产生抖动?

我非常怀疑一个分区良好的系统是否会增加失败的可能性。

答案2

将 /home/ 分开的一个原因是您可以重新安装操作系统,而不必担心丢失用户数据。除此之外,将所有内容都挂载为只读或 noexec 可以提高安全性。如果用户无法在可以编写代码的任何地方运行代码,那么攻击途径就会减少一个。

不过,我只会在公共机器上考虑这个问题,因为一个分区的磁盘空间用完,而另一个分区的磁盘空间又用完,这是一个严重的麻烦。有办法解决这个问题,比如做软件 raid 或 ZFS,你应该能够轻松地动态调整分区大小,但我没有使用过它们。

答案3

  • 简化备份

您可以备份您想要的东西(通过 dumpfs 或类似工具),而不是您不需要的东西。dump(1) 是一个比 tar(1) 更好的备份系统。

  • 填充分区

这也是分区的一个理由。用户填满他们的主目录不会破坏服务器、使 Web 服务器瘫痪、阻止日志记录、阻止 root 登录等。

它还允许您更透明地将部分数据(例如 /home)移动到另一个磁盘:将其复制过来,然后挂载。如果您正在使用允许影子副本/快照/等等的东西,您甚至可以实时执行这些操作。

答案4

Zoredache 提出的所有论点都是有效的;有人可能会对细节有点吹毛求疵(如果系统存在的首要原因是依靠其他文件系统,那么让机器运行得更快以便你可以在 fsck 其他文件系统的同时做其他事情并没有多大用处);然而,它们都是事后辩解。

在非常古老的时代,您没有将文件系统放在单独的分区上——而是将它们放在单独的磁盘上,因为磁盘真的很小。想想 10MB。(1)因此,您有一个很小的 ​​/ 分区、一个 /var 磁盘、一个 /usr 磁盘、一个 /tmp 磁盘和一个 /home 磁盘。如果您需要更多空间,您可以购买另一个磁盘。

然后“大” 50MB 磁盘的成本开始低于登月计划,并且突然可以将整个系统放在一个具有可用用户空间的磁盘上。

尽管如此,由于磁盘大小与计算机能够生成的磁盘大小相比很小,因此隔离 /var、/opt 和 /home 以避免填充其中一个导致计算机崩溃仍然是一个好主意。

如今,在企业环境中,我不会对操作系统进行分区。数据会被分区,尤其是当数据是用户生成的时;但这通常是因为数据位于某种高速和/或冗余磁盘阵列上。然而 /var 和 /usr 都与 / 位于同一个分区中。

在家庭环境中,同样的事情 - /home 可能应该位于单独的磁盘/阵列上,以便可以安装/升级/中断/修复所需的任何操作系统版本。

原因在于,无论您猜测 /var 或 /usr 或任何树有多大,您要么会大错特错,要么会过度使用。我的一位老同学对分区深信不疑,当他最终坐在我创建的系统上进行 180 天的 fsck 时,我总是会感到难过。但是,在我的整个职业生涯中,我可以用一只手数出某些东西填满/并导致系统崩溃的次数,而今年到目前为止,我盯着某个系统看的次数也屈指可数,有人认为 /var 永远不需要超过(比如说)1GB,结果错了,让我只能盯着一个已满的 /var 和系统其他地方的 00 多 GB 的空闲空间,所有这些空间对我来说都像是在月球上一样。

在当今的大磁盘世界中,我认为没有任何真正的理由对操作系统树进行分区。用户数据,是的。但是为 /var 和 /usr 以及 /var/spool 等设置单独的分区呢?不。


(1)=我知道只要选这个尺寸,就会有人在评论里说10MB?太奢侈了。为什么我们的磁盘只是……

相关内容