使用硬盘分区时对其进行修改

使用硬盘分区时对其进行修改

在 gparted 中,为什么我无法修改正在使用的分区(例如根分区),但在 Windows 中,我可以在启动时缩小根分区。

是否有任何程序可以用来修改正在使用的分区?

答案1

GParted 在这方面相当保守,但可以使用其他工具来完成;然而,根据分区方法(传统分区与 LVM)和使用的文件系统,存在显著差异。例如:

  • 您必须区分调整大小分区(它们是识别文件系统或其他数据结构的起点和终点的简单数据结构)和文件系统(它们是更复杂的数据结构,有助于识别文件、目录和相关元数据)。GParted 提供了一个用户界面来执行这两项操作,从而掩盖了这一重要区别。
  • 在调整“原始”使用的传统分区的大小时,您需要调整要更改的分区的大小,或者删除并重新创建该分区。您可以这样做从文件系统末尾增加其大小或如果您想减小分区的大小,请缩小文件系统。由于 Linux 内核处理这些事情的方式,可能很难让内核识别具有活动文件系统的分区的已更改分区大小,因此您可能需要在更改分区大小后重新启动。
  • 移动分区或通过更改其起始点来调整其大小需要重写其包含的大量文件系统。这是因为文件系统部分由相对于分区(或其他容器)起始位置的数据结构定义。GParted 或多或少透明地处理此问题,但如果您想使用其他工具来执行此操作,则需要非常小心地移动文件系统数据结构,并让调整大小后的分区从正确的位置开始。这是一项需要意志坚强的专家才能完成的任务;不要除非您知道自己在做什么,否则不要尝试此类操作!即使是专家也只有在备份后才会这样做。
  • 另一种数据结构类型是逻辑卷管理器 (LVM),这是识别文件系统的另一种方法。LVM 通常位于普通分区之上 - 也就是说,您可以将一个或多个分区指定为物理卷 (PV)在 LVM 中卷组 (VG),然后将该 VG 细分为逻辑卷 (LV),它们是文件系统的载体。尽管增加了复杂性,但 LVM 使调整文件系统大小变得更容易,因为 LV 更像文件 —— 您无需关心它们的开始和结束位置;您只需要知道 LV 的名称和大小。
  • 如果您使用 LVM,逻辑卷 (LV) 会保存文件系统,因此您通常关心的是调整 LV 的大小,而不是分区的大小。在使用 LV 时调整其大小很容易,并且可以通过 完成lvresize;但它们包含的文件系统可能仍需要单独调整大小。(不过,有时--resizefs选项lvresize会帮助完成此任务。)
  • 如果要增加 LVM 使用的总空间,可以添加一个新分区作为 PV,然后调整 VG 中的 LV 大小。如果 LVM 设置包含多个 PV,则可以反转此过程(尽管您可能需要使用 后跟 明确清除一个或多个 PV pvmovevgreduce。如果有一个大 PV,则需要使用 调整其大小,然后使用、、或其他工具pvresize调整包含分区的大小。fdiskpartedgdisk
  • 不同的分区支持不同的调整大小方法。对于流行的 ext4fs(及其前身 ext3fs 和 ext2fs),您可以使用它resize2fs来完成这项工作。此工具支持增加或减少未挂载文件系统的大小;但对于已挂载的文件系统,大小可以增加但不能减少。对于其他文件系统,您必须查阅文件系统自己的大小调整工具。
  • 当使用 LVM 时,类似的 GUI 工具system-config-lvm可以帮助调整 LV 大小。

我很少使用 Windows 工具;不过,我依稀记得,当您调整正在使用的 Windows 分区的大小时,其工具需要重新启动作为操作的一部分。如果这个记忆是正确的,那么从底层的角度来看,Linux 和 Windows 工具实际上并没有太大的不同;只是 Windows 帮助自动化所涉及的不同步骤,而您必须在 Linux 下明确地自己做不同的事情。在某些情况下,例如在增加 LV 的大小时,Linux 实际上可能比 Windows 更灵活。

为什么其中一部分与内核创建和操作数据结构的方式有关;内核倾向于假设正在使用的分区大小不会改变。话虽如此,我并不熟悉内部内核细节,只熟悉分区工具可以用来告诉内核更新其分区表数据的一些系统调用。内核处理这个问题的方式也时有变化;但这种变化需要对用户空间工具进行更改,而这可能需要一段时间才能传播。GParted 本身建立在许多其他层面上(最显著的是 libparted,还有 GUI 库、X Window 系统等),因此在内核层面上赶上新功能的速度可能会很慢。

该网站上有许多问题和答案,涵盖了许多特定的调整大小场景。在一个答案中涵盖所有这些内容会很乏味且不切实际。

相关内容