Partitioning (简体中文)
分区是将硬盘的可用空间划分为多个可以独立访问的区块。
可以为一个硬盘划分一个或者多个分区。一些场景需要使用多个分区:例如双重或多重启动,使用 swap 分区等。此外,分区也可以从逻辑上隔离数据,例如为音频和视频数据创建单独的分区。下面将会讨论通用的分区方案。
每个分区在使用前需要格式化为 文件系统 。
分区表
parted /dev/sda print
或 fdisk -l /dev/sda
查看当前分区信息,/dev/sda
是设备名。分区信息被存放在分区表中。目前有两种主流的模式:传统的 Master Boot Record 和新的 GUID Partition Table。后者功能更强大,解决了许多MBR的限制。
Master Boot Record
Master Boot Record (MBR) 是存储设备最开始的 512 字节。包含操作系统启动加载器和分区表,在 BIOS 系统的 启动流程 中扮演重要角色。请参阅 Wikipedia:Master boot record#Disk partitioning。
分区表
目前有三种分区类型:
- 主分区(Primary)
- 扩展分区(Extended)
- 逻辑分区(Logical)
主分区每个磁盘或者RAID卷上只能有4个,可设置为可启动状态。如果分区方案要求使用4个以上的分区,就需将至少一个分区设置为扩展分区,并在上面建立逻辑分区。扩展分区可以被看作是容纳逻辑分区的容器。硬盘上最多只能有1个扩展分区。如果磁盘上有1个扩展分区,它也被看作是1个主分区。因此只能另外再建立3个主分区(例如3个主分区加1个扩展分区)。扩展分区内所包含的逻辑分区数量没有限制。如果在双重启动中有Windows,Windows需要占据一个主分区。
通常习惯是创建主分区sda1到sda3,然后建立一个扩展分区sda4。sda4中包含sda5,sda6等逻辑分区。
引导记录
MBR 前面的 446 字节是启动代码区域,在 BIOS 系统中通常包含启动加载器的第一部分。请参阅Wikipedia:主引导记录。可以用 dd 备份和恢复启动代码。
GUID 分区表
GPT方案中只有一种分区类型,主分区。磁盘和RAID卷中包含的分区数量没有限制。
GUID Partition Table (GPT) 是 Unified Extensible Firmware Interface 标准定义的分区规范。使用 globally unique identifiers (GUIDs), 或 Linux 中的 UUID 定义分区和 分区类型. 设计上是为了替换 #Master Boot Record。
GUID 分区表的磁盘开始位置有一个 protective Master Boot Record (PMBR),用以处理不支持 GPT 软件的访问。这段 MBR 和真正的 MBR 一样,可以用在支持 BIOS/GPT 启动的启动管理器中。
选择 GPT 还是 MBR
GUID Partition Table (GPT)是一种更灵活的分区方式。它正在逐步取代Master Boot Record (MBR)系统。GPT相对于诞生于MS-DOS时代的MBR而言,有许多优点。新版的fdisk(MBR)和gdisk(GPT)使得使用GPT或者MBR在可靠性和性能最大化上都非常容易。
在做出选择前,需要考虑如下内容:
- 如果使用 GRUB legacy 作为bootloader,必须使用MBR。
- 如果使用传统的BIOS,并且双启动中包含 Windows (无论是32位版还是64位版),必须使用MBR。
- 如果使用 UEFI 而不是BIOS,并且双启动中包含 Windows 64位版,必须使用GPT。
- 非常老的机器需要使用 MBR,因为 BIOS 可能不支持 GPT.
- 如果不属于上述任何一种情况,可以随意选择使用 GPT 还是 MBR。由于 GPT 更先进,建议选择 GPT。
- 建议在使用 UEFI 的情况下选择 GPT,因为有些 UEFI firmware 不支持从 MBR 启动。
Btrfs 分区
Btrfs可以独占整个存储设备并替代 MBR 和 GPT 分区方案。请参考创建 Btrfs 文件系统以获取更多信息。
备份
请参阅 fdisk#Backup and restore partition table 或 gdisk#Backup and restore partition table.
恢复
可以用 gpart 恢复被破坏的 MBR,详情参考 gpart(8)。
第一个 GPT 头(located at the start of the disk) from the secondary GPT header (located at the end of the disk) or vice versa. See gdisk#Recover GPT header.
Another option is TestDisk, which supports recovering lost partitions on both MBR and GPT.
分区方案
虽然有一些关于分区方案的通用建议,但没有严格的准则。有许多影响分区方案的因素,例如对灵活性的期望,访问速度,安全性以及可用磁盘空间的硬性限制。实际上就是个人取舍的问题。如果你想双启动 Arch Linux 和 Windows,请参考 Windows and Arch Dual Boot。
- UEFI系统需要有 ESP 分区
- 在 BIOS 系统上使用 GPT 进行分区后,安装 GRUB 时会需要一个额外的 BIOS 启动分区。
- 如果使用的是 Btrfs, 可以将子卷视为分区,请参考 Btrfs#Mounting subvolumes.
单root分区
这种是最简单,同时也能满足大部分应用场景的方案。如果需要的话,可以建立一个 swapfile。通常刚开始的时候建议一个单独的 /
分区,然后根据应用场景的需要,例如 RAID,加密,独立的多媒体分区等建立其他的分区。
多分区
将某个路径挂载为独立分区可以使其拥有不同的文件系统和挂载参数。某些情况下(例如多媒体文件分区),可以被多个操作系统共享。
挂载点
下面这些路径可以作为独立分区的挂载点,你也可以根据实际需要做出其他决定。file-hierarchy(7) 介绍了各个目录的作用。
根分区
根目录是目录树的顶层,这里是主文件系统挂载和其他文件系统挂靠的地方。所有文件和目录都在根目录 /
显示,即使它们实际上存储在其他的物理设备上。根文件系统中的内容应该足以启动、恢复、修复系统。因此 /
目录下的特定目录是不能作为独立分区的。
/
分区或叫根分区是最重要而且必需的,需要最先挂载,其他其他分区可以被它取代。
因为包括 /usr
目录,根据安装的软件数量,会产生非常明显的增长。15-20 GB 对于大多数用户来说是一个比较合适的取值。如果你打算在这里放一个交换文件(swap file)的话,需要适当调大取值
/boot
/boot
分区包含内核、ramdisk 镜像以及 bootloader 配置文件和 bootloader stage。它也可以存放内核在执行用户态程序之前所使用的其他数据。/boot
在日常系统运行中并不需要,只在启动和内核升级(包括重建initial ramdisk)的时候用到。
如果使用软RAID0(条带化)系统的话,必须有一个独立的 /boot
分区。
/boot
.不使用 UEFI 时,/boot
的建议大小时 200 MB,使用 UEFI 时,需要至少 512 MiB 空间。
/home
/home
目录包含用户定义的配置文件、缓存、应用程序数据和媒体文件。
将/home
目录独立使得/
分区可以单独重新划分,但是请注意你可以在 /home
没有独立分区的情况下你仍然可以在不修改 /home
目录内容的情况下重装 Arch —— 删除其他顶级目录,然后执行pacstrap。
不能与使用其他发行版的用户共享同一个home目录,因为不同的发行版可能使用不兼容的软件版本和补丁。可以共享媒体目录,或至少使用 /home
分区下的不同home目录。分区大小跟着存储的内容而定。
/var
/var
目录存储变量数据例如 spool 目录和文件,管理和登录数据,pacman 的缓存,ABS 树等等。它通常被用作缓存或者日志记录,因此读写频繁。将它独立出来可以避免由于大量日志写入造成的磁盘空间耗尽等问题。
可以将 /usr
设置为只读挂载。所有在操作系统运行过程中(例如安装或软件维护)写入 /usr
的东西放到 /var
下。
/var
包含许多小文件。如果将其作为独立分区,在文件系统的选择上需要考虑这一点。除了其他数据以外,还包括ABS 树和 pacman 缓存。保留缓存的包提供了包降级的能力,因此非常有用。也正因为这样,/var
的大小会随着时间推移而增长。尤其是 pacman 缓存将会随着新软件的安装、系统的升级而增长。在磁盘空间不足的时候,可以安全的清理这个目录。/var
分配 8-12 GB 对于桌面系统来说是比较合适的取值,具体取值取决于安装的软件数量。。
Swap
swap 分区提供能够被作为虚拟内存的内存空间。swap file 也可以实现同样的功能,并且它们之间没有明显的性能区别,但是后者更易于根据需要调整大小。如果没有使用休眠特性的话,swap 分区可以被多个系统共享。查看 Suspend and hibernate 了解如何通过 swap 分区或文件休眠。
在拥有不足 512 MB 内存的机器上,通常为 swap 分区分配2倍内存大小的空间。如果有更大的内存(大于 1024 MB),可以分配较少的空间甚至不需要swap 分区。 Suspend and hibernate 介绍了如何休眠到 swap 分区或文件.
/data
可以为需要多用户共享的文件建立一个“data”分区。也可以使用 /home
分区用于这一目的。
布局示例
EF00
. Some GPT partitioning tools include a bootable flag, but really it just sets the partition type.UEFI/GPT 示例
Mount point | Partition | Partition type GUID | Partition attributes | Suggested size |
---|---|---|---|---|
/boot or /efi
|
/dev/sda1
|
C12A7328-F81F-11D2-BA4B-00A0C93EC93B : EFI system partition
|
550 MiB | |
/
|
/dev/sda2
|
4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709 : Linux x86-64 root (/)
|
23 - 32 GiB | |
[SWAP]
|
/dev/sda3
|
0657FD6D-A4AB-43C4-84E5-0933C84B4F4F : Linux swap
|
More than 512 MiB | |
/home
|
/dev/sda4
|
933AC7E1-2EB4-4F13-B844-0E14E2AEF915 : Linux /home
|
Remainder of the device |
MBR/BIOS 示例
Mount point | Partition | Partition type ID | Boot flag | Suggested size |
---|---|---|---|---|
/
|
/dev/sda1
|
83 : Linux
|
是 | 23 - 32 GiB |
[SWAP]
|
/dev/sda2
|
82 : Linux swap
|
否 | More than 512 MiB |
/home
|
/dev/sda3
|
83 : Linux
|
否 | Remainder of the device |
UEFI 带单独的 /home
Mount point | Partition | Partition type GUID | Partition attributes | Suggested size |
---|---|---|---|---|
None |
/dev/sda1
|
21686148-6449-6E6F-744E-656564454649 : BIOS boot partition
|
1 MiB | |
/
|
/dev/sda2
|
4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709 : Linux x86-64 root (/)
|
2 : Legacy BIOS bootable
|
23 - 32 GiB |
[SWAP]
|
/dev/sda3
|
0657FD6D-A4AB-43C4-84E5-0933C84B4F4F : Linux swap
|
More than 512 MiB | |
/home
|
/dev/sda4
|
933AC7E1-2EB4-4F13-B844-0E14E2AEF915 : Linux /home
|
Remainder of the device |
分区工具
下面表格可以帮助选择
MBR | GPT | |
---|---|---|
对话框 | fdisk parted |
fdisk gdisk parted |
模拟图形界面 | cfdisk | cfdisk cgdisk |
非交互 | sfdisk parted |
sfdisk sgdisk parted |
图形界面 | gparted gnome-disk-utility partitionmanager |
gparted gnome-disk-utility partitionmanager |
fdisk/gdisk
请参考 fdisk。
- fdisk — Linux 自带的命令行分区工具。
- cfdisk — 使用 ncurses 库编写的具有伪图形界面的命令行分区工具。
- sfdisk — 支持脚本的 fdisk.
- cgdisk — GPT 版的 cfdisk。
- sgdisk — Scriptable version of gdisk.
GNU Parted
下面工具在 GNU Parted 中有介绍。
- GNU Parted — 命令行分区工具。
- GParted — GTK 图形界面的分区工具。
- GNOME Disks — GTK 写的图形分区工具.
- Partitionmanager — QT 图形界面的分区工具。
分区对齐
恰当的分区对齐有助于提升性能和使用寿命。这是由硬件层面和文件系统层面的每次块 I/O 操作特性决定的。对齐的关健是分区大小(至少)是块大小的倍数,块大小取决于选用的硬件设备。如果分区没有以块大小的整数倍对齐,对齐文件系统就失去意义了,因为从分区的起始偏移开始就是有偏差的。
fdisk/gdisk 和 parted 会自动处理分区对齐。GNU Parted#Check alignment 介绍了如何验证分区是否对齐。
有些硬盘使用 高级格式 会提供更好的读写效率。
Tips and tricks
Converting MBR to GPT
See GPT fdisk#Convert between MBR and GPT.
GPT Kernel Support
The CONFIG_EFI_PARTITION
option in the kernel config enables GPT support in the kernel (despite the name, EFI PARTITION). This option must be built in the kernel and not compiled as a loadable module. This option is required even if GPT disks are used only for data storage and not for booting. This option is enabled by default in Arch's linux and linux-lts kernels in the [core] repo. In case of a custom kernel, enable this option by doing CONFIG_EFI_PARTITION=y
.
参考资料
- Wikipedia:Disk partitioning
- Wikipedia:Binary prefix
- Understanding Disk Drive Terminology
- What is a Master Boot Record (MBR)?
- Rod Smith's page on What's a GPT? and Booting OSes from GPT
- Make the most of large drives with GPT and Linux - IBM Developer Works
- Microsoft's Windows and GPT FAQ
- Partition Alignment (with examples)