分区
来自 Wikipedia
- 磁盘分区或磁盘切片是在 二次存储 上创建一或多个区域,以便每个区域可以被单独管理。
整个磁盘可以分配给一个分区,或者根据需要(如双启动、维护 交换分区 或逻辑上分离音频和视频文件等数据)分配给多个分区。分区方案存储在 分区表 中,如主引导记录 (MBR) 或 GUID 分区表 (GPT)。
分区表是使用 众多分区工具 中的一种来创建和修改的。Arch Linux 可用的工具列在 #分区工具 一节中。
分区通常直接包含一个 文件系统,这通过在分区上创建文件系统(也称为 格式化)来实现。或者,分区可以包含 LVM、块设备加密 或 RAID,它们最终提供设备文件,可以在其上放置文件系统(或设备可以进一步堆叠)。
任何直接包含可挂载文件系统的 块设备(例如磁盘、分区、LUKS 设备、LVM 逻辑卷或 RAID 阵列)都称为 卷。
分区表
有两种主要的分区表类型。它们将在下文的 #主引导记录 (MBR) 和 #GUID 分区表 (GPT) 部分进行描述,并讨论如何在这两者之间进行选择。第三种不太常见的选择是使用无分区磁盘,也将在下文讨论。
parted /dev/sdX print 或 fdisk -l /dev/sdX,其中 /dev/sdX 是 块设备,例如 SATA 磁盘的 /dev/sda,NVMe 磁盘的 /dev/nvme0n1 或 eMMC 磁盘的 /dev/mmcblk0。有关块设备命名的更多信息,请参阅 设备文件#块设备名称。主引导记录
主引导记录 (MBR) 是存储设备的前 512 字节。它包含一个操作系统的 引导加载程序 和存储设备的分区表。它在 BIOS 系统上的 引导过程 中起着重要作用。有关 MBR 结构,请参阅 Wikipedia:Master boot record#Disk partitioning。
- MBR 不位于分区中;它位于设备的第一个扇区(物理偏移量 0),位于第一个分区之前。
- 位于无分区设备或单个分区内的引导扇区称为 卷引导记录 (VBR)。
主引导记录(引导代码)
MBR 的前 440 字节是引导代码区域。在 BIOS 系统上,它通常包含引导加载程序的第一阶段。可以使用 dd 备份、从备份恢复或删除 引导代码。
主引导记录(分区表)
在 MBR 分区表(也称为 DOS 或 MS-DOS 分区表)中有 3 种分区类型:
- 主分区
- 扩展分区
- 逻辑分区
主分区可以启动,并且每个磁盘或 RAID 卷最多有四个分区。如果 MBR 分区表需要更多分区,则需要将一个主分区替换为扩展分区,其中包含逻辑分区。
扩展分区可以看作是逻辑分区的容器。一个硬盘最多可以包含一个扩展分区。扩展分区也被计为一个主分区,因此如果磁盘有扩展分区,则最多只能有三个额外的分区(即三个主分区和一个扩展分区)。扩展分区内的逻辑分区数量没有限制。与 Windows 双启动的系统需要 Windows 驻留在主分区中。
惯用的编号方案是创建主分区 sda1 到 sda3,然后是一个扩展分区 sda4。sda4 上的逻辑分区编号为 sda5、sda6 等。
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 的可靠性和性能同样容易获得。
选择时需要考虑的一些要点
- 要使用 Legacy 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。
GPT 相较于 MBR 的一些优点是:
- 为每个分区提供唯一的磁盘 GUID 和分区 GUID(PARTUUID)——一种独立于文件系统的引用分区和磁盘的良好方式。GUID 是 systemd 启用的 initramfs 中可用的 可发现分区规范 的先决条件。
- 提供独立于文件系统的分区名称(PARTLABEL)。
- 任意数量的分区——取决于为分区表分配的空间——无需扩展分区和逻辑分区。默认情况下,GPT 表包含定义 128 个分区的空间。但是,如果您想定义更多分区,可以为分区表分配更多空间(目前已知只有 gdisk 支持此功能)。
- 使用 64 位 LBA 存储扇区编号——最大可寻址磁盘大小为 2 ZiB。MBR 每驱动器仅限于寻址 2 TiB 空间。[1]
- 在磁盘末尾存储备份的头部和分区表,有助于在主头部和分区表损坏时进行 恢复。
- CRC32 校验和,用于检测头部和分区表的错误和损坏。
有关 #分区工具 的一节包含一个表格,指示了哪些工具可用于创建和修改 GPT 和 MBR 表。
无分区磁盘
无分区磁盘,也称为 superfloppy,指没有分区表的存储设备,有一个文件系统占据整个存储设备。无分区设备上的引导扇区称为 卷引导记录 (VBR)。
Btrfs 分区
Btrfs 可以占据整个数据存储设备,并取代 MBR 或 GPT 分区方案。有关详细信息,请参阅 Btrfs#无分区 Btrfs 磁盘 说明。
分区方案
对硬盘进行分区没有严格的规则,尽管可以遵循以下一般指导。磁盘分区方案由所需的灵活性、速度、安全性以及可用磁盘空间施加的限制等各种问题决定。这本质上是个人偏好。如果您想双启动 Arch Linux 和 Windows 操作系统,请参阅 与 Windows 双启动。
单一根分区
此方案最简单、最灵活,鉴于消费级设备存储容量的增加,应足以满足大多数用例。可以创建一个 交换文件 并根据需要轻松调整大小。通常,从考虑一个单独的 / 分区开始,然后根据特定用例(如 RAID、加密、共享媒体分区等)分离其他分区是合理的……有关一些常见到不常见专用分区的描述,请参阅 #独立分区。
建议单一根分区的最小尺寸为 23–32 GiB。用户文件和使用交换文件可能需要更多空间。一个最基本的安装需要大约 2 GiB。例如,一个简单的服务器可以装在 4 GiB 以下,而一个完整的 KDE Plasma 安装需要 10 GiB。这两个示例都需要频繁 清理包缓存。
/ 中的 /boot 目录,否则需要一个独立的物理(在磁盘的主分区表中,不在 LVM、软件 RAID 或文件系统子卷等之下)/boot 分区。这意味着引导加载程序必须支持从块设备开始,堆叠块设备(LVM、RAID、dm-crypt、LUKS 等),直到托管内核和 initramfs 镜像的文件系统。GPT 分区应具有“Linux root (x86-64)”类型 GUID 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709(gdisk 为 8304 类型)。MBR 分区应具有默认的“Linux”类型 ID 83。
独立分区
将某个路径分离为一个分区允许选择不同的文件系统和挂载选项。在某些情况下,例如媒体分区,它们也可以在操作系统之间共享。
以下是一些分区时可以使用的示例布局,以及以下子节详细介绍了一些可以放置在自己独立分区中然后 挂载 到 / 下挂载点的目录。有关这些目录内容的完整描述,请参阅 file-hierarchy(7)。
/
根目录 是层级结构的顶部,是主文件系统挂载点,所有其他文件系统都从它开始。所有文件和目录都出现在根目录 / 下,即使它们存储在不同的物理设备上。根文件系统的内容必须足以启动、恢复、恢复和/或修复系统。因此,/ 下的某些目录不适合作为独立分区。
/ 分区或根分区是必需的,也是最重要的。其他分区可以被它取代。
/ 传统上包含 /usr 目录,该目录的体积会根据安装的软件量而显著增长。对于大多数拥有现代硬盘的用户来说,15-20 GiB 应该足够了。如果您计划在此存储交换文件且不计划使用单独的 /var,您可能需要更大的分区大小(即加上 RAM 大小以支持休眠,再加上 8-12 GiB 用于 /var)。
GPT 分区应具有“Linux root (x86-64)”类型 GUID 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709(gdisk 为 8304)。MBR 分区应具有默认的“Linux”类型 ID 83。
/boot
/boot 目录包含 vmlinuz 和 initramfs 镜像,以及引导加载程序配置文件和引导加载程序阶段。它还存储在内核开始执行用户空间程序之前使用的数据。/boot 对于正常的系统操作不是必需的,仅在引导和内核升级时(生成初始 ramdisk 时)需要。
- 您的 引导加载程序 必须能够访问
/boot分区。这意味着引导加载程序必须支持从块设备开始,堆叠块设备(LVM、RAID、dm-crypt、LUKS 等),直到托管内核和 initramfs 镜像的文件系统。 - 文件系统可能获得引导加载程序尚不支持的新功能(例如 archlinux/packaging/packages/grub#7、FS#79857、FS#59047、FS#58137、FS#51879、FS#46856、FS#38750、FS#21733 和 fscrypt 加密目录),使其不适合用作
/boot分区,除非禁用不兼容的功能。通常可以通过使用 FAT32 来避免这种情况,因为它几乎被所有设备支持,并且不会获得任何新功能。
有关引导加载程序要求和功能的更多信息,请参阅 Arch 引导过程#引导加载程序。
当使用 EFI 系统分区作为 /boot 时,要求与 EFI 系统分区 文章中所述的要求相同——必须设置正确的分区类型。
在其他情况下,建议将分区类型设置为 扩展引导加载程序 (XBOOTLDR) 分区,即 GPT 分区类型 GUID BC13C2FF-59E6-4262-A352-B275FD6F7172(gdisk 为 xbootldr 类型,fdisk 为 xbootldr 类型),或者 MBR 分区类型 ID ea。
在这两种情况下,建议为该分区的大小为 1 GiB,这应该有足够的空间容纳多个内核。如果仍有疑问,4 GiB 应该足够任何人使用了。
/home
/home 目录包含用户特定的配置文件、缓存、应用程序数据和媒体文件。
将 /home 分离出来允许单独重新分区 /,但请注意,即使 /home 未分离,您仍然可以重新安装 Arch 而不触及 /home——只需删除其他顶级目录,然后运行 pacstrap 即可。
您不应在不同发行版的用户之间共享主目录,因为它们使用不兼容的软件版本和补丁。相反,请考虑共享媒体分区,或至少在同一个 /home 分区上使用不同的主目录。此分区的大小各不相同。
GPT 分区应具有“Linux home”类型 GUID 933AC7E1-2EB4-4F13-B844-0E14E2AEF915(gdisk 为 8302 类型,fdisk 为 home 类型)。MBR 分区应具有默认的“Linux”类型 ID 83。
Swap
Swap 是一个文件或分区,提供用作虚拟内存的磁盘空间。Swap 文件和 swap 分区性能相当,但 swap 文件更易于根据需要调整大小。Swap 分区可能可以在操作系统之间共享,但如果使用休眠则不能。
由于计算机的内存容量已超过一吉比特,因此之前的“物理 RAM 两倍”的规则已过时。一个合理的 默认大小 是 4 GiB。
要使用休眠(也称为挂起到磁盘),建议将 swap 分区创建为 RAM 的大小。尽管内核会尝试压缩挂起到磁盘的映像以适应 swap 空间,但如果使用的 swap 空间明显小于 RAM,则不能保证其成功。有关更多信息,请参阅 电源管理/挂起和休眠#休眠。
GPT 分区应具有“Linux swap”类型,GUID 为 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F(gdisk 为 8200 类型,fdisk 为 swap 类型)。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(gdisk 为 8310 类型)。MBR 分区应具有默认的“Linux”类型 ID 83。
分区方案示例
以下示例使用 /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-00A0C93EC93B: EFI 系统分区 |
1 GiB |
[SWAP]
|
/dev/sda2
|
0657FD6D-A4AB-43C4-84E5-0933C84B4F4F: Linux Swap |
至少 4 GiB 或 RAM 的大小以使用 休眠 |
/
|
/dev/sda3
|
4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709: Linux x86-64 root (/) |
设备剩余部分。至少 23–32 GiB。 |
BIOS/MBR 布局示例
| 已安装系统上的挂载点 | 分区 | 分区类型 ID | 引导标志 | 建议大小 |
|---|---|---|---|---|
[SWAP]
|
/dev/sda1
|
82: Linux Swap |
否 | 至少 4 GiB 或 RAM 的大小以使用 休眠 |
/
|
/dev/sda2
|
83: Linux |
是 | 设备剩余部分。至少 23–32 GiB。 |
| N/A | 未分配空间2 | N/A | N/A | 磁盘末尾至少 16.5 KiB |
BIOS/GPT 布局示例
| 已安装系统上的挂载点 | 分区 | 分区类型 GUID | 建议大小 |
|---|---|---|---|
| 无 | /dev/sda1
|
21686148-6449-6E6F-744E-656564454649: BIOS 引导分区3 |
1 MiB |
[SWAP]
|
/dev/sda2
|
0657FD6D-A4AB-43C4-84E5-0933C84B4F4F: Linux Swap |
至少 4 GiB 或 RAM 的大小以使用 休眠 |
/
|
/dev/sda3
|
4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709: Linux x86-64 root (/) |
设备剩余部分。至少 23–32 GiB。 |
- 如果使用的引导加载程序能够访问内核和 initramfs 镜像所在的 文件系统(以及其上所有内容),则 ESP 可以挂载到
/efi。有关详细信息,请参阅 EFI 系统分区#典型挂载点 和 Arch 引导过程#引导加载程序 中的警告。 - 磁盘末尾至少 33 个 512 字节扇区(16.5 KiB)的未分区空间,以便将来 转换为 GPT。此空间将用于备份 GPT 头部。保留未分区空间的建议适用于所有 MBR 分区的磁盘。
- 当使用 GRUB 或 Limine 在 GPT 磁盘上进行 BIOS 启动时,需要 BIOS 引导分区,当使用其他引导加载程序时则不需要。该分区与
/boot无关,并且不能用文件系统格式化或挂载。
工具
Partitioning tools
以下程序用于创建和/或操作设备分区表和分区。有关使用的确切命令,请参阅链接的文章。
此表将帮助您选择适合您需求的实用程序
| 名称 | 软件包 (Package) | 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) |
图形化前端
- blivet-gui — 存储配置的图形化工具。它通过 python-blivetAUR 和 libblockdev 使用 parted 作为后端。
- GNOME Disks — 一个用于处理存储设备的 GNOME 工具。它通过 udisks2 和 libblockdev 使用 parted 作为后端。属于 gnome。
- GParted — 用于图形化管理磁盘分区的分区编辑器。它可以在不丢失数据的情况下用于调整分区大小、复制和移动分区。它使用 parted 作为后端。
- KDE Partition Manager — 帮助您管理计算机上的磁盘、分区和文件系统的实用程序。它通过 kpmcore 使用 sfdisk 作为后端。属于 kde-system。
备份
- fdisk 可以创建分区表的备份。请参阅 fdisk#Backup and restore partition table。
- GPT fdisk 可以创建二进制备份,包括保护性 MBR、主 GPT 头、备份 GPT 头以及一份分区表副本。请参阅 GPT fdisk#Backup and restore partition table。
恢复
- GPT fdisk — 一个分区工具,可以将主 GPT 头(位于磁盘开头)从辅助 GPT 头(位于磁盘末尾)恢复,反之亦然。
- TestDisk — 一个支持在 MBR 和 GPT 上恢复丢失分区的工具。
分区对齐
经验法则是将分区的开始和大小对齐到 MiB。请参阅 Advanced Format#Partition alignment。
GPT 内核支持
内核配置中的 CONFIG_EFI_PARTITION 选项启用了内核中的 GPT 支持(尽管名称是 EFI PARTITION,看起来像 EFI system partition)。此选项必须内置于内核中,而不是编译为可加载模块。即使 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 的 U 盘,它应该能在现代基于 UEFI 的主板以及坚持查找可引导 MBR 分区的旧 BIOS 上启动,那么这个问题就很重要。使用传统的工具(如 fdisk 或 gdisk)无法解决此问题,但可以通过手动创建一个字节序列来创建适合这两种 BIOS 的伪 MBR 分区条目。
下面的命令将覆盖第二个 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”),并且它也可以是每个控制器或每个端口的。