分区

出自 ArchWiki
(重定向自 分区方案)

出自 维基百科

磁盘分区或磁盘切片是在二级存储上创建一个或多个区域,以便可以单独管理每个区域。

整个磁盘可以分配给单个分区,也可以分配给多个分区,例如用于双启动、维护 swap 分区,或在逻辑上分离数据(如音频和视频文件)。分区方案存储在分区表中,例如主引导记录 (MBR) 或 GUID 分区表 (GPT)。

分区表是使用许多分区工具之一创建和修改的。Arch Linux 可用的工具在#分区工具章节中列出。

分区通常直接包含文件系统,这是通过在分区上创建文件系统(也称为格式化)来完成的。或者,分区可以包含 LVM块设备加密RAID,它们最终提供设备文件,可以在其上放置文件系统(或者可以进一步堆叠设备)。

任何直接包含可挂载文件系统的块设备(例如磁盘、分区、LUKS 设备、LVM 逻辑卷或 RAID 阵列)都称为

分区表

有两种主要类型的分区表可用。这些在下面的#主引导记录 (MBR) 和 #GUID 分区表 (GPT) 章节中描述,并讨论了如何在两者之间进行选择。第三种不太常见的替代方案是使用无分区磁盘,这也将在讨论。

使用分区工具查看块设备的分区表。

提示: 运行 parted /dev/sdX printfdisk -l /dev/sdX,其中 /dev/sdX块设备,例如 SATA 磁盘的 /dev/sdaNVMe 磁盘的 /dev/nvme0n1 或 eMMC 磁盘的 /dev/mmcblk0。 有关块设备命名的更多信息,请参阅设备文件#块设备名称

主引导记录

主引导记录 (MBR) 是存储设备的第一个 512 字节。它包含操作系统引导加载程序和存储设备的分区表。它在 BIOS 系统下的启动过程中起着重要的作用。有关 MBR 结构,请参阅维基百科:主引导记录#磁盘分区

注意
  • MBR 不位于分区中;它位于设备的第一个扇区(物理偏移量 0),在第一个分区之前。
  • 无分区设备上或单个分区内的引导扇区称为卷引导记录 (VBR)

主引导记录 (引导代码)

MBR 的前 440 个字节是引导代码区。在 BIOS 系统上,它通常包含引导加载程序的第一阶段。可以使用dd 备份、从备份恢复或擦除引导代码。

主引导记录 (分区表)

在 MBR 分区表(也称为 DOS 或 MS-DOS 分区表)中,有 3 种类型的分区

  • 主分区
  • 扩展分区
    • 逻辑分区

主分区可以是可引导的,并且每个磁盘或 RAID 卷限制为四个分区。如果 MBR 分区表需要超过四个分区,则需要将其中一个主分区替换为包含逻辑分区的扩展分区。

扩展分区可以被认为是逻辑分区的容器。一个硬盘最多可以包含一个扩展分区。扩展分区也算作主分区,因此如果磁盘有扩展分区,则只能再有三个主分区(即三个主分区和一个扩展分区)。驻留在扩展分区中的逻辑分区的数量是无限的。与 Windows 双启动的系统将需要 Windows 驻留在主分区中。

习惯的编号方案是创建主分区 sda1sda3,然后是扩展分区 sda4sda4 上的逻辑分区编号为 sda5sda6 等。

提示: 在对 MBR 磁盘进行分区时,请考虑在磁盘末尾至少保留 33 个 512 字节扇区(16.5 KiB)的未分区可用空间,以防您决定将其转换为 GPT。备份 GPT 标头将需要此空间。

GUID 分区表

GUID 分区表 (GPT) 是一种分区方案,它是统一可扩展固件接口规范的一部分;它使用全局唯一标识符 (GUID) 或 Linux 世界中的 UUID 来定义分区和分区类型。它旨在取代主引导记录分区方案方法。

在 GUID 分区表磁盘的开头,有一个保护性主引导记录 (PMBR),以防止 GPT 未知软件。此保护性 MBR 就像普通 MBR 一样,具有引导代码区,可用于通过支持它的引导加载程序进行 BIOS/GPT 启动。

GPT 和 MBR 的选择

GUID 分区表 (GPT) 是一种替代的、现代的分区样式;它旨在取代旧的主引导记录 (MBR) 系统。GPT 比 MBR 有几个优点,MBR 有一些可以追溯到 MS-DOS 时代的怪癖。随着格式化工具的最新发展,GPT 或 MBR 同样容易获得良好的可靠性和性能。

注意: 对于 GRUB 在基于 BIOS 的系统上从 GPT 分区磁盘启动,需要BIOS 启动分区

选择时要考虑的一些要点

  • 要使用传统 BIOS 与 Windows(32 位和 64 位)双启动,需要 MBR 方案。
  • 要使用 UEFI 模式而不是 BIOS 与 Windows 64 位双启动,需要 GPT 方案。
  • 如果您安装在较旧的硬件上,尤其是在旧笔记本电脑上,请考虑选择 MBR,因为其 BIOS 可能不支持 GPT(但请参阅下文如何修复它)。
  • 如果要对大于 2 TiB (≈2.2 TB) 的磁盘进行分区,则需要使用 GPT。
  • 建议始终对 UEFI 启动使用 GPT,因为某些 UEFI 实现不支持在 UEFI 模式下启动到 MBR。
  • 如果以上都不适用,请在 GPT 和 MBR 之间自由选择。由于 GPT 更现代,因此在这种情况下建议使用它。

GPT 优于 MBR 的一些优点是

  • 为每个分区提供唯一的磁盘 GUID 和唯一的分区 GUID (PARTUUID) – 一种良好的、独立于文件系统的引用分区和磁盘的方式。GUID 是 可发现分区规范 的先决条件,该规范可以在启用 systemd 的 initramfs 中使用。
  • 提供独立于文件系统的分区名称 (PARTLABEL)。
  • 任意数量的分区 - 取决于为分区表分配的空间 - 无需扩展分区和逻辑分区。默认情况下,GPT 表包含用于定义 128 个分区的空间。但是,如果您想定义更多分区,您可以为分区表分配更多空间(目前仅已知 gdisk 支持此功能)。
  • 使用 64 位 LBA 存储扇区号 - 最大可寻址磁盘大小为 2 ZiB。MBR 限制为每个驱动器寻址 2 TiB 的空间。[1]
  • 在磁盘末尾存储备份标头和分区表,这有助于在主分区表损坏时进行恢复
  • CRC32 校验和,用于检测标头和分区表的错误和损坏。

#分区工具章节包含一个表格,指示哪些工具可用于创建和修改 GPT 和 MBR 表。

提示: 可以在 MBR 和 GPT 之间进行转换。请参阅gdisk#在 MBR 和 GPT 之间转换

无分区磁盘

此文章或章节需要扩充。

原因: 解释何时可能需要使用无分区磁盘(例如在虚拟机中),何时不使用以及为什么。(在 Talk:Partitioning 中讨论)

无分区磁盘,又名 superfloppy,指的是没有分区表的存储设备,只有一个文件系统占据整个存储设备。无分区设备上存在的引导扇区称为卷引导记录 (VBR)

Btrfs 分区

Btrfs 可以占用整个数据存储设备,并取代 MBRGPT 分区方案。有关详细信息,请参阅 Btrfs#无分区 Btrfs 磁盘 说明。

分区方案

此文章或章节需要扩充。

原因: 介绍 LVMmdadmdm-crypt 等。它们可以与有关 Btrfs 子卷的信息一起放置在一个新的子章节中。(在 Talk:Partitioning 中讨论)

硬盘分区没有严格的规则,尽管可以遵循下面给出的一般指导。磁盘分区方案取决于各种问题,例如所需的灵活性、速度、安全性以及可用磁盘空间施加的限制。这本质上是个人偏好。如果您想双启动 Arch Linux 和 Windows 操作系统,请参阅与 Windows 双启动

注意
提示: 如果使用 Btrfs,则可以使用子卷来模拟分区。请参阅 Btrfs#挂载子卷 章节。

单一根分区

鉴于消费级设备的存储容量不断增加,此方案是最简单、最灵活的,并且应该足以满足大多数用例。 可以创建交换文件并根据需要轻松调整其大小。 通常,建议首先考虑单个 / 分区,然后根据诸如 RAID、加密、共享媒体分区等特定用例分离出其他分区。 有关一些常见到不常见的专用分区的描述,请参见#独立分区

建议单个根分区的最小大小为 23–32 GiB。 用户文件以及使用交换文件时可能需要更多空间。 最小化安装大约需要 2 GiB。 例如,一个简单的服务器可以在 4 GiB 以下运行,而完整的 KDE Plasma 安装则使用 10 GiB。 这两个示例都需要频繁清除软件包缓存

警告: 除非您的 引导加载程序 能够访问位于 / 中的 /boot 目录,否则需要一个单独的物理 /boot 分区(在磁盘的主分区表中,而不是在 LVM、软件 RAID 或文件系统子卷等下)。 这意味着引导加载程序必须支持从块设备、堆叠块设备(LVM、RAID、dm-crypt、LUKS 等)到内核和一个或多个 initramfs 镜像所在的文件系统的一切。

GPT 分区应具有 “Linux root (x86-64)” 类型 GUID 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709 (gdisk8304 类型)。 MBR 分区应具有默认 “Linux” 类型 ID 83

独立分区

将路径分离为分区允许选择不同的文件系统和挂载选项。 在某些情况下,例如媒体分区,它们也可以在操作系统之间共享。

以下是一些分区时可以使用的示例布局,以下小节详细介绍了一些可以放置在自己的独立分区上的目录,然后挂载/ 下的挂载点。 有关这些目录内容的完整描述,请参见 file-hierarchy(7)

/

根目录是层次结构的顶部,是主文件系统的挂载点,所有其他文件系统都由此衍生。 所有文件和目录都显示在根目录 / 下,即使它们存储在不同的物理设备上。 根文件系统的内容必须足以引导、还原、恢复和/或修复系统。 因此,/ 下的某些目录不适合作为单独的分区。

/ 分区或根分区是必要的,也是最重要的。 其他分区可以被它替换。

警告: 引导启动必不可少的目录(/boot 除外)必须/ 位于同一分区上,或者由 initramfs 在早期用户空间中挂载。 这些必不可少的目录是:/etc/usr [2]

/ 传统上包含 /usr 目录,该目录可能会随着安装的软件数量而显着增长。 对于使用现代硬盘的大多数用户来说,15–20 GiB 应该足够了。 如果您计划在此处存储交换文件,并且不打算使用单独的 /var,您可能需要更大的分区大小(即,加上 RAM 的大小以便能够休眠,以及额外的 8–12 GiB 用于 /var)。

GPT 分区应具有 “Linux root (x86-64)” 类型 GUID 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709 (gdisk8304 类型)。 MBR 分区应具有默认 “Linux” 类型 ID 83

/boot

/boot 目录包含 vmlinuzinitramfs 镜像,以及引导加载程序配置文件和引导加载程序阶段。 它还存储在内核开始执行用户空间程序之前使用的数据。 /boot 不是正常系统操作所必需的,而仅在引导和内核升级期间(当重新生成初始 ramdisk 时)才需要。

警告

有关引导加载程序要求和功能的更多信息,请参见Arch 启动过程#引导加载程序

注意: 在 UEFI 系统上,可以将 EFI 系统分区 挂载到 /boot,从而避免创建另一个单独的分区。 有关更多信息,请参见EFI 系统分区#挂载分区

当使用 EFI 系统分区作为 /boot 时,要求如 EFI 系统分区 文章中所述——必须设置正确的分区类型。

在其他情况下,建议将分区类型设置为 扩展引导加载程序 (XBOOTLDR) 分区,其 GPT 分区类型 GUID 为 BC13C2FF-59E6-4262-A352-B275FD6F7172 (gdiskea00 类型,fdiskxbootldr 类型) 或 MBR 分区类型 ID ea

在这两种情况下,建议的分区大小均为 1 GiB,这应该为容纳多个内核提供足够的空间。 如果仍然不确定,4 GiB 对于任何人来说都应该足够了。

/home

/home 目录包含用户特定的配置文件、缓存、应用程序数据和媒体文件。

分离出 /home 允许单独重新分区 /,但请注意,即使 /home 不是单独分区,您仍然可以在不触及 /home 的情况下重新安装 Arch——只需删除其他顶级目录,然后运行 pacstrap 即可。

您不应在不同发行版的用户之间共享 home 目录,因为它们使用不兼容的软件版本和补丁。 相反,请考虑共享媒体分区,或者至少在同一个 /home 分区上使用不同的 home 目录。 此分区的大小各不相同。

GPT 分区应具有 “Linux home” 类型 GUID 933AC7E1-2EB4-4F13-B844-0E14E2AEF915 (gdisk8302 类型,fdiskhome 类型)。 MBR 分区应具有默认 “Linux” 类型 ID 83

Swap

交换空间是一个文件或分区,提供用作虚拟内存的磁盘空间。 交换文件和交换分区性能相当,但交换文件更易于根据需要调整大小。 交换分区可能可以在操作系统之间共享,但如果使用休眠则不能共享。

随着计算机获得了超过 gibibit 的内存容量,以前的“物理 RAM 容量的两倍”规则已经过时。 一个合理的默认大小为 4 GiB。

要使用休眠(也称为挂起到磁盘),建议创建与 RAM 大小相同的交换分区。 尽管内核会尝试压缩挂起到磁盘的镜像以适应交换空间,但如果使用的交换空间远小于 RAM,则无法保证成功。 有关更多信息,请参见电源管理/挂起和休眠#休眠

GPT 分区应具有 “Linux swap” 类型,其 GUID 为 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F (gdisk8200 类型,fdiskswap 类型)。 MBR 分区应具有 “Linux swap” 类型 ID 82

/data

可以考虑挂载一个 “data” 分区,以覆盖所有用户共享的各种文件。 为此目的使用 /home 分区也可以。 此分区的大小各不相同。

GPT 分区应具有默认的 “Linux filesystem” 类型 GUID 0FC63DAF-8483-4772-8E79-3D69D8477DE4。 MBR 分区应具有默认 “Linux” 类型 ID 83

/var

/var 目录存储可变数据,例如假脱机目录和文件、管理和日志记录数据、pacman 的缓存等。 例如,它用于缓存和日志记录,因此经常被读取或写入。 将其保留在单独的分区中可以避免因冗余日志等导致磁盘空间不足。

它的存在是为了使将 /usr 挂载为只读成为可能。 系统操作期间(相对于安装和软件维护)写入 /usr 的所有内容都必须位于 /var 下。

注意
  • /var 包含许多小文件。 如果使用单独的分区,则文件系统类型的选择应考虑这一事实。
  • 由于 /var 经常被读取或写入,因此建议您考虑此分区在旋转磁盘上的位置

/var 将包含 pacman 缓存以及其他数据。 如果软件包升级导致不稳定,需要降级到较旧的存档软件包,则保留这些软件包很有用。 pacman 缓存会随着系统的扩展和更新而增长,但如果空间成为问题,可以安全地清除它。

在桌面系统上,8–12 GiB 应该足以满足 /var 的需求,具体取决于将安装多少软件。 对于 NVIDIA、Wayland 和 GDM 的用户,请考虑增加此分区的大小,以便有足够的可用空间来容纳您的全部显存

GPT 分区应具有 “Linux variable data”(又名 “Linux /var”)类型 GUID 4D21B016-B534-45C2-A9FB-5C16E091FD2D (gdisk8310 类型)。 MBR 分区应具有默认 “Linux” 类型 ID 83

示例布局

此文章或章节需要扩充。

理由: 改进当前示例。(在Talk:Partitioning#Table draft 2中讨论)

以下示例使用 /dev/sda 作为示例磁盘,/dev/sda1 作为第一个分区。 如果您要对 NVMe 磁盘(例如 /dev/nvme0n1,分区从 /dev/nvme0n1p1 开始)或 SD 卡或 eMMC 磁盘(例如 /dev/mmcblk0,分区从 /dev/mmcblk0p1 开始)进行分区,则块设备命名方案会有所不同。 有关更多信息,请参见设备文件#块设备名称

注意
  • UEFI 启动不涉及任何 “boot” 标志,启动完全依赖于 NVRAM 中的启动项。Parted 及其前端在 GPT 上使用 “boot” 标志来指示分区是 EFI 系统分区。
  • 没有要求将所有必需/想要的分区都放在同一磁盘上,或者对所有磁盘使用相同类型的分区表。

UEFI/GPT 布局示例

已安装系统上的挂载点 分区 分区类型 GUID 建议大小
/boot/efi1 /dev/sda1 C12A7328-F81F-11D2-BA4B-00A0C93EC93BEFI 系统分区 1 GiB
[交换空间] /dev/sda2 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F:Linux 交换空间 至少 4 GiB 或 RAM 的大小,以便使用休眠
/ /dev/sda3 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709:Linux x86-64 根目录 (/) 设备剩余空间。 至少 23–32 GiB。

BIOS/MBR 布局示例

已安装系统上的挂载点 分区 分区类型 ID 启动标志 建议大小
[交换空间] /dev/sda1 82:Linux 交换空间 至少 4 GiB 或 RAM 的大小,以便使用休眠
/ /dev/sda2 83:Linux 设备剩余空间。 至少 23–32 GiB。
不适用 未分配空间2 不适用 不适用 磁盘末尾至少 16.5 KiB

BIOS/GPT 布局示例

已安装系统上的挂载点 分区 分区类型 GUID 建议大小
/dev/sda1 21686148-6449-6E6F-744E-656564454649: BIOS 启动分区3 1 MiB
[交换空间] /dev/sda2 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F:Linux 交换空间 至少 4 GiB 或 RAM 的大小,以便使用休眠
/ /dev/sda3 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709:Linux x86-64 根目录 (/) 设备剩余空间。 至少 23–32 GiB。
  1. 如果所使用的引导加载程序能够访问内核和 initramfs 镜像所在的文件系统(以及其上的所有内容),则可以将 ESP 挂载到 /efi。有关详细信息,请参阅 EFI 系统分区#典型挂载点Arch 启动过程#引导加载程序 中的警告。
  2. 在磁盘末尾保留至少 33 个 512 字节扇区(16.5 KiB)的未分区空间,以便将来转换为 GPT。此空间将用于备份 GPT 标头。保留未分区空间的建议适用于所有 MBR 分区磁盘。
  3. 仅当使用 GRUB 从 GPT 磁盘进行 BIOS 引导时才需要 BIOS 启动分区,使用其他引导加载程序时则不需要。此分区与 /boot 无关,并且不得使用文件系统格式化或挂载。

工具

分区工具

以下程序用于创建和/或操作设备分区表和分区。有关要使用的确切命令,请参阅链接的文章。

此表将帮助您为您的需求选择实用程序

名称 软件包 MBR GPT CLI TUI 脚本实用程序
fdisk util-linux fdisk(8) cfdisk(8) sfdisk(8)
GPT fdisk gptfdisk gdisk(8) cgdisk(8) sgdisk(8)
Parted parted parted(8) parted(8)

GUI 前端

  • blivet-gui — 用于存储配置的图形工具。它使用 parted 作为后端,通过 python-blivetAURlibblockdev
https://github.com/storaged-project/blivet-gui || blivet-guiAUR
https://apps.gnome.org/DiskUtility/ || gnome-disk-utility
  • GParted — 用于图形化管理磁盘分区的分区编辑器。它可以用于调整大小、复制和移动分区而不会丢失数据。它使用 parted 作为后端。
https://gparted.org/ || gparted
  • KDE Partition Manager — 帮助您管理计算机上的磁盘、分区和文件系统的实用程序。它使用 sfdisk 作为后端,通过 kpmcore。属于 kde-system 的一部分。
https://apps.kde.org/partitionmanager/ || partitionmanager

备份

恢复

  • gpart — 一种实用程序,用于猜测已损坏的 MBR 分区表的内容。其用法在 gpart(8) 手册页中进行了解释。
https://github.com/baruch/gpart || gpart
  • GPT fdisk — 一种分区工具,可以从辅助 GPT 标头(位于磁盘末尾)恢复主 GPT 标头(位于磁盘开头),反之亦然。
https://www.rodsbooks.com/gdisk/ || gptfdisk
  • TestDisk — 一种实用程序,支持恢复 MBR 和 GPT 上丢失的分区。
https://www.cgsecurity.org/index.html?testdisk.html || testdisk

分区对齐

经验法则是将分区的起始位置和大小对齐到兆字节 (MiB)。请参阅 高级格式#分区对齐

警告: 未对齐的分区将阻止将 4096 字节扇区与 dm-crypt/LUKS 一起使用。

GPT 内核支持

内核配置中的 CONFIG_EFI_PARTITION 选项启用内核中的 GPT 支持(尽管名称为 EFI PARTITION,看起来类似于 EFI 系统分区)。此选项必须内置于内核中,而不是编译为可加载模块。即使仅将 GPT 磁盘用于数据存储而不是启动,也需要此选项。在所有 Arch 的官方支持的内核中,此选项默认启用。如果使用自定义内核,请通过执行 CONFIG_EFI_PARTITION=y 启用此选项。

故障排除

欺骗旧版 BIOS 从 GPT 启动

一些旧版 BIOS(2010 年之前)尝试解析引导扇区,如果引导扇区不包含可引导的 MBR 分区,则拒绝引导。如果要在该磁盘上使用 GPT,则会出现问题,因为从 BIOS 的角度来看,它仅包含一个类型为 ee 的不可引导的 MBR 分区(即保护性 MBR 分区)。可以使用 fdisk -t mbr /dev/sda 将保护性 MBR 条目标记为可引导,这在某些 BIOS 上有效。但是,UEFI 规范禁止将保护性 MBR 分区条目标记为可引导,并且基于 UEFI 的主板确实会注意这一点,即使在传统引导模式下也是如此。因此,如果要创建基于 GPT 的 USB 闪存驱动器,该驱动器应在现代基于 UEFI 的主板以及坚持查找可引导 MBR 分区的旧版 BIOS 上都能启动,这很重要。使用 fdiskgdisk 等传统工具无法解决此问题,但可以手动创建伪造的 MBR 分区条目,以适用于这两种类型的 BIOS,作为字节序列。

以下命令将覆盖第二个 MBR 分区槽位,并在其中添加类型为 0(即未使用)的可引导分区,仅覆盖设备的第一个扇区。它不会干扰 GPT 或通常包含保护性 MBR 分区的第一个 MBR 分区条目。

# printf '\200\0\0\0\0\0\0\0\0\0\0\0\001\0\0\0' | dd of=/dev/sda bs=1 seek=462

最终结果将如下所示

# fdisk -t mbr -l /dev/sda
Disk /dev/sda: 232.9 GiB, 250059350016 bytes, 488397168 sectors
Disk model: ST3250820AS     
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Device     Boot Start       End   Sectors   Size Id Type
/dev/sda1           1 488397167 488397167 232.9G ee GPT
/dev/sda2  *        0         0         1   512B  0 Empty

Partition table entries are not in disk order.

启用固件 RAID 后驱动器不可见

如果在固件设置中 SATA 或 NVMe 驱动器可见,但 Linux 不可见(例如 fdisk -l 未列出),则可能是控制器处于固件 RAID 模式。

对于 NVMe,日志应显示类似以下内容

kernel: ahci 0000:00:17.0: Found 1 remapped NVMe devices.
kernel: ahci 0000:00:17.0: Switch your BIOS from RAID to AHCI mode to use them.

解决方案是进入固件设置并禁用 NVMe RAID 模式,并将 SATA 控制器操作模式RAID 更改为AHCI。请注意,该设置可能具有不同的名称(例如“Intel Rapid Storage Technology”、“Intel RST”、“Intel VMD controller”或“VMD”),并且它也可能是每个控制器或每个端口的设置。

警告:与 Windows 双启动时,需要在更改控制器模式之前进行准备。请参阅 如何在安装后在 Windows 8 和 Windows 10 中启用 AHCI
注意: 某些固件没有专用的 NVMe RAID 模式设置,并且尽管这些术语没有任何意义,但也对 NVMe 控制器使用 SATA 控制器操作模式设置。这些固件只是将 NVMe 控制器上的“SATA 操作模式”设置为“AHCI”解释为“使用本机操作模式,不使用固件 RAID”。[3][4][5]

另请参阅