分区
来自 维基百科
- 磁盘分区或磁盘切片是在辅助存储器上创建一个或多个区域,以便可以单独管理每个区域。
整个磁盘可以分配给单个分区,也可以分配给多个分区,例如用于双启动、维护 swap 分区或逻辑上分隔数据(如音频和视频文件)。分区方案存储在分区表中,例如主引导记录 (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 结构,请参见维基百科:主引导记录#磁盘分区。
- 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 都同样容易获得良好的可靠性和性能。
选择时要考虑的一些要点
- 要使用传统 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 表。
无分区磁盘
无分区磁盘又名 超级软盘 是指没有分区表的存储设备,只有一个文件系统占用整个存储设备。无分区设备上存在的引导扇区称为卷引导记录 (VBR)。
Btrfs 分区
Btrfs 可以占用整个数据存储设备,并替换 MBR 或 GPT 分区方案。有关详细信息,请参见 Btrfs#无分区 Btrfs 磁盘 说明。
分区方案
没有关于硬盘分区的严格规则,尽管可以遵循下面给出的一般指导。磁盘分区方案由各种问题决定,例如所需的灵活性、速度、安全性以及可用磁盘空间施加的限制。这本质上是个人偏好。如果您想双启动 Arch Linux 和 Windows 操作系统,请参阅 与 Windows 双启动。
单根分区
此方案是最简单的、最灵活的,并且对于大多数用例来说应该足够了,因为消费级设备的存储大小增加了。交换文件可以创建并根据需要轻松调整大小。通常,首先考虑单个 /
分区,然后根据特定的用例(如 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
(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 的 ea00
类型,fdisk 的 xbootldr
类型)或 MBR 分区类型 ID ea
。
在这两种情况下,建议的分区大小为 1 GiB,这应该为容纳多个内核提供足够的空间。如果仍然有疑问,4 GiB 应该对任何人来说都足够了。
/home
/home
目录包含特定于用户的配置文件、缓存、应用程序数据和媒体文件。
分离出 /home
允许单独重新分区 /
,但请注意,即使 /home
不是单独的,您仍然可以在 /home
不受影响的情况下重新安装 Arch——只需要删除其他顶级目录,然后可以运行 pacstrap。
您不应在不同发行版的用户之间共享主目录,因为它们使用不兼容的软件版本和补丁。相反,请考虑共享媒体分区,或者至少在同一 /home
分区上使用不同的主目录。此分区的大小各不相同。
GPT 分区应具有“Linux home”类型 GUID 933AC7E1-2EB4-4F13-B844-0E14E2AEF915
(gdisk 的 8302
类型,fdisk 的 home
类型)。MBR 分区应具有默认的“Linux”类型 ID 83
。
Swap
swap 是一个文件或分区,它提供用作虚拟内存的磁盘空间。交换文件和交换分区的性能相当,但交换文件更易于根据需要调整大小。交换分区可能在操作系统之间共享,但如果使用休眠则不行。
由于计算机的内存容量已超过 gibibit,因此以前“物理 RAM 的两倍”的规则已过时。一个合理的默认大小为 4 GiB。
要使用休眠(又名挂起到磁盘),建议创建 RAM 大小的交换分区。尽管内核会尝试压缩挂起到磁盘的镜像以适应交换空间,但如果使用的交换空间明显小于 RAM,则无法保证它会成功。有关更多信息,请参见 电源管理/挂起和休眠#休眠。
GPT 分区应具有“Linux swap”类型,GUID 为 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F
(gdisk 的 8200
类型,fdisk 的 swap
类型)。MBR 分区应具有“Linux swap”类型 ID 82
。
/data
可以考虑挂载“数据”分区以覆盖所有用户共享的各种文件。为此目的使用 /home
分区也可以。此分区的大小各不相同。
GPT 分区应具有默认的“Linux filesystem”类型 GUID 0FC63DAF-8483-4772-8E79-3D69D8477DE4
。MBR 分区应具有默认的“Linux”类型 ID 83
。
/var
/var
目录存储可变数据,例如 spool 目录和文件、管理和日志记录数据、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 或 /efi 1 |
/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 根 (/) |
设备剩余空间。至少 23–32 GiB。
已安装系统上的挂载点 | 分区 | BIOS/MBR 布局示例 | 挂载点 | 建议大小 |
---|---|---|---|---|
[SWAP]
|
/dev/sda1
|
分区 | 分区类型 ID | 至少 4 GiB 或 RAM 大小以使用休眠 |
/
|
/dev/sda2
|
引导标志 | [SWAP] | 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709 :Linux x86-64 根 (/) |
/dev/sda1 | 82 :Linux swap |
/dev/sda1 | /dev/sda1 | 否 |
/
已安装系统上的挂载点 | 分区 | 分区类型 GUID | 建议大小 |
---|---|---|---|
/dev/sda2 | /dev/sda1
|
83 :Linux |
是 |
[SWAP]
|
/dev/sda2
|
0657FD6D-A4AB-43C4-84E5-0933C84B4F4F :Linux swap |
至少 4 GiB 或 RAM 大小以使用休眠 |
/
|
/
|
/dev/sda3 | 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709 :Linux x86-64 根 (/) |
- N/A
- 未分配空间2
- 至少 16.5 KiB 在磁盘末尾
工具
BIOS/GPT 布局示例
挂载点
分区
分区类型 GUID | 引导标志 | /boot | /dev/sda1 | 21686148-6449-6E6F-744E-656564454649 :BIOS 启动分区3 |
否 | [SWAP] |
---|---|---|---|---|---|---|
fdisk | /dev/sda2 | [SWAP] | [SWAP] | 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F :Linux swap
|
否 | / |
/dev/sda3 | 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709 :Linux x86-64 根 (/)
|
分区类型 ID | [SWAP] | 否 | N/A | 未分配空间2 |
N/A | parted | [SWAP] | [SWAP] | 1 MiB | 分区类型 ID | 1 MiB |
1 GiB
- 设备剩余空间。至少 23–32 GiB。
- ESP 可以挂载到
/efi
,如果使用的引导加载程序能够访问内核和 initramfs 镜像所在的文件系统(以及其上的一切内容)。有关详细信息,请参见 EFI 系统分区#典型挂载点 和 Arch 启动过程#引导加载程序 中的警告。
- GNOME Disks — 一个用于处理存储设备的 GNOME 实用程序。它使用 parted 作为后端,通过 udisks2 和 libblockdev。属于 gnome 的一部分。
- GParted — 用于图形化管理磁盘分区的分区编辑器。它可以用于调整大小、复制和移动分区而不会丢失数据。它使用 parted 作为后端。
- KDE Partition Manager — 帮助您管理计算机上的磁盘、分区和文件系统的实用程序。它使用 sfdisk 作为后端,通过 kpmcore。属于 kde-system 的一部分。
备份
- fdisk 可以创建分区表的一个备份。参见 fdisk#备份和恢复分区表。
- GPT fdisk 可以创建一个二进制备份,包含保护性 MBR、主 GPT 头部、备份 GPT 头部以及分区表的一个副本。参见 GPT fdisk#备份和恢复分区表。
恢复
- GPT fdisk — 一个分区工具,可以从辅助 GPT 头部(位于磁盘末尾)恢复主 GPT 头部(位于磁盘开头),反之亦然。
- TestDisk — 一个实用程序,支持恢复 MBR 和 GPT 上丢失的分区。
分区对齐
经验法则是将分区的起始位置和大小对齐到兆字节。参见 高级格式#分区对齐。
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 上启动,这一点很重要。使用诸如 fdisk 或 gdisk 之类的传统工具无法解决此问题,但是可以手动创建一个伪造的 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 快速存储技术”、“Intel RST”、“Intel VMD 控制器”或“VMD”),并且也可能是按控制器或按端口的。