手册:X86/安装/准备磁盘
块设备简介
块设备
让我们来好好看看Gentoo Linux以及普通Linux中有关磁盘方面的知识,包括块设备、分区和Linux文件系统。一旦磁盘的来龙去脉都了解了,我们将设置分区和文件系统以进行安装。
首先,让我们来看看块设备。SCSI和SATA磁盘以/dev/sda,/dev/sdb,/dev/sdc等形式被标注。在更先进的设备中,基于PCI Express的NVMe固态磁盘一般以/dev/nvme0n1,/dev/nvme0n2等形式被标注。
下表将帮助读者确定在系统中哪里可以找到块设备的类型:
| 设备类型 | 默认设备句柄 | 说明和注意事项 |
|---|---|---|
| IDE,SATA,SAS,SCSI 或 USB 闪存 | /dev/sda | 从大约 2007 年到现在,这可能是 Linux 中最常用的设备句柄。这类设备可以连接在 SATA 总线,SCSI,USB 总线上作为块储存。例如,在第一个 SATA 设备的第一个分区称为 /dev/sda1。 |
| NVM Express (NVMe) | /dev/nvme0n1 | NVMe设备是最新的固态技术,它连接在 PCI Express 总线,并且拥有市面上最快的传输速度。2014 年前后的系统可能会支持 NVMe 硬件。在第一个 NVMe 设备的第一个分区称为 /dev/nvme0n1p1。 |
| MMC,eMMC 和 SD | /dev/mmcblk0 | 嵌入式 MMC 设备,SD 卡和其它类型的记忆卡 可以作为数据存储使用。也就是说,许多系统可能不允许从这些类型的设备启动。建议不使用这些设备用来安装 Linux,而是考虑用它们来传输文件,这也是它们主要的设计意图。另外,这种储存类型很适合用来做短期的文件备份和快照。 |
| VirtIO | /dev/vda | 虚拟化设备能且仅能在 QEMU 虚拟机上找到。virtio_blk设备可让虚拟机访问宿主机上已经为虚拟机分配的硬盘空间。既然说到这里,最好在虚拟机里面先体验一下 Gentoo。
|
上面的块设备代表磁盘的抽象接口。用户程序可以使用这些块设备来与你的磁盘进行交互,而无需担心驱动器到底是 SATA,SCSI 还是其他什么东西。该程序可以把磁盘当作一系列连续的,可随机访问的 4096 字节块(4K)的存储。
分区表
虽然理论上可以用一整块磁盘来安装一个Linux系统(比如当创建一个 btrfs RAID时),但是实践中几乎从不这样做。实际上,一块磁盘可以被分成小一些的、更容易管理的块设备。在 x86 系统里,这被称为分区。有两个标准的分区技术可以被使用:MBR(有时也称为 DOS 磁盘标签)和GPT;这些与两种引导过程类型相关:传统 BIOS 引导和 UEFI。
GUID 分区表 (GPT)
GUID分区表(GPT)设置(也被称为GPT disklabel)对分区使用64位标识符。它存储分区信息的位置比 MBR 分区表 (DOS disklabel) 的 512 字节大得多,这意味着 GPT 磁盘的分区数量几乎没有限制。此外,最大分区大小要大得多(接近 8 ZiB —— 是的,ZiB)。
当操作系统和系统固件之间的软件接口是UEFI (相对于BIOS)时,GPT几乎是必选的,因为这里 DOS 磁盘标签会引起很多兼容性问题。
GPT还利用校验和和冗余。 它携带CRC32校验和以检测报头和分区表中的错误,并在磁盘的末尾有一个备份GPT。 此备份表可用于恢复磁盘开头附近主GPT的损坏。
关于 GPT 有一些注意事项:
- 在基于 BIOS 的计算机上使用 GPT 是可行的,但用户将不能与 Microsoft Windows 操作系统进行双重引导。原因是 Microsoft Windows 无法在 BIOS 模式下自 GPT 分区启动。
- 一些配置为以 BIOS/CSM/legacy 模式启动的有问题的(旧)主板固件在从 GPT 标记的磁盘启动时也可能存在问题。
主引导记录 (MBR) 和 DOS 引导扇区
主引导记录 引导扇区(也称为 DOS 引导扇区,DOS 磁盘标签,而现如今为区别于 GPT/UEFI 安装,称为传统 BIOS 引导)于 1983 年首次在 PC DOS 2.x 中引入。 MBR 使用 32 位标识符作为分区的起始扇区和长度,并支持三种分区类型:主分区、扩展分区和逻辑分区。主分区的信息存储在主引导记录本身——磁盘最开始的一个非常小的(通常是 512 字节)位置。由于空间很小,因此仅支持四个主分区(例如,/dev/sda1 到 /dev/sda4)。
为了支持更多的分区,可以将 MBR 中的主分区之一标记为扩展分区。然后,该分区可以包含其它逻辑分区(分区内的分区)。
虽然大多数主板制造商仍然支持,但 MBR 引导扇区及其相关的分区限制被认为是传统的分区方式。除非使用 2010 之前的硬件,否则最好使用 GUID 分区表对磁盘进行分区。必须继续进行设置类型的读者应了解以下信息:
- 大多数 2010 年后的主板都有接受用 MBR 引导扇区作为传统(受支持但不理想的)引导模式。
- 由于使用 32 位标识符,MBR 中的分区表无法处理大于 2 TiB 的存储空间。
- 除非创建扩展分区,否则 MBR 最多支持四个分区。
- 此设置不提供备份引导扇区,因此如果某些内容覆盖分区表,所有分区信息将丢失。
手册作者建议读者安装Gentoo时尽可能使用 GPT 。
高级储存
官方 Gentoo 启动媒介提供对逻辑卷管理器(LVM)的支持,而 LVM 可将分区和磁盘等物理磁盘卷整合为卷组。卷组相对于分区而言更加灵活,并且可用于构建 RAID 阵列,或是在高读写速度的固态硬盘上为低读写速度的机械硬盘提供缓存功能。尽管本手册并不会涉及到相关内容及使用方法,Gentoo 可在 LVM 上完美运行。
默认分区方案
在本手册的其余部分,我们将讨论和解释两种情况:
- GUID 分区表 (GPT)和 UEFI 引导。
- MBR 分区表和传统 BIOS 引导。
虽然可以将引导类型与某些主板固件混合和匹配,但这超出了手册的意图。如前所述,强烈建议在现代硬件上安装时使用GPT磁盘标签和UEFI引导。
以下分区方案是一种简单的布局示例。
下方表格的首行包含仅针对 GPT 分区表或 MBR DOS/传统 BIOS 分区表的特殊提示。如有疑问,请参照 GPT 的内容执行,因于2010年之后生产的 x86 架构的机器通常都会提供对 UEFI 固件及 GPT 启动分区的支持。
| 分区 | 文件系统 | 大小 | 描述 |
|---|---|---|---|
| /dev/sda1 | fat32 EFI 系统分区所需的文件系统,总与 GPT 磁盘标签相关联。 | 1 GiB | EFI 系统分区详情。 适用于支持 UEFI 的系统固件。通常为 2010 年前后至今生产的系统。 |
| ext4 MBR 分区表启动分区推荐的文件系统,仅限于 DOS/传统 BIOS 磁盘标签的旧固件一起使用。 | MBR DOS/传统 BIOS 引导分区详情。 适用于传统 BIOS 机器固件。通常为 2010 年<u>以前</u>的系统,并且逐步停止维护。 | ||
| /dev/sda2 | linux-swap | RAM 大小 * 2 | 交换分区详情。 |
| /dev/sda3 | xfs | 磁盘剩余空间选定的配置文件、额外的分区(可选),以及系统的构建目的均会在不同程度上复杂化根文件系统适当的分区策略,因此手册作者无法提供一个"放之四海而皆准"的根文件系统分区建议。</br></br>当 Gentoo 为磁盘上仅有的操作系统时,最安全的建议操作为:直接将剩下的磁盘空间全分给根分区。 | 根分区详情。 |
如果这些信息已经足够,高级读者可以直接跳转到实际分区操作。
fdisk 和 parted 都是包含在官方 Gentoo live 镜像环境中的分区程序。其中相对知名且稳定性强的程序名为 fdisk ,可用于处理 MBR 和 GPT 磁盘。 parted 则是最早支持 GPT 分区的 Linux 块设备管理的分区工具之一。如果读者愿意的话,parted 可替换 fdisk 作为接下来的操作工具,但是因为在大多数 Linux 环境中均主要使用 fdisk,所以本手册只介绍后者。
在进行创建分区的指导之前,关于分区方案和常见陷阱我们会先介绍更多的细节。
设计一个分区方案
多少个分区以及多大?
磁盘分区布局的设计高度依赖于系统需求和应用到设备的文件系统。如果有很多用户,建议将 /home 放在单独的分区上,这将提高安全性并使备份和其他类型的维护更容易。 以增强安全性及便于备份。如果安装 Gentoo 来做邮件服务器,那么 /var 应该单独分一个区,因为所有的邮件都储存于 /var/。游戏服务器可能应该有一个独立的 /opt/,因为大多数游戏服务器软件都安装在那里。原因也和 /home/ 目录一样:安全,备份和维护。
在 Gentoo 的大多数情况下,/usr 和 /var 应该保持相对较大的空间。/usr 存放了系统中的大部分应用程序和 Linux 内核源代码(在/usr/src下)。默认情况下,/var 存放着 Gentoo ebuild 仓库(位于 /var/db/repos/gentoo ),根据文件系统的不同,它大约耗费 650MiB 的磁盘空间。这个空间估计"不包括" /var/cache/distfiles 和 /var/cache/binpkgs 目录,当它们被添加到系统中时,将逐渐填写源代码文件和二进制包(可选)。
分区的数量和大小取决于权衡利弊后根据实际情况选择最佳选项。单独的分区或卷具有以下优点:
- 为每个分区或者卷选择性能最好的文件系统。
- 当一个失控的工具持续向一个分区或卷写文件时,也不至于让整个系统由于无可用空间而无法运行。
- 如果有必要,可以简化文件系统检查,多个检查可以并行的完成(尽管使用多个磁盘比使用多个分区更多地实现了这一优势)。
- 可以通过在挂载一些分区或卷时使用只读、
nosuid(忽略setuid属性)、noexec(忽略可执行属性)等来增加安全性。
但是,多个分区也有一些缺点:
- 如果配置不正确,系统可能在一个分区上有很多可用空间,而在另一个分区上可用空间很少。
- /usr/ 的单独分区可能需要管理员使用 initramfs 引导,以便在其他引导脚本启动之前挂载该分区。由于 initramfs 的生成和维护超出了本手册的范围,我们建议新手不要为 /usr/ 使用单独的分区。
- SCSI 和 SATA 也有 15 个分区的限制,除非磁盘使用 GPT 标签。
打算使用 systemd 作为服务和 init 系统安装时,/usr/ 目录必须在启动时可用,可以将该目录作为根文件系统的一部分,或通过 initramfs 挂载该目录。
那么交换空间呢?
| 内存规模 | 如果希望支持挂起的话...... | 如果希望能够休眠的话...... |
|---|---|---|
| 2 GB 或以下 | 2 倍内存 | 3 倍内存 |
| 2~8 GB | 等同于实际内存容量 | 2 倍内存 |
| 8~64 GB | 至少 8 GB,至多 16 GB | 1.5 倍内存 |
| 64 GB 或以上 | 至少 8 GB | 不建议在此时考虑休眠的事情! 不建议在拥有超量内存的机器上启用休眠。只要可以,为了能够顺利休眠系统,所有的内存内容必须被全量写入硬盘内。当需要写入的内存达到数十 GB (甚至更多!)时,其时间消耗量将相当可观,对于机械硬盘而言则更是如此。在这种情况下,最好直接挂起系统。 |
交换空间的大小其实并没有一个完美的答案。交换空间的作用是当内存(RAM)有存储压力时为内核提供磁盘存储空间。一个交换空间允许内核将稍后不太会被访问的内存页面移动到磁盘(swap 或者 page-out),以此为当前任务释放 RAM 中的内存。当然,一旦要使用到已经交换到磁盘的页面,内核将需要花费比从 RAM 读取要长得多的时间(相比较内存,硬盘是非常慢的),以让这些页面放回到内存中(page-in)。
如果系统不运行很需要内存的应用程序或有足够多的可用 RAM,则不需要太多的交换空间。但是请注意,在休眠的情况下,交换空间用于存储"内存的全部内容"(可能在台式机和笔记本电脑系统上,而不是在服务器系统上)。如果系统需要支持休眠,那么有必要使用大于或等于内存数量的交换空间。
作为一般规则,建议交换空间大小为内部存储器 (RAM) 的两倍。对于具有多个硬盘的系统,明智的做法是在每个磁盘上创建一个交换分区,以便它们可以用于并行读/写操作。当必须访问交换空间中的数据时,磁盘交换的速度越快,系统运行的速度就越快。在机械和固态磁盘之间进行选择时,最好将交换空间放在固态硬盘上以提高性能。
值得注意的是,交换文件可以作为交换空间的替代品,对于硬盘空间严重受限的系统来说这将会非常有用。
什么是 EFI 系统分区 (ESP)?
在使用由 UEFI 引导(而不是 BIOS)的操作系统上安装 Gentoo 时,创建 EFI 系统分区 (ESP) 是必要的。下面的说明包含正确处理此操作所需的关键点。 在 BIOS/Legacy 模式下启动时不需要 EFI 系统分区。
ESP 必须是 FAT 变体(有时在 Linux 系统上显示为 vfat)。官方 UEFI 规范 表示 UEFI 固件将识别 FAT12、16 或 32 文件系统,但建议使用 FAT32。分区后,相应地格式化 ESP:
root #mkfs.fat -F 32 /dev/sda1如果 ESP 没有使用 FAT 变体进行格式化,那么系统的 UEFI 固件将找不到引导加载程序(或 Linux 内核)并且很可能无法引导系统!
什么是BIOS引导分区?
BIOS 启动分区是一个非常小(1~2 MB)的分区,用于为 GRUB2 那样的引导程序存放超出已分配内存的额外数据。当且仅当硬盘被分配 GPT 分区表时该分区才需要存在,但系统固件将会通过 BIOS/MBR DOS 模式下的 GRUB2 启动。在 EFI/UEFI 启动模式下引导时不需要它,使用 MBR/传统 DOS 分区表时也不需要它。本手册将不会使用 BIOS 启动分区。
使用 GPT for UEFI 对磁盘进行分区
以下部分介绍如何为单个 GPT 磁盘设备创建符合 UEFI 规范和可发现分区规范 (DPS) 的示例分区布局。DPS 是作为 Linux 用户空间 API (UAPI) 组规范的一部分提供的规范,是推荐的,但完全是可选的。这些规范是使用 fdisk 实用程序实现的,该实用程序是 sys-apps/util-linux 软件包的一部分。
下表提供了一个可用于 Gentoo 试用安装的推荐默认分区表。根据个人偏好及系统的具体用途,可基于此追加其他分区。
| 设备路径 (sysfs) | 挂载点 | 文件系统 | DPS UUID (PARTUUID) | 描述 |
|---|---|---|---|---|
| /dev/sda1 | /efi | vfat | c12a7328-f81f-11d2-ba4b-00a0c93ec93b | EFI 系统分区(EFI system partition ESP) 详情。 |
| /dev/sda2 | N/A. 交换分区并不像设备文件那样挂载到文件系统。 | 0657fd6d-a4ab-43c4-84e5-0933c84b4f4f | 交换分区分区详情。 | |
| /dev/sda3 | / | xfs | 44479540-f297-41b2-9af7-d131d5f0458a | 根分区详情。 |
查看当前分区布局
fdisk 是一个受欢迎的强大的分区工具,因此我们大可直接用 fdisk 对磁盘进行操作(本例使用 /dev/sda):
root #fdisk /dev/sda使用 p 键来显示磁盘当前的分区配置。
Command (m for help):pDisk /dev/sda: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors Disk model: HGST HTS721010A9 Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: gpt Disk identifier: 3E56EE74-0571-462B-A992-9872E3855D75 Device Start End Sectors Size Type /dev/sda1 2048 2099199 2097152 1G EFI System /dev/sda2 2099200 10487807 8388608 4G Linux swap /dev/sda3 10487808 1953523711 1943035904 926.5G Linux root (x86-64)
这块特定的磁盘被配置为容纳 2 个 Linux 文件系统(每个都有一个相应的分区列为"Linux")以及一个交换分区(列为"Linux swap")。
创建一个新的磁盘标签/删除所有分区
按下 g 键将立即删除所有现有的磁盘分区并创建一个新的 GPT 磁盘标签:
Command (m for help):gCreated a new GPT disklabel (GUID: 3E56EE74-0571-462B-A992-9872E3855D75).
或者,要保留现有的 GPT 磁盘标签(参见上面 p 的输出),请考虑从磁盘中一一删除现有分区。输入 d 来删除一个分区。例如,要删除现有的 /dev/sda1:
Command (m for help):dPartition number (1-4): 1
这个分区已经计划被删除了,当您用p键打印分区清单时它将不会被显示了,但此时它还未被实际删除,直到改变被真正保存。这将允许用户在操作错误后中止——此时,输入q并按Enter可以立即防止分区被删除。
重复敲击 p来打印分区清单,然后敲击 d键和分区号码来删除它。最终,分区表将变得空空如也。
Command (m for help):pDisk /dev/sda: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors Disk model: HGST HTS721010A9 Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: gpt Disk identifier: 3E56EE74-0571-462B-A992-9872E3855D75
现在在内存中的分区表已经空了,我们是时候来创建分区了。
创建 EFI 系统分区 (ESP)
虽然可以使用较小的 ESP,但是不推荐这么做,尤其是考虑到可能与其他操作系统共享 ESP。
首先创建一个小的 EFI 系统分区,该分区也将挂载为 /efi。输入 n 创建一个新分区,然后输入 1 选择第一个分区。当提示输入第一个扇区时,确保它从 2048(引导加载程序可能需要)开始并输入 Enter。当提示输入最后一个扇区时,输入 +1G 创建一个大小为 1GiB 的分区:
Command (m for help):nPartition number (1-128, default 1): 1
First sector (2048-1953525134, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-1953525134, default 1953523711): +1G
Created a new partition 1 of type 'Linux filesystem' and of size 1 GiB.
Partition #1 contains a vfat signature.
Do you want to remove the signature? [Y]es/[N]o: Y
The signature will be removed by a write command.
将分区标记为一个 EFI 系统分区:
Command (m for help):tSelected partition 1 Partition type or alias (type L to list all): 1 Changed type of partition 'Linux filesystem' to 'EFI System'.
创建交换分区
接下来,要创建交换分区,请输入 n 创建一个新分区,然后输入 2 创建第二个分区 /dev/sda2。当提示输入第一个扇区时,输入 Enter。当提示输入最后一个扇区时,输入 +4G(或交换空间所需的任何其他大小)以创建大小为 4GiB 的分区。
Command (m for help):nPartition number (2-128, default 2):
First sector (2099200-1953525134, default 2099200):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2099200-1953525134, default 1953523711): +4G
Created a new partition 2 of type 'Linux filesystem' and of size 4 GiB.
完成后,输入t设置分区类型,2选择刚刚创建的分区,然后输入 19 设置分区类型为 "Linux Swap"。
Command (m for help):tPartition number (1,2, default 2): 2 Partition type or alias (type L to list all): 19 Changed type of partition 'Linux filesystem' to 'Linux swap'.
创建根分区
最后,要创建根分区,请输入 n 以创建新分区。然后输入 3 创建第三个分区,/dev/sda3。当提示输入第一个扇区时,按 Enter。当提示输入最后一个扇区时,按 Enter 以创建一个分区,该分区占用磁盘上的其余剩余空间。完成这些步骤后,输入 p 应该会显示一个类似于以下内容的分区表:
Command (m for help):nPartition number (3-128, default 3): 3
First sector (10487808-1953525134, default 10487808):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (10487808-1953525134, default 1953523711):
Created a new partition 3 of type 'Linux filesystem' and of size 926.5 GiB..
{{Note将根分区的类型设置为 "Linux root (x86-64)"并不是必须的,如果将其设置为 "Linux filesystem" 类型,系统将正常运行。只有在使用支持它的 bootloader (即 systemd-boot) 并且不需要 fstab 文件时,才需要这种文件系统类型。}}
创建根分区后,按 t 设置分区类型,按 3 选择刚刚创建的分区,然后输入 23 将分区类型设置为 "Linux Root (x86-64)"。
Command(m for help):tPartition number (1-3, default 3): 3
Partition type or alias (type L to list all): 23
Changed type of partition 'Linux filesystem' to 'Linux root (x86-64)'
完成这些步骤后,按 {{Key|p}} 应该会显示一个分区表,如下所示:
{{Cmd|prompt=Command (m for help): |p|output=<pre>
Disk /dev/sda: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: HGST HTS721010A9
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 3E56EE74-0571-462B-A992-9872E3855D75
Device Start End Sectors Size Type
/dev/sda1 2048 2099199 2097152 1G EFI System
/dev/sda2 2099200 10487807 8388608 4G Linux swap
/dev/sda3 10487808 1953523711 1943035904 926.5G Linux root (x86-64)
Filesystem/RAID signature on partition 1 will be wiped.
保存分区布局
要保存分区布局并退出 fdisk,请敲击 w。
Command (m for help):wThe partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.
当分区创建完成后,就该在其上部署文件系统了。
使用 MBR 对磁盘进行分区以用于 BIOS/legacy 启动
下表为简单的 MBR DOS/传统 BIOS 引导安装提供了推荐的分区布局。可以根据个人喜好或系统设计目标添加额外的分区。
| 设备路径 (sysfs) | 挂载点 | 文件系统 | DPS UUID (PARTUUID) | 描述 |
|---|---|---|---|---|
| /dev/sda1 | /boot | ext4 | N/A | MBR DOS / 传统 BIOS 引导分区详情。 |
| /dev/sda2 | N/A. 交换分区并不像设备文件那样挂载到文件系统。 | 0657fd6d-a4ab-43c4-84e5-0933c84b4f4f | 交换分区详情。 | |
| /dev/sda3 | / | xfs | 44479540-f297-41b2-9af7-d131d5f0458a | 根分区详情。 |
根据个人喜好更改分区布局。
查看当前分区布局
针对磁盘启动 fdisk(在我们的示例中,我们使用 /dev/sda):
root #fdisk /dev/sda输入p显示磁盘的当前分区配置:
Command (m for help):pDisk /dev/sda: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors Disk model: HGST HTS721010A9 Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: dos Disk identifier: 0xf163b576 Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 2099199 2097152 1G 83 Linux /dev/sda2 2099200 10487807 8388608 4G 82 Linux swap / Solaris /dev/sda3 10487808 1953525167 1943037360 926.5G 83 Linux
直到现在,这个特定的磁盘被配置为使用 GPT 表容纳两个 Linux 文件系统(每个都有一个相应的分区列为 "Linux")以及一个交换分区(列为 "Linux swap")。
创建一个新的磁盘标签/删除所有分区
按下 o 将立刻清空硬盘内现有的全部分区,并在硬盘上创建一个新的 MBR 分区表(也被称为 DOS 分区表):
Command (m for help):oCreated a new DOS disklabel with disk identifier 0xf163b576. The device contains 'gpt' signature and it will be removed by a write command. See fdisk(8) man page and --wipe option for more details.
或者,要保留现有的 DOS 磁盘标签(参见上面 p 的输出),或者考虑从磁盘中一一删除现有分区。输入 d 删除分区。例如,要删除现有的 /dev/sda1:
Command (m for help):dPartition number (1-4): 1
该分区现已计划删除。打印分区列表时将不再显示 (p,但在保存更改之前它不会被删除。如果发生错误,用户可以中止操作 —— 在这种情况下, 立即输入 q 并按 Enter 不会删除分区。
重复输入 p 打印出一个分区列表,然后输入 d 和分区号来删除它。最终,分区表将为空:
Command (m for help):pDisk /dev/sda: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors Disk model: HGST HTS721010A9 Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: dos Disk identifier: 0xf163b576
现在这块硬盘已准备好创建新的分区。
创建引导分区
首先,创建一个将挂载到 /boot 的小分区。按下 n 创建一个新分区,然后输入 p 作为主分区,输入 1 选择第一个主分区。当提示输入第一个扇区时,确保它从 2048(引导加载程序可能需要)开始并按 Enter。当提示输入最后一个扇区时,输入 +1G 创建一个大小为 1 GB 的分区:
Command (m for help):nPartition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-1953525167, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-1953525167, default 1953525167): +1G
Created a new partition 1 of type 'Linux' and of size 1 GiB.
先后按下 a 与 Enter 以将分区标记为启动分区:
Command (m for help):aSelected partition 1 The bootable flag on partition 1 is enabled now.
注意:如果磁盘上有多个分区可用,则必须选择要标记为可启动的分区。
创建 swap 分区
接下来,要创建交换分区,输入 n 创建一个新分区,然后输入 p,然后输入 2 创建第二个主分区,/dev/sda2。当提示输入第一个扇区时,按 Enter。当提示输入最后一个扇区时,输入 +4G(或交换空间所需的任何其他大小)以创建大小为 4GB 的分区。
Command (m for help):nPartition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (2099200-1953525167, default 2099200):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2099200-1953525167, default 1953525167): +4G
Created a new partition 2 of type 'Linux' and of size 4 GiB.
完成后,输入t设置分区类型,输入2选择刚刚创建的分区,然后输入 82 设置分区类型为 "Linux Swap"。
Command (m for help):tPartition number (1,2, default 2): 2 Hex code (type L to list all codes): 82 Changed type of partition 'Linux' to 'Linux swap / Solaris'.
创建根分区
最后,要创建根分区,请输入 n 以创建新分区。然后输入 p 和 3 以创建第三个主分区 /dev/sda3。当提示输入第一个扇区时,按 Enter。当提示输入最后一个扇区时,按 Enter 以创建一个分区,该分区占用磁盘上的剩余空间。
Command (m for help):nPartition type
p primary (2 primary, 0 extended, 2 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (3,4, default 3): 3
First sector (10487808-1953525167, default 10487808):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (10487808-1953525167, default 1953525167):
Created a new partition 3 of type 'Linux' and of size 926.5 GiB.
完成这些步骤后,按 p 应该会显示一个类似下文的分区表:
Command (m for help):pDisk /dev/sda: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors Disk model: HGST HTS721010A9 Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: dos Disk identifier: 0xf163b576 Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 2099199 2097152 1G 83 Linux /dev/sda2 2099200 10487807 8388608 4G 82 Linux swap / Solaris /dev/sda3 10487808 1953525167 1943037360 926.5G 83 Linux
保存分区布局
要保存分区布局并退出 fdisk,输入 w。
Command (m for help):wThe partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.
现在是时候将文件系统应用在分区上了。
创建文件系统
在使用 SSD 或者 NVMe 驱动,请检查是否需要升级固件。特别是有些英特尔的 SSD(600p 和 6000p)需要升级固件来减少XFS I/O 使用模式导致的可能的数据损坏。问题位于固件层面而非 XFS 文件系统造成的。smartctl 组件可以检查型号和固件版本。
介绍
现在分区已经创建,该在上面设置文件系统了。下一章节中描述了 Linux 所支持的众多文件系统。知道使用哪一个文件系统的读者可以继续阅读为分区应用文件系统。剩下的人应该学习可用的文件系统......
文件系统
Linux 支持数十种文件系统,尽管其中许多只是为了特定目的而部署。在 x86 架构上只能找到某些稳定的文件系统 - 建议在为重要分区选择更具实验性的文件系统之前查阅文件系统及其支持状态。XFS 是推荐的全平台通用的文件系统。下面是一个不完全的文件系统列表:
- XFS
- 具有元数据日志的文件系统,具有强大的功能集并针对可扩展性进行了优化。 XFS 不断升级来支持现代化功能。 XFS 唯一的缺点是还不能缩减分区,不过这个问题正在解决中。XFS 特别支持反向链接和写入时复制(CoW),因为用户需要完成大量编译工作,所以对 Gentoo 系统很有用。推荐使用 XFS 这个现代化的通用全平台文件系统。XFS 要求分区至少300MB。
- ext4
- Ext4 是一个可靠的、通用的全平台文件系统,但是它缺乏诸如引用链接之类的现代化功能。
- VFAT
- 也称为 FAT32,Linux 支持但不支持标准的 UNIX 权限设置。它主要用于与其他操作系统(Microsoft Windows 或 Apple 的 macOS)的互操作和交换,但也是某些系统引导加载程序固件(如 UEFI)的必需品。UEFI 系统的用户需要使用 VFAT 格式化的 EFI 系统分区才能启动。
- btrfs
- 下一代文件系统,提供许多高级功能,例如快照、通过校验和进行自我修复、透明压缩、子卷和集成 RAID。不能保证 5.4.y 之前的内核在生产中与 btrfs 一起使用是安全的,因为对严重问题的修复仅存在于 LTS 内核分支的最新版本中。文件系统损坏问题在较旧的内核分支上很常见,比如说启用压缩后,较旧的内核(比 5.4.y 小)更可能发生损坏。 RAID 5/6 和配额组在所有版本的 btrfs 上都不安全。
- F2FS
- Flash-Friendly File System 最初是由三星为与 NAND 闪存一起使用而创建的。截至 2016 年第二季度,这个文件系统仍然被认为是不成熟的,但在将 Gentoo 安装到 microSD 卡、USB 驱动器或其他基于闪存的存储设备上时,它是一个不错的选择。
- NTFS
- 这个"新技术"文件系统是自 Windows NT 3.1 以来 Microsoft Windows 的旗舰文件系统。与 vfat 类似,它不存储 BSD 或 Linux 正常运行所需的 UNIX 权限设置或扩展属性,大多数情况下,不应将其用作为根文件系统。它应该仅用于与Microsoft Windows 系统的互操作和数据交换(注意强调仅)。
- ZFS 重要: ZFS 池仅能通过 admincd 或 LiveGUI ISO 创建。参考 ZFS/rootfs 以获取更多信息。
- Matthew Ahrens 与 Jeff Bonwick 打造的下一代文件系统。它基于以下几个核心理念而被建构:简单的存储管理,文件系统自行处置的冗余备份,在应用操作前的自动灾备模拟(重要),以及数据完整性(至关重要)。
- bcachefs 重要: bcachefs 当前仍被内核标记为实验性内容,因此请务必定期备份关键数据到非 bcachefs 媒体内。
- bcachefs 是一个基于 bcache 建立的 B 树文件系统,所有功能均基于 B 树建立。它拥有写入时复制(CoW)、压缩与加密等功能,且与 Brtfs 和 ZFS 类似。其中一个值得注意的功能为原生分层存储,允许在一个硬盘池内将一个或多个高速读写硬盘(如基于闪存的 SSD 或 NVMe 硬盘)设置为一个或多个低速读写硬盘的缓存盘,并提供基于活动情况的针对冷数据和活跃数据的透明管理。
更多有关于文件系统的信息可以在社区维护的 文件系统文章 中找到。
为分区应用文件系统
安装结束后,请确保在重新启动之前,为之后在手册中选择的文件系统 emerge 相应的用户空间组件软件包。在接近安装尾声时您将看到另一个提醒。
在一个分区或卷上创建一个文件系统,这里有用于每一个可能的分区的工具。 单击下表中的文件系统名称,了解每个文件系统的更多信息:
| 文件系统 | 创建命令 | 是否包含在live环境中? | 软件包 |
|---|---|---|---|
| XFS | mkfs.xfs | 是 | sys-fs/xfsprogs |
| ext4 | mkfs.ext4 | 是 | sys-fs/e2fsprogs |
| VFAT (FAT32,......) | mkfs.fat32 | 是 | sys-fs/dosfstools |
| brtfs | mkfs.brtfs | 是 | sys-fs/brtfs-progs |
| F2FS | mkfs.f2fs | 是 | sys-fs/f2fs-tools |
| NTFS | mkfs.ntfs | 是 | sys-fs/ntfs3g |
| ZFS | zpool create ... | 否 | sys-fs/zfs |
| bcachefs | mkfs.bcachefs | 是(截至 2025年04月12日 时仅限 AMD64) | sys-fs/bcachefs-tools |
手册建议将新建分区作为安装过程的一部分,但值得在注意的是任何mkfs命令都会擦除分区上之前含有的任何数据。必要时,在创建文件系统之前应确保所有数据都被正确备份。
比如,在示例分区结构中,使用 xfs 的根分区(/dev/sda3),会使用下面的命令:
root #mkfs.xfs /dev/sda3传统 BIOS 启动分区文件系统
通过带有 MBR/DOS 磁盘标签的传统 BIOS 启动的系统可使用引导加载程序支持的任何文件系统格式。
例如,XFS 格式:
root #mkfs.xfs /dev/sda1小型 ext4 分区
在较小的分区(少于8 GiB)上使用 ext4 时,则创建文件系统时应带适当的选项以保留足够的 inode。这可以使用-T small 选项:
root #mkfs.ext4 -T small /dev/<device>这样一般将是对于给定的文件系统inode数量的四倍,因为它的"字节每inode"从16kB每个减少到4kB每个。
激活 swap 分区
mkswap是用来初始化swap分区的命令:
root #mkswap /dev/sda2之前开始但并未完成的安装可以从手册的这个位置开始继续进行。使用此链接作为固定链接:从这里继续未完成的安装。
要激活swap分区,使用swapon:
root #swapon /dev/sda2由于交换分区是在实时环境中新创建的,所以才需要这一 "激活 "步骤。系统重启后,只要交换分区在 fstab 或其他挂载机制中定义正确,交换空间就会自动激活。
挂载 root 分区
一些 live 环境可能缺少推荐的 Gentoo 根分区挂载点(/mnt/gentoo),或在分区部分创建的其他分区的挂载点:
root #mkdir --parents /mnt/gentoo使用 mkdir 命令继续为之前步骤中创建的其他(自定义)分区创建必要的挂载点。
创建挂载点后,现在可以通过mount命令使得分区可以访问。
挂载根分区:
root #mount /dev/sda3 /mnt/gentoo根据需要使用 mount 命令继续挂载其他(自定义)分区。
如果/tmp/需要放在一个独立分区,确保在挂载后变更它的权限:
root #chmod 1777 /mnt/gentoo/tmp在后面的介绍中,将挂载proc文件系统(一个内核的虚拟接口)和其它内核伪文件系统。不过首先必须提取 Gentoo stage 文件。