Partitioning (简体中文)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
翻译状态:本文是 Partitioning翻译。上次翻译日期:2018-11-01。如果英文版本有所更改,则您可以帮助同步翻译。

分区是将硬盘的可用空间划分为多个可以独立访问的区块。

可以为一个硬盘划分一个或者多个分区。一些场景需要使用多个分区:例如双重或多重启动,使用 swap 分区等。此外,分区也可以从逻辑上隔离数据,例如为音频和视频数据创建单独的分区。下面将会讨论通用的分区方案。

每个分区在使用前需要格式化为 文件系统

分区表

提示: 可以用 parted /dev/sda printfdisk -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

注意: MBR 并不位于某个分区中,而是分区前,设备的最开始部分。无分区设备的启动扇区或分区中的启动扇区被称为 Volume boot record

分区表

目前有三种分区类型:

  • 主分区(Primary)
  • 扩展分区(Extended)
    • 逻辑分区(Logical)

主分区每个磁盘或者RAID卷上只能有4个,可设置为可启动状态。如果分区方案要求使用4个以上的分区,就需将至少一个分区设置为扩展分区,并在上面建立逻辑分区。扩展分区可以被看作是容纳逻辑分区的容器。硬盘上最多只能有1个扩展分区。如果磁盘上有1个扩展分区,它也被看作是1个主分区。因此只能另外再建立3个主分区(例如3个主分区加1个扩展分区)。扩展分区内所包含的逻辑分区数量没有限制。如果在双重启动中有Windows,Windows需要占据一个主分区。

通常习惯是创建主分区sda1sda3,然后建立一个扩展分区sda4sda4中包含sda5sda6等逻辑分区。

引导记录

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

Wikipedia:GUID磁碟分割表

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 启动。
注意: 为了使 GRUB 从一台有 GPT 分区的基于 BIOS 的系统上启动,需要创建一个 BIOS 启动分区, 这个分区和 /boot 没关系,仅仅是 GRUB 使用,不要建立文件系统和挂载。

Btrfs 分区

Btrfs可以独占整个存储设备并替代 MBRGPT 分区方案。请参考创建 Btrfs 文件系统以获取更多信息。

Wikipedia:Btrfs

备份

请参阅 fdisk#Backup and restore partition tablegdisk#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

警告: 请别忘记为boot-loader预留空间。这对于 MBR 和 GRUB-Legacy 来说不是问题,但是许多新方案可能要求占用一个特殊的小分区。
  • UEFI系统需要有 ESP 分区
  • BIOS 系统上使用 GPT 进行分区后,安装 GRUB 时会需要一个额外的 BIOS 启动分区。
  • 如果使用的是 Btrfs, 可以将子卷视为分区,请参考 Btrfs#Mounting subvolumes.

单root分区

这种是最简单,同时也能满足大部分应用场景的方案。如果需要的话,可以建立一个 swapfile。通常刚开始的时候建议一个单独的 / 分区,然后根据应用场景的需要,例如 RAID,加密,独立的多媒体分区等建立其他的分区。

多分区

将某个路径挂载为独立分区可以使其拥有不同的文件系统和挂载参数。某些情况下(例如多媒体文件分区),可以被多个操作系统共享。

挂载点

下面这些路径可以作为独立分区的挂载点,你也可以根据实际需要做出其他决定。file-hierarchy(7) 介绍了各个目录的作用。

根分区

根目录是目录树的顶层,这里是主文件系统挂载和其他文件系统挂靠的地方。所有文件和目录都在根目录 / 显示,即使它们实际上存储在其他的物理设备上。根文件系统中的内容应该足以启动、恢复、修复系统。因此 / 目录下的特定目录是不能作为独立分区的。

/ 分区或叫根分区是最重要而且必需的,需要最先挂载,其他其他分区可以被它取代。

警告: 与系统启动相关的特定目录(除了 /boot必须/ 在同一个分区,或在系统刚进入用户态的时候通过 initramfs 挂载。这些特定的目录包括:/etc/usr [1]

因为包括 /usr 目录,根据安装的软件数量,会产生非常明显的增长。15-20 GB 对于大多数用户来说是一个比较合适的取值。如果你打算在这里放一个交换文件(swap file)的话,需要适当调大取值

/boot

/boot 分区包含内核、ramdisk 镜像以及 bootloader 配置文件和 bootloader stage。它也可以存放内核在执行用户态程序之前所使用的其他数据。/boot 在日常系统运行中并不需要,只在启动和内核升级(包括重建initial ramdisk)的时候用到。

如果使用软RAID0(条带化)系统的话,必须有一个独立的 /boot 分区。

注意: 如果使用 UEFI 启动管理器,支持读取 ESP 文件系统,建议将 ESP 挂载到 /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 分区用于这一目的。

布局示例

注意: UEFI/GPT does not really have a "bootable" flag. A bootable partition simply has partition type 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 自带的命令行分区工具。
https://www.kernel.org/ || util-linux
  • cfdisk — 使用 ncurses 库编写的具有伪图形界面的命令行分区工具。
https://www.kernel.org/ || util-linux
  • sfdisk — 支持脚本的 fdisk.
https://www.kernel.org/pub/linux/utils/util-linux/ || util-linux
https://www.rodsbooks.com/gdisk/ || gptfdisk
  • cgdisk — GPT 版的 cfdisk。
https://www.rodsbooks.com/gdisk/ || gptfdisk
  • sgdisk — Scriptable version of gdisk.
https://www.rodsbooks.com/gdisk/sgdisk-walkthrough.html || gptfdisk

GNU Parted

下面工具在 GNU Parted 中有介绍。

https://www.gnu.org/software/parted/parted.html || parted
  • GParted — GTK 图形界面的分区工具。
http://gparted.sourceforge.net/ || gparted
  • GNOME Disks — GTK 写的图形分区工具.
https://wiki.gnome.org/Apps/Disks || gnome-disk-utility
  • Partitionmanager — QT 图形界面的分区工具。
https://sourceforge.net/projects/partitionman/ || partitionmanager

分区对齐

恰当的分区对齐有助于提升性能和使用寿命。这是由硬件层面和文件系统层面的每次 I/O 操作特性决定的。对齐的关健是分区大小(至少)是块大小的倍数,块大小取决于选用的硬件设备。如果分区没有以块大小的整数倍对齐,对齐文件系统就失去意义了,因为从分区的起始偏移开始就是有偏差的。

fdisk/gdiskparted 会自动处理分区对齐。GNU Parted#Check alignment 介绍了如何验证分区是否对齐。

有些硬盘使用 高级格式 会提供更好的读写效率。

Tips and tricks

Tango-preferences-desktop-locale.png本文或本节需要翻译。要贡献翻译,请访问简体中文翻译团队Tango-preferences-desktop-locale.png

附注: Not translated.(在 Talk:Partitioning (简体中文)# 中讨论)

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.

参考资料