VMware 上的 Linux - 为什么使用分区?

VMware 上的 Linux - 为什么使用分区?

在虚拟化环境(在我的情况下是 ESXi)中安装 Linux VM 时,是否有任何令人信服的理由对磁盘进行分区(使用 ext4 时),而不是仅为每个挂载点添加单独的磁盘?

我能看到的唯一一点是,它可以更容易地查看磁盘上是否存在数据,例如使用 fdisk。

另一方面,我可以看到一些很好的理由不是使用分区(显然,除了 /boot 之外的其他分区)。

  • 扩展磁盘更容易。只需增加虚拟机的磁盘大小(通常在 VCenter 中),然后重新扫描虚拟机中的设备,并在线调整文件系统的大小。
  • 不再存在分区与底层 LUN 对齐的问题。

我找不到太多关于这个主题的内容。我是否错过了什么重要的东西?

答案1

这是个有趣的问题...

我认为没有明确的答案,但我可以提供一些历史背景,说明围绕这一主题的最佳实践是如何随着时间的推移而发生变化的。

自 2007 年以来,我必须支持在 VMware 环境中以各种形式部署的数千台 Linux VM。我的部署方法已经发展,并且我拥有独特的(有时不幸) 继承和重构其他工程师构建的系统的经验。

过去的日子……

在过去(2007 年),我早期的 VMware 系统就像我的裸机系统一样进行了分区。在 VMware 方面,我使用分割的 2GB 厚文件来组成 VM 的数据,甚至没有考虑多个 VMDK 的概念,因为我很高兴虚拟化甚至可以工作!

虚拟基础设施...

在 ESX 3.5 和早期 ESX/ESXi 4.x 版本(2009-2011 年)中,我使用的是 Linux,在单片机上正常分区厚的配置的 VMDK 文件。必须预先分配存储,这迫使我以与实际硬件类似的方式考虑 Linux 设计。我为操作系统创建了 36GB、72GB、146GB VMDK,对常用的 /、/boot、/usr、/var、/tmp 进行分区,然后为“数据”或“增长”分区(无论是 /home、/opt 还是特定于应用程序的分区)添加另一个 VMDK。同样,这个时代的物理硬盘大小的最佳点是 146GB,而且由于预先分配是一项要求(除非使用 NFS),所以我需要谨慎使用空间。

精简配置的出现

VMware 开发了更好的功能精简配置在后来的 ESXi 4.x 版本中,这改变了我开始安装新系统的方式。随着 5.0/5.1 中添加的完整功能集,一种新的灵活性允许更多创造性的设计。请注意,这与虚拟机上不断增强的功能保持同步,就单个虚拟机可以分配多少 vCPU 和多少 RAM 而言。与过去相比,可以虚拟化更多类型的服务器和应用程序。这是正确的,因为计算环境开始完全虚拟化。

LVM 很糟糕...

当虚拟机级别的热添加功能全面到位并变得普遍时(2011-2012 年),我当时正在与一家公司合作,该公司不惜一切代价努力维持客户虚拟机的正常运行时间(愚蠢的)因此这包括在线 VMware CPU/RAM 增加和有风险在现有 VMDK 上调整 LVM 磁盘大小。此环境中的大多数 Linux 系统都是单个 VMDK 设置,在 LVM 之上有 ext3 分区。这很糟糕,因为 LVM 层添加了复杂性和不必要的风险操作。例如,/usr 空间不足可能会导致一系列错误决策,最终意味着从备份中恢复系统……这在一定程度上与流程和文化有关,但仍然……

分区势利......

我借此机会尝试改变这一点。我有点分区势利者在 Linux 中,我认为文件系统应该分开以用于监控和操作需求。我也不喜欢 LVM,尤其是 VMware 和执行您所问的功能。因此,我将 VMDK 文件的添加扩展到可能增长的分区。/opt、/var、/home 可以根据需要获取自己的虚拟机文件。这些将是原始磁盘。有时,这是一种更简单的方法来动态扩展特定的小分区。

奥巴马医改……

随着非常知名的客户,我的任务是设计Linux VM参考模板,该模板将用于创建他们的极其可见的应用程序环境。应用程序的安全要求需要独特的坐骑组合因此与开发人员合作,尝试将非增长分区塞进一个 VMDK,然后为每个具有增长潜力或有特定要求(加密、审计等)的挂载添加单独的 VMDK。因此,最终这些虚拟机由 5 个或更多 VMDK 组成,但为将来调整大小和保护数据提供了最佳的灵活性。

我今天要做的事情...

目前,我对 Linux 和传统文件系统的一般设计是将操作系统放在一个薄 VMDK(分区)上,将其他内容放在独立的 VMDK 上。我会根据需要进行热添加。对于像 ZFS 这样的高级文件系统,一个 VMDK 用于操作系统,另一个 VMDK 用作 ZFS zpool,可以调整大小、划分为其他 ZFS 文件系统等。

答案2

您在很多方面都是对的,我明白您的观点 - 但有一个问题可能会很棘手。如果您使用资源池(我知道我不会,真讨厌),那么如果虚拟机拥有更多磁盘,它们就可以获得更多的 IO 时间 - 在资源极其受限的情况下,拥有两个磁盘的虚拟机可以获得比拥有单个磁盘的虚拟机多两倍的 IO 资源。这对您来说可能不是问题,但我想指出这一点。

编辑 - 哦,这也会使捕捉速度稍微慢一些,但这可能不是一个问题。

答案3

当我在一家“大型虚拟化软件公司”从事基础设施工作时,我们经常需要增加虚拟机文件系统的大小。当时我们使用 ext3/4。

增加虚拟磁盘非常容易,在实时操作系统中获取新设备大小相对容易(在 /sys 中查找),实时调整 ext3/4 文件系统的大小很容易,但始终看似不可能(实时执行)的是调整分区大小。

您必须使用 gparted 或使用 fdisk 重写/调整分区表大小 - 但它始终被内核锁定,并且需要重新启动才能让内核采用新的布局(partprobe 也没有这样做。)

我将许多系统移至 LVM,调整文件系统大小变得简单,几乎是一种愉快的体验!

  • 增加虚拟机外部的虚拟磁盘映像
  • 在虚拟机中,
    • 戳 /sys 重新扫描磁盘指标(echo "1" > /sys/class/scsi_device//device/rescan)
    • pvresize /dev/sdX(调整 LVM 中的物理卷大小)
    • lvresize --extents +100%FREE /dev/VG/lvolXX (调整 LVM 中的逻辑卷大小)
    • resize2fs(调整文件系统大小)

所有这些都可以在实时系统上安全地完成——并且无需重启!

为什么不是裸盘?这让我很紧张——我觉得裸盘还没有被广泛接受,但我认为我们即将被广泛接受。btrfs 邮件列表中有一个与此相关的帖子:

http://www.spinics.net/lists/linux-btrfs/msg24730.html

但是裸盘只需要重新扫描和resize2fs。

因此,总而言之,是的,如果可以的话,请避免使用分区表。

答案4

是否最好这样做取决于您的系统。

每种设置都有优点和缺点。

但单驱动器的主要优点如下:

  1. 简单:单个驱动器只有一个文件,可以轻松分发和复制。
  2. 主机操作系统提示:单个文件将被视为单个数据块,因此主机操作系统将知道客户机访问的序列将全部位于该文件中。在某些主机操作系统配置中,只需将所有驱动器映像放在同一个文件中即可实现这一点,但情况不一定如此。

然而,多驱动器也有其优势。

  1. 裸机亲和力/手动位置:使用单个驱动器,您将被锁定到该驱动器的单个裸机亲和力。
  2. 大小限制:如果您的系统对驱动器或文件的大小有限制,那么您可能会在非常大的系统上遇到这些限制。
  3. 只读卷用于安全:这是一大优势。如果您的操作系统主卷在虚拟机端是只读的,那么它将提供重大的安全优势,从本质上阻止虚拟机内部的程序编辑客户机的基本操作系统。使用单独的数据驱动器允许您创建只读驱动器,这些驱动器可以以读写方式启动以进行维护和更新,而无需仅使用洁净室模板数据,从而完全防止从服务器内部修改重要的操作系统目录。

相关内容