简单的分区调整操作(比如本系列第 1 部分描述的)通常都能顺利完成。但是,有时候您需要做一些不同的事情或者排除故障,本文涵盖了其中的一些情况。本文第一部分介绍 LVM 配置及其如何与分区调整相互作用。第二部分介绍故障排除技术。要详尽地描述调整分区时可能出现的所有问题,足够写本书了,但是几个基本的原则可以帮助您解决常见问题。最后,本文介绍了几个调整分区的备选方案,如果您遇到的问题无法逾越时,可以使用。
调整 LVM 大小
LVM 是一个磁盘分配技术,补充或替换传统分区。在 LVM 配置中,一个或多个分区,或者甚至是整个磁盘,被分配为卷组
中的
物理卷,卷组转而分成
逻辑卷。然后在逻辑卷上创建文件系统,这就像传统配置中的分区。这种磁盘分配方法复杂性增加了,但好处是比较灵活。一个 LVM 配置使得将几个小磁盘的磁盘空间合并成一个大的逻辑磁盘成为可能。对于分区调整来说,更重要的是逻辑磁盘可以被创建、删除和重新分配大小,就像文件系统中的文件那样;您不需要考虑分区起始点,只需要考虑它们的绝对大小。
注意:本文中我不想介绍如何建立一个 LVM。如果您还没有使用一个 LVM 配置,您可以将您的系统转换为使用它的系统,但您可以参考其他文档,比如 Linux LVM HOWTO(参见 参考资料)学习怎样做。
调整物理卷大小
如过您已经调整了非 LVM 分区,如本系列第 1 部分所述,而现在想要向您的 LVM 配置添加空间,您有两个选择:
- 您可以在空白空间中创建一个新分区,然后将这个新分区添加到您的 LVM。
- 如果有一个 LVM 分区与新空间相邻,您可以调整这个现有分区的大小。
不幸的是,GParted(也称为 Gnome Partition Editor)工具,如本系列第 1 部分所述,不支持调整 LVM 分区大小。因此向您的卷组添加空间最简单的方法是在剩余空间中创建一个新分区,并将其作为一个新物理卷添加到现有的卷组中。
尽管 GParted 不能直接创建一个 LVM 分区,但您可以使用以下工具来进行创建:
- parted(文本模式 GNU Parted)
- fdisk 用于 Master Boot Record (MBR) 磁盘
- gdisk 用于全局唯一标识符(GUID)Partition Table (GPT) 磁盘
如果您使用 parted,那么您可以使用 set 命令来打开 lvm 标记,正如在 set 1 lvm on 中标记分区 1 作为一个 LVM 分区。如果使用 fdisk,您可以使用 t 命令来将分区类型代码设置为 8e。在 gdisk 中您可以同样这样做,除非 LVM 分区的类型为 8e00。
无论是那种情况,您都必须使用 pvcreate 命令来在分区上设置基本 LVM 数据结构,然后使用 vgextend 代码将分区添加到卷组。例如,要将 /dev/sda1 添加到现有的 MyGroup 卷组,输入以下命令:
pvcreate /dev/sda1 vgextend MyGroup /dev/sda1
完成这些修改之后,您就可以在您的卷组中扩展逻辑卷了,正如之前描述的。
调整逻辑卷大小
对于文件系统,调整逻辑卷大小比调整分区大小要简单一些,因为 LVM 以分区的形式避免了预留相邻编号扇区集合。调整逻辑卷本身可以通过 lvresize 方法完成。该命令带有一些选项(详情参见其 手册 页),最重要的是 -L,它需要一个新的大小,或者在原大小上进行修改,修改可以通过首位的加号(+)或者减号(-)表示。您必须提供到逻辑卷的路径。例如,假设您想要在 MyGroup 组中将 usr 逻辑卷的大小增加 5 gibibytes(GIB)。您应该进行如下操作:
lvresize -L +5G /dev/mapper/MyGroup-usr
该命令调整了特定逻辑卷的大小。记住,这种改变就像对单独一个分区进行的。也就是说,包含在逻辑分区中的文件系统的大小不会改变。为了调整文件系统,您必须使用一个特定文件系统工具。比如 resize2fs、resizereiserfs、xfs_growfs 或者挂载 Journaled File System (JFS) 时的 resize 挂载选项。如果不使用大小选项,所有这些工具将调整文件系统来填满逻辑卷大小,在增加一个逻辑卷时这是很方便的。
如果您想要缩小一个逻辑卷,任务就有点复杂。首先您必须调整文件系统大小(使用 resize2fs 或者类似工具),然后缩小逻辑卷来匹配新的大小。如果您故意将逻辑卷的大小设置的太小,那么就有潜在的破坏错误,因此,我建议您,首先缩小文件系统,使其比您的目标大小小很多,接着将逻辑卷调整到合适的大小,然后调整文件系统大小,最后再增加逻辑卷大小,依赖于自动调整特性来使文件系统正好填满新逻辑卷。
同时也要记住,尽管您可以缩小大多数本地 linux 文件系统,但您不能缩小 XFS 或 JFS。如果您需要缩小一个含有此类文件系统的逻辑卷,您可能必须创建一个新的、更小的逻辑卷,将第一个卷中的内容复制到新卷中,颠倒挂载点,然后删除原始卷。如果您缺少足够的可用空间来进行这一操作,您可能会被迫使用一个备份作为中转。
使用 GUI LVM 工具
尽管之前介绍的文本模式工具可以完成这项工作,但是它们是令人生畏的。如果您喜欢使用图形化用户界面(GUI)工具,至少有两个可用于 LVM 操作:
- kvpm — 这是一个集成了 K Desktop Environment (KDE) 的工具,支持访问常见 LVM 操作,包括逻辑卷调整选项。
- system-config-lvm — 这个程序源自于 Red Hat,但是也可用于其他版本。它类似于 kvmp,它支持使用点选式访问方法来访问 LVM 管理,包括调整大小操作。
二者之中,system-config-lvm 提供一个更为简单友好的用户界面;而它们都可以完成工作。图 1 展示了运转中的 system-config-lvm。要调整逻辑卷,需要在左面板单击其名字,然后单击中间面板的 Edit Properties 按钮。然后您可以使用一个滑块来调整卷大小。
图 1. GUI 工具调整逻辑卷大小相对较为容易
排除故障
不幸的是,分区大小调整操作有时候并不能像预期的那样运行。最常见的是,调整软件报告的错误,通常是一条加密的消息。尽管此类问题有许多原因,但是您可以通过应用一个简单工作区来战胜这些困难,比如修复文件系统问题、将一个复杂的调整操作分成几个小块。
修复文件系统问题
调整失败一个常见的原因是文件系统被损坏。所有生产文件系统包括文件系统恢复工具,使您可以修复此类问题。因此在调整之前就在文件系统上运行这些工具,通常调整操作较为顺畅。
在 Linux 中,文件系统检查工具被称为 fsck,您可以通过传递想要检查的文件系统相关的设备文件名来调用它,正如在 fsck /dev/sda1 中检查 /dev/sda1。然而,fsck 实用工具大部分是一个特定文件系统工具的前端。比如 e2fsck(针对 ext2fs、ext3fs 和 ext4fs)。通过直接调用特定文件系统工具,通常可以获得更高级选项的访问权。例如,e2fsck 的 -f 选项强迫它检查设备,即使文件系统是空的。这些选项对于发现损坏是必须的,而这些损坏在粗略检查过程中不易被发现。检查特定文件系统的帮助程序的文档,了解这些选项。
多数情况下,必须在一个已卸载的文件系统上运行 fsck 或帮助程序。因此,您可能需要从一个紧急引导磁盘来进行这些操作,如本系列第 1 部分所述。
如果您在使用非 Linux 文件系统遇到问题时,您能够使用 fsck 来查看它;然而您也需要将其引导到文件系统的本地操作系统来做这项工作。特别是,在 Linux 中 Microsoft® Windows® New Technology File System (NTFS) 文件系统有独一无二的基本维修工具。想要检查 NTFS 工作是否进展顺利,您必须使用 Windows CHKDSK 实用工具。您需要运行这个实用工具几次,直到它报告磁盘不再有错误。Linux ntfsfix 实用工具执行 Linux 中很少检查的文件系统,并将它们标记为下次 Windows 引导时自动检查。
尽管本质上不是一个文件系统集成问题,但磁盘碎片是另一个需要注意的问题。有时候,您可以在调整操作之前,执行一个磁盘碎片整理操作来排除问题,对于 Linux 本地文件系统这一任务几乎不会用到(通常也没必要);然而,对于 File Allocation Table (FAT) 或者 NTFS 分区,这是很有帮助的。
分解操作
如果您开始进行大量的调整以及将操作移到 GParted 的工作,而操作失败,那么您可以尝试一次只输入一个操作,然后立即单击 Apply 按钮。您仍然可能遇到问题,但是至少您可以执行其他操作,不再依靠出现问题的那个操作。根据具体情况,至少可以实现部分总体目标,或者找到解决问题的方法。
在某些情况下,您可能需要跨多个实用工具分解调整操作。例如,您可以使用 Windows 或 Mac OS X 实用程序来调整 FAT、NTFS 或 Hierarchical File System Plus (HFS+) 分区大小。尽管 GParted 是 Linux 中调整分区大小最易操作的方法,如果只有一个操作出现问题,使用基础的文本模式实用工具,比如 resize2fs,可以给您提供更好的诊断输出,甚至在 GParted 失败的地方也会成功。然而,您要记住多数文本模式工具要么可以调整分区,要么可以调整文件系统大小,但是不能两个同时调整;您必须将两种工具合并到一起来调整一个分区及
其文件系统。GNU Parted 实用工具是一个例外,像它的 GUI “近亲” GParted 一样,同时可以调整分区及其文件系统的大小。
转到计划 B
有时候试图调整您的分区行不通。或许是文件系统出了一个不容易解决的错误,或许是您想要缩小一个不能缩小的文件系统(例如 XFS 或 JFS),在这些情况下,您必须选择一个备用方案,比如迁移现有分区结构的目录、执行备份 - 重新分区 - 恢复(backup-repartition-restore)操作或者添加更多磁盘空间。
迁移目录不需要重新分区
有时候,您可以迁移目录,而实际上不需要对磁盘进行重新分区。诀窍是使用符号链接来从一个位置指向另一个位置,甚至跨分区。例如,假设您正在使用 Gentoo 系统,它可以消耗 /usr/portage 和 /var/tmp/portage 目录下大量磁盘空间。如果您在建立系统时没有考虑到这一需要,您可能会耗尽空间。然而,在隔离的 /home 分区上可能也有可用空间,为了让 Portage 使用这些空间,您可以在 /home 下创建一个或多个目录,将 /usr/portage 或 /var/tmp/portage 内容复制到新的目录,删除原始目录,在原始目录的位置创建符号链接,指向新的 /home 子目录。
这个方法是有效的,且在较小范围内是方便的;然而,却创建了一个非标准系统。因此,我建议您少使用此方法,最好只是短期使用 — 例如,作为等待新硬盘到来时的一个权宜之策,或者用于您计划一到两个月检索一次的系统。
备份、重新分区和恢复
开发文件系统调整工具之前,要对磁盘重新分区,惟一可行的方法是备份其内容、重新分区(创建新的空文件系统),然后将备份恢复到重新分区的磁盘。该方法连续运行,但对于非破坏性的重新分区,使用 GParted 当然比使用此方法方便多了。换句话说,为了安全起见在调整分区大小之前最好先创建一个备份。出于安全性的考虑,无论如何您必须做这一半工作。
现在,经常使用一个外部硬盘驱动器作为备份介质。购买千兆字节的外部磁盘超不过 $100,篡改磁盘分区之后,您就可以使用它们备份您的重要文件,来在系统之间转移较大的文件,或者以其他方式。此外,您也可以使用可记录的 DVD、磁带装置或网络服务器作为备份系统。
备份软件包括 tar 这类旧备用工具,以及 Clonezilla 这类新工具。细节各不相同,具体根据软件和备份介质而定,因此您需要参考备份软件文档获取详细信息。
如果您想要修改您的 Linux 引导分区或者任何一个基础根(超级用户)访问必须的分区,您需要从一个紧急引导系统执行这些操作,本系列的第 1 部分介绍了这类系统。
添加磁盘空间
添加磁盘是重新分区一个切实可行的备选方案,有时候,添加磁盘空间可能会更好。磁盘容量持续增加,比起那些使用了好几年的磁盘新磁盘可能更可靠。
如果您选择用一个新磁盘替换一个现有磁盘,您应该将现有系统转移到新磁盘,用 Clonezilla 这类工具或者使用旧工具,比如 fdisk 和 tar。您可能需要重新安装引导加载程序,例如在这项任务中,使用 Super Grub Disk 工具重新安装引导加载器可能会很有用。您可以使用这个基于 CD 的引导加载器引导您的系统,然后使用 grub-install 或者一个类似的工具来将 GRand Unified Bootloader (GRUB) 重新安装到您的新硬盘上
如果您购买一个新磁盘作为补充,而不替换您的现有磁盘,您需要确定转移到新磁盘的数据(如果有)。您应该使用 fdisk、GParted 或其他工具对新磁盘进行分区,并将文件转移到新磁盘,然后通过适当地编辑 /etc/fstab,在您的现有目录树中永久地挂载新磁盘分区。如果不这样做,就算您挂载新磁盘来取代原来的文件目录,它们也会继续消耗旧磁盘的磁盘空间。
结束语
不论您用哪种方式,改变一个正在运行系统的磁盘是一个令人忧心的任务,原因是:很多事情都有可能出错。如果这种改变是必须的,那么您会发现您的系统在改变之后变得更可用了。为了降低磁盘已满错误的风险,实际上,您可能要继续使用您的系统完成它的既定任务。调整分区的过程可能会帮助您熟悉 GParted 和其他磁盘实用工具,以及各种分区的最佳大小。所有这些对您下次安装 Linux 系统是很有帮助的。