为你的Linux系统分区:基本原理

系统 Linux
在 Linux 中有一些工具可以处理这类操作,但是也有一些潜在的陷阱和限制,使任务执行比看上去更为困难。本文将引导您完成调整 Linux 分区大小的任务,从基本准备开始,使用图形化用户界面(GUI)工具移动到普通可调整大小的场景中。

如果您使用的是普通分区设备,那么很可能您的磁盘使用几个分区。如果您没有正确的设置分区大小或者您的需求发生了变化,您将发现需要重新设置分区大小。要做到这一点,您必须很清楚自己调整分区大小的需求,而且要熟悉完成这一任务的工具。很多情况下,调整操作一般都很顺利,然而,许多障碍都是粗心大意引起的,甚至对那些已经做了充分准备的人也不能避免。

本文首先介绍调整工具的一些潜在功能和限制,以及在开始调整操作之间要进行的一些准备工作。然后介绍了 GParted 分区大小调整工具(也可称为 Gnome Partition Editor)。

注:为了简便起见,我用调整(resizing)一词涉及几种操作,包括增加分区大小,减少分区大小和移动分区。有时候,只有一个操作是可行的,而其他的不可行。有时候这些操作本身比其他操作风险更大,这些差别很重要,我注意到了这个事实。

分区调整基础工作

在您启动一个分区工具时,您应该清楚这些程序可以做什么、适合在何时使用。您也应该记录当前的配置并进行数据备份。

何时调整分区大小?

我们来回顾一下分区和文件系统之间的区别。分区 是由磁盘上相邻扇区组成的容器,分区是由简单数据结构定义的。文件系统,从另一方面说,是驻留在分区之内 的数据结构。文件系统支持计算机定位单独的文件,它们比分区更为复杂。实际上,调整一个分区大小通常也需要调整它包含的文件系统。为了简单起见,我所用的 “调整分区” 就是指 “调整分区以及其中包含的文件系统”。

分区调整从本质上说至少有点风险。分区调整软件必须改变低级别分区和文件系统数据结构,可能需要移动大量数据。磁盘上的不可靠数据、电源故障、以及系统崩溃的等问题可能会导致调整过程发生灾难性故障。由于这些原因,您不应轻易进行分区调整操作,而且,只要有可能您就应该备份数据。

一般情况下,我不建议调整分区,除非现在的设置存在问题或者不久将出现问题。这就是说,您考虑调整分区的前提是,一个或多个分区必须是快满了,或者说您确定不久将会添加很多数据,可能会导致溢出。

您也必须谨记调整限制。例如,您不能缩小某个文件系统,以及您需要在新的布局中周密计划主分区与逻辑分区的配置。有时候诸如此类的问题可能会成为您调整计划的障碍,强迫您采取另一种方案,具体见本系列的第 2 部分。

获取当前分区使用的数据

在您的分区调整操作的计划中,***步是获取关于磁盘目前的设计方式以及哪个分区空间不足的信息。获取这类信息一个比较方便的方式是使用 GParted,GParted 有一个友好的 GUI 显示,如图 1 所示,显示了分区之间的相对位置以及每个分区占用的空间大小。然而,GParted 并不总是呈现完整的信息。因此您需要使用文本模式 df、fdisk 或者其他实用工具来补充显示。


图 1. GParted 显示磁盘使用的概要信息
GParted 显示磁盘使用的概要信息 
 

图 1 显示的系统,其中含有一个受限的 /usr 分区(/dev/sdb5)并在 /home(/dev/sdb7)中有大量剩余空间,如果您想要向计算机中添加更多的软件,这就会引起麻烦。对于这个给定的分区布局,您可以减少 /home 的大小、增加 /usr 的大小。(注意图 1 是从一个紧急引导磁盘获取的,因此 Mount Point 列不能反映正在运行的系统挂载点。)

特定于文件系统的功能

Linux 支持几个本地文件系统,而且双重引导系统通常和其他系统共享磁盘。一般情况下,就使用方面 ext2fs、ext3fs、ex4fs、ReiserFS 和 Btrfs 是最灵活的,这些文件系统都可以增长、缩小或移动,大多数是可以通过 GParted 实现的。可惜的是,XFS 和 JFS 是不能缩小的,但是可以增长和移动。

在普通的非 Linux 文件系统中,FAT 和 NTFS 可以增长、缩小和移动。用在 Macintoshes 上的 HFS 和 HFS+ 通常可以缩小和移动,但是不能增长,OS X 的 Disk Utility 有时候可以使 HFS+ 增长分区。

在 GParted 中,您可以选择 View > File System Support 来获取文件系统表格和 GParted 支持的操作。如果您要在您的 Linux 系统中尝试这一操作,那么您应该意识到各种版本支持的是不同的。如果您使用一个紧急引导磁盘,比起常规安装它可能支持不同的选项,稍后将介绍。

计划一个新的分区布局

有了当前的分区数据,以及您可以使用手边现有的文件系统进行何种操作的信息之后,您就可以开始计划您的新布局了。您应该考虑以下几个重要因素:

  1. 速度和安全性 — 改变一个分区的起点通常比改变终点更慢且更冒险,因为移动起点必须要重写分区中的许多数据,对分区来说使用较多的数据比起使用较少数据影响更大。
  2. 非 Linux 文件系统 — 尽管 GParted 及其文本模式 “远亲” GNU Parted 可以调整 NTFS、FAT、HFS 和 HFS+ 文件系统大小,在处理时您也要考虑使用本地操作系统工具而不是 Linux 工具。这对于双重引导系统上的 Microsoft® Windows® 引导分区尤其如此,因为改变一个 Windows 引导分区的起点有可能导致 Windows 无法引导。
  3. 主分区 vs. 逻辑分区 — 用于大多数 Linux 机器上的 Master Boot Record (MBR) 分区系统仅支持 4 个 分区,其中一个是可扩展的,可以包含任何数量的逻辑 分区。有些操作系统,比如 Windows,必须从主分区引导。您的所有逻辑分区必须驻留在一个可扩展的分区中,因此必须是连续的。如果您的系统使用一个全局唯一标识符(GUID)分区表(Partition Table,GPT),而不是使用旧的 MBR 系统,这些限制将无实际意义,因为 GPT 仅支持一个分区类型。
  4. 设备 ID — 注意设备 ID,例如您的 Linux 分区使用的 /dev/sda3。如果这些 ID 发生变化,您可能需要改变您的 /etc/fstab 文件或您的引导装载程序配置(一般是 /boot/grub/menu.lst、/boot/grub/grub.conf、或者 /boot/grub/grub.cfg ),许多现代版本在这些文件中使用 Universally Unique Identifier (UUID) 而不是设备标识符。如果新的分区布局不改变任何关键设备 ID,这也没有必要的。注意主分区是从 1 到 4 进行编号的,编号系统可能有间隙,但是逻辑分区是从 5 开始编号的,不存在间隙。因此,如果您添加一个主分区,分区编号也有可能不会改变,但是如果您要添加一个逻辑分区,您所有的其他逻辑分区变化都会改变。

准备一个备份

一旦您准备进行修改,您可能想要立即实现;然而,由于重新分区会卷入危险,只要可以实现,您就应该备份关键数据,如果备份不能实现,建议您***购买一个硬盘进行备份。即使不考虑分区调整引入的危险,有时候硬盘故障,软件问题都会导致文件系统不可用。因此,***进行备份。

备份到任何一种存储介质,这是最方便的。您可以使用 tar 来创建一个系统备份,该文件系统将压缩到一个可记录的 DVD 上,然而,现在大多数系统的用户数据非常庞大,一个 DVD 不能存下。因此,您需要依靠其他存储介质来备份您的数据,比如,一个外部硬盘。

即使不能完全备份,您也应该备份 /etc 目录下的内容。该目录下含有关键系统配置,因此,如果您需要重新安装操作系统,保留它的副本可以加快恢复过程。

#p#

使用 GParted 调整分区

在 Linux 中调整分区最简单的方法是使用 GUI GParted 程序。尽管您可以从您的常规 Linux 安装下运行 GParted ,但是它拒绝在任何当前挂载的分区上进行操作。因此,您不能调整根目录(/)或者其他对操作系统功能来说至关重要的分区。在这我将介绍如何使用一个 Linux 紧急引导磁盘实现您的更改。该磁盘被引导之后,您可以运行 GParted ,就像您从一个常规系统运行那样,使用即指即点操作来告知软件您想进行什么操作。

运行一个紧急磁盘

现在有许多 Linux 紧急磁盘(emergency discs),比如 PartedMagic 和 SystemRescueCd(见 参考资料)。您也可以使用您的 Linux 安装介质,许多版本都包括一个救援模式(rescue mode),支持访问 GParted 或者类似的实用工具。为了说明问题,我将介绍 PartedMagic 4.11 的使用;然而,笼统地说其他使用工具也是类似的。但是,需要以不同的方式启动 GParted。

多数紧急磁盘是以 x86(32 位)的形式出现的,但是这些磁盘在 x86-64(64 位)计算机中也能很好地工作,甚至系统运行 64 位版本的 Linux 也可以。文件系统数据结构不受中央处理器(CPU)架构的影响。如果您要在其他的机器上运行,除了标准个人电脑(PC),比如 Macintosh,您需要检查您的紧急磁盘能否同您的硬件一起工作。

一般情况下,您必须引导一个紧急磁盘,就像您引导一个 Linux 安装磁盘那样。在一些系统上,插入磁盘然后重新引导计算机执行该任务。在有些系统上,您必须按一个功能键来选择引导设备,或者调整一个基本输入/输出系统(BIOS)选项来从光驱引导,而不从硬盘引导。关于如何执行该操作的具体细节是根据系统而定的,您需要查阅手册页获取详细信息。

当您引导 PartedMagic 时,出现一个引导菜单。选择 Default settings (ns from RAM) 引导到标准系统。系统引导时,您可以看到出现一个桌面,其中含有常用工具的图标,包括一个启动 GParted 的 Partition Editor。双击这个图标开始调整您的分区大小。

告知 GParted 关于您的更改

要调整一个分区,右键单击它,然后从下拉菜单选择 Resize/Move。结果是出现如图 2 所示的对话框。您可以使用图形滑块或者文本输入域调整分区大小和位置。


图 2. GParted 提供一个即指即点界面来调整分区大小
GParted 提供一个即指即点界面来调整分区大小 
 

图 2 显示了调整 图 1 的 /dev/sdb7 的大小。将其开始点向右移动为 /dev/sdb5 的扩展腾出空间。为了完成图 1 中的分区的大小调整,您也要在调整 /dev/sdb5 大小之前将交换分区(/dev/sdb6)向右移动。另一种情况是,您可以删除和重新创建交换分区;然而,这可能需要修改 UUID 引用来交换 /etc/fstab 中的空间,当交换空间被移动后,您可以扩展 /dev/sdb5。

注意图 2 中的 Align to 字段。这是 GParted 最近版本中的一个新特性,它能够让您将分区对齐柱面边界,或者对齐 mebibyte (MiB) 边界,或者两者都不对齐。旧磁盘通常被分区来根据柱面边界对齐,但是 MiB 对齐通常是用于 Windows Vista 或者更新版本的磁盘分区。Linux 支持这两种对齐模式。如果您的系统双重引导的 Windows XP ,柱面对齐是必须的 。如果您的系统是双重引导的 Windows Vista 或者更新版本,或者如果您的系统使用一个新的 4096 字节扇区,MiB 对齐是必须的。

如果您想要从逻辑分区腾出空间给主分区,您必须显式地调整围绕逻辑分区的扩展分区,反之一样。您可以像调整其他任何分区那样做;然而您将发现点击其列表条目比起点击上述分区列表的图表中的条目更为容易。

GParted 不允许您调整正在使用的分区。比如在分区的条目旁边有一个锁形图标。您可以右键单击分区并选择 Unmount 卸载它。注意如果扩展分区其中包含的任何一个分区(包括交换空间)正在使用,那么它是以这种方式锁定的。

在 GParted 中实现您的更改

在您向 GParted 通知您的更改之后,您必须通过选择 Edit > Apply All Operations 菜单项或者单击 Apply 图标实现它。结果是出现一个进度对话框,概述程序正在执行的一切。如果您决定撤销操作,可以使用 GParted 的 undo 功能或者不应用您的更改直接从程序退出,那么您的磁盘将未有任何变化。

分区调整操作需要花费一定时间来完成,从一秒钟到几个小时不等,取决于改变的本质和移动数据的多少。无论在何种情况下您都不能中断正在运行的操作!如果这样做将会破坏文件系统,导致数据无法恢复。

修改磁盘参考资料

如果您想要添加或删除分区,您可能需要修改您的 /etc/fstab 文件或者您的引导加载程序配置,如上所述。要这样做,您必须挂载您的根(/)分区并编辑该文件。在 图 1 中,根分区是 /dev/sdb1,GParted 可以在 /media/sdb1 上挂载它,因此您应该编辑 /media/sdb1/etc/fstab。如果系统使用一个独立的 /boot 分区,您可能需要单独挂载它,在根分区的 grub/menu.lst、grub/boot.conf 或 grub/boot.cfg 文件中编辑根加载程序配置。

检查这些文件,然后将旧分区号替换成新的。如果您需要一些修改,在保存新配置之前先备份旧配置。

向前移动

此时,您可能需要重新引导您的系统。在 PartedMagic 中,单击屏幕左下方的图标并选择 Logout,这向您提供包括重新引导在内的一些选项。如果您还没有移除紧急磁盘,务必确保移除它。运气好的话,您的计算机应该重新引导到常规 Linux 操作系统,但是您将发现您的磁盘空间已经改变了。

这篇文章介绍了基本的分区调整操作,本系列的第 2 部分将介绍更高级的操作以及其他选择,包括调整 Logical Volume Management (LVM)、故障排除,以及调整操作不充足时您需要考虑的其他操作。

【编辑推荐】

  1. Linux系统下的分区和文件系统详解
  2. 利用Live USB进行Ubuntu分区实战
  3. linux关于swap分区的划分规则
责任编辑:yangsai 来源: IBMDW
相关推荐

2019-11-28 10:45:28

ZooKeeper源码分布式

2012-01-12 14:37:34

jQuery

2010-06-18 17:28:37

Linux Anacr

2010-10-13 13:34:17

Linux系统分区

2024-01-30 09:21:01

deltaFifo机制apiServer

2013-04-07 14:09:55

Android应用基本

2010-08-20 13:29:33

OFDM

2020-03-21 14:57:14

手机定位智能手机APP

2009-02-24 09:43:00

IP电话原理

2011-11-29 12:17:00

2020-03-01 15:13:05

Linux文件系统

2010-03-17 13:35:02

2016-08-18 00:04:09

网络爬虫抓取系统服务器

2016-08-17 23:53:29

网络爬虫抓取系统

2021-02-08 21:40:04

SockmapBPF存储

2020-11-26 13:54:03

容器LinuxDocker

2011-07-07 14:10:21

Cocoa 内省 hash

2020-12-29 16:55:44

ZooKeeper运维数据结构

2009-06-11 09:56:09

MySQL Repli原理

2010-03-18 20:13:03

Java socket
点赞
收藏

51CTO技术栈公众号