10.2. 创建 /etc/fstab 文件

一些程序使用 /etc/fstab 文件,以确定哪些文件系统是默认挂载的,和它们应该按什么顺序挂载,以及哪些文件系统在挂载前必须被检查 (确定是否有完整性错误)。参考以下命令,创建一个新的文件系统表:

cat > /etc/fstab << "EOF"
# Begin /etc/fstab

# 文件系统     挂载点       类型     选项                转储  检查
#                                                              顺序

/dev/<xxx>     /            <fff>    defaults            1     1
/dev/<yyy>     swap         swap     pri=1               0     0

# End /etc/fstab
EOF

<xxx><yyy><fff> 替换为适用于您的系统的值,例如 sda2sda5ext4。参阅 fstab(5) 了解该文件中 6 个域的详细信息。

在挂载来源于 MS-DOS 或 Windows 的文件系统 (如 vfat、ntfs、smbfs、cifs、iso9660、udf) 时,需要一个特殊的挂载选项 —— utf8,才能正常解析文件名中的非 ASCII 字符。对于非 UTF-8 locale,选项 iocharset 的值应该和您的 locale 字符集设定一致,但改写成内核可以识别的写法。该选项能够正常工作的前提是,将相关的字符集定义 (在内核配置选项的 File Systems -> Native Language Support 子菜单中) 编译到内核中,或构建为内核模块。然而,如果使用了 UTF-8 locale,对应的 iocharset=utf8 会导致文件系统变得大小写敏感。为了避免这个问题,在使用 UTF-8 locale 时,需要用特殊选项 utf8 代替 iocharset=utf8。另外,vfat 和 smbfs 文件系统还需要codepage选项,它应该被设定为您的语言在 MS-DOS 下的代码页编号。例如,为了挂载一个 USB 闪存盘,一个 ru_RU.KOI8-R 用户应该在 /etc/fstab 中对应于闪存盘的行添加下列挂载选项:

noauto,user,quiet,showexec,codepage=866,iocharset=koi8r

相应的,ru_RU.UTF-8 用户应该使用下列选项:

noauto,user,quiet,showexec,codepage=866,utf8

注意此时使用的 iocharset 默认为 iso8859-1 (这保证文件系统是大小写不敏感的),而 utf8 选项告诉内核使用 UTF-8 编码转换文件名,这样它们就能在 UTF-8 locale 中被正确解析。

在为 UEFI 安装 GRUB 时,必须将 ESP 格式化为一种 FAT 文件系统 (EXFAT 不属于 FAT 文件系统)。在 Linux 内核中,VFAT 驱动处理所有 FAT 文件系统,因此无论使用何种 FAT 文件系统,在 fstab 中都应该写入 vfat。挂载 ESP 的条目看上去应该类似下面给出的例子:

cat >> /etc/fstab << "EOF"
/dev/<zzz>  /boot/efi  vfat  rw,relatime,codepage=437,iocharset=iso8859-1   0   2
EOF

这里选用 iso8859-1 IO 字符集,是由于我们会在 第 10.3 节 “Linux-6.19.12” 的 UEFI 内核配置中启用它。严格来说,正如前文讨论的那样,IO 字符集需要和使用的 locale 一致。但 ESP 中所有文件名都只包含 7 位 ASCII 字符,因此只要所用的 locale 处理 7 位 ASCII 字符的方式和 ISO-8859-1 一致,就不会出现问题。例如,UTF-8 就满足这一条件。

[注意]

注意

EFI 文件系统只需要在安装 GRUB 时挂载。系统只会在加载内核前使用它。因此,也可以不将它加入 fstab 文件,而是在 第 10.4 节 “使用 GRUB 设定引导过程” 中运行 grub-install 前手动挂载它。

也可以在内核配置中,为一些文件系统指定默认 codepage 和 iocharset 选项值。相关的配置参数名为Default NLS Option (CONFIG_NLS_DEFAULT),Default Remote NLS Option (CONFIG_SMB_NLS_DEFAULT),Default codepage for FAT (CONFIG_FAT_DEFAULT_CODEPAGE),以及 Default iocharset for FAT (CONFIG_FAT_DEFAULT_IOCHARSET)。无法在编译内核时为 ntfs 文件系统指定这些默认值。