如何在 Linux 上编写 fstab 文件

为您的 Linux 计算机添加新的硬盘驱动器或固态驱动器?您需要编辑您的 fstab
文件。很多人觉得这个想法很可怕。是的,做对很重要,但是有了正确的知识,这真的不难。我们将引导您完成编辑 fstab
文件的过程,以将您的新驱动器集成到您的文件系统中。
fstab,文件系统表
尽管向 Linux 计算机添加新硬盘驱动器并不太复杂,但第一次尝试时可能会有点困惑。您连接硬件,打开计算机电源,然后登录操作系统。但是您无法在任何地方看到您的新驱动器。为什么不显示?您如何让 Linux“看到”驱动器以便您可以开始配置它?
事实上,Linux 已经看到了你的硬件,但它并没有轻易宣布它。或者甚至提示您它已找到您的新硬件。您必须询问 Linux 以获得您需要放入 fstab
文件中的信息。
以下是如何设置您的新硬盘,以便 Linux 和您可以看到并使用它。该过程分为两个部分。第一部分是进行一些侦察以识别硬盘驱动器并收集有关它的一些信息。第二部分是编辑 fstab
文件,使用我们在侦察阶段收集的信息。
找到你的新驱动器
我们正在向该系统添加两个新驱动器。一个是 32 GB 机械硬盘 (HD),另一个是 16 GB 固态硬盘 (SSD)。
我们需要知道 Linux 可以看到它们,以及 Linux 正在为它们使用什么块设备。在 Linux 和类 Unix 操作系统中,块设备是一种特殊文件,充当设备的接口,可以从中读取和写入数据(除非它是只读的)。块设备通常代表某种大容量存储单元(例如,硬盘或 CD-ROM 上的分区。它们在 /dev
目录中创建。
我们可以使用 lsblk
命令列出连接到您的 Linux 计算机的块设备。
lsblk

lsblk
的输出在列中。

这些列是:
- 名称:这是设备名称。以“sd”开头并后跟一个字母的设备名称代表 SCSI 硬盘。该字母标识单个硬盘,“a”在第一个,“b”。是第二个等等。如果附加了数字,则表示一个分区。例如,“sdb2”将是第二个 SCSI 硬盘驱动器上的分区 2。
- Maj:Min:此列包含设备的主要和次要编号。主编号表示设备的类型(或者更准确地说,用于与该设备通信的驱动程序的类型)。次要编号是该类型设备的数量。
- Rm:此列显示设备是否可移动。请注意,设备
sr0
的值为 1,表示它是可移动的。这是一个 CD-ROM 驱动器。 - 大小:这是设备中可以存储的数据量。
- Ro:此列将显示 1 表示只读设备,0 表示读写设备。
loop
设备都是只读的。 - 类型:标识设备的类型。 “disk”条目表示磁盘驱动器,“part”条目表示分区,“rom”表示只读存储器 (CD-ROM)。
- 挂载点:这显示了文件系统中该设备的挂载点。如果这是空白的,则设备未安装。
在上面的屏幕截图中,您可以看到 loop
设备的主设备号全部为 7(表示环回或循环设备),而次设备号每次都简单地递增 1。循环设备与 squashfs
文件系统一起使用。每次使用 snappy 包管理系统安装应用程序时,都会创建一个 squashfs
文件系统。
SCSI 硬盘驱动器的名称如 sda
、sdb
和 sdc
,主编号均为 8(SCSI 硬盘驱动器)。次要号码以 16 为一组。第一个驱动器 sda
的次编号从 0 到 15。0 表示物理驱动器,次编号 1 表示该驱动器上的第一个分区。对于第二个驱动器 sdb
,次要编号从 16 到 31。16 代表物理驱动器,17 代表该驱动器上的第一个分区。接下来的 16 个数字,32 到 47,用于 sdc
的次要数字,依此类推。
其他常见的主要数字是 3(对于 IDE 硬盘)和 11(对于 CD-ROM)。
实际上,SDCSI CD-ROM 驱动器的 /dev/sr0
样式已被弃用。批准的格式是/dev/scd0
。尽管如此,/dev/sr0
格式仍在用于研究本文的所有机器上使用。
内核文档包含一长串主要和次要编号可以采用的所有值的列表。这是一个令人惊讶的长列表。
为了使 lsblk
的输出变得杂乱无章,我们可以使用 grep
来仅选择我们感兴趣的项目。我们知道我们没有添加循环设备,所以让我们选择所有的 SCSI 硬盘驱动器。我们知道它们的名称中会有“sd”。
lsblk | grep sd

此命令将导致 grep
仅打印在 .在我们的测试机上,我们看到:

所以,我们有三个 SCSI 驱动器。第一个,/dev/sda
,挂载在文件系统的根目录,/
。另外两个根本没有安装,这对于全新的驱动器来说是意料之中的。我们可以看到驱动器/dev/sdb
的大小是32GB,这意味着它是我们传统的机械驱动器。驱动器 /dev/sdc
大小为 16 GB,这是我们的 SSD 驱动器。
实际上,由于这是一台虚拟计算机,因此这些也是虚拟磁盘。所以 SSD 就像 SCSI 机械驱动器一样出现。在我的常规桌面上,我的 NVMe SSD 显示为 /dev/nvme0n1
,它的第一个分区是 /dev/nvme0n1p1
。它的主要编号是 259。这些差异不会改变我们在 fstab
文件中要做的事情,但请注意,如果您有 SSD,它不会显示为物理驱动器。
此外,如果它们是全新的,您的驱动器上可能没有分区。如果需要,您可以使用 fdisk
创建分区。
识别旋转和非旋转驱动器
如果我们将 -o
(输出)选项与 lsblk
一起使用,并将 ROTA
(旋转)列添加到显示中,lsblk
将使用 1 表示旋转存储设备(机械驱动器),使用 0 表示非旋转存储设备(固态驱动器)。
lsblk -o +ROTA | grep sd

我们在显示的右侧多了一列,即 ROTA
(旋转)列。如您所见,“SSD”的设备和分区为 0。这是有道理的,因为 SSD 是一种非旋转存储设备。

挂载文件系统
在我们开始考虑 fstab
文件之前,让我们检查一下我们是否可以手动安装驱动器。这样,如果我们在使用 fstab
文件时出现问题,我们就会知道问题一定出在我们的语法上,而不是驱动器本身的问题。
我们将在 /mnt
目录中创建一些临时挂载点。您需要使用 sudo
,系统会提示您输入密码。
sudo mkdir /mnt/scsi

sudo mkdir /mnt/ssd

现在让我们将 SCSI 驱动器挂载到新的挂载点上。我们将以最简单的形式使用 mount
命令。我们将告诉它我们要挂载的分区的名称,以及我们希望它挂载的挂载点。 mount
会将文件系统挂载到该分区上我们指定的挂载点。
我们指定的是保存文件系统的分区,而不是驱动器,因此请务必包含分区的数字,在本例中为“1”。
sudo mount /dev/sdb1 /mnt/scsi

如果一切顺利,mount
将不会有任何响应。您将静默返回到命令提示符。
安装 SSD 非常简单。我们告诉 mount
在哪个设备上挂载哪个分区,以及挂载它的挂载点。
sudo mount /dev/sdc1 /mnt/ssd

再次强调,沉默是金。
检查坐骑
为了验证挂载是否已经发生,我们将再次使用 lsblk
。我们将通过 grep
传输其输出并选择“sda1”、“sdb2”和“sdc1”条目。
lsblk -o +ROTA | grep sd[a-c]1

mount
向我们展示了三个挂载的分区。也就是我们刚刚挂载的两个和原来挂载在/上的分区。

分区 /dev/sdb1
挂载在 /mnt/scsi
上,并且在旋转存储设备上。分区 /dev/sdc1
安装在 /mnt/ssd
上,并且位于非旋转存储设备上。一切似乎都很好。
现在我们需要配置 fstab
文件,以便每次启动计算机时都挂载这些设备。
fstab 文件
fstab
文件包含在您的计算机重新启动时安装的每个文件系统的条目。每个条目由六个字段组成。这些字段是:
- 文件系统:顾名思义,不是分区上的文件系统类型(类型字段的用途)。这是应该安装的分区的标识符。
- 挂载点:文件系统中您希望挂载分区的位置。
- 类型:分区上的文件系统类型。
- 选项:每个文件系统都可以指定用于打开或关闭功能的选项。
- 转储:指的是一种几乎已过时的文件系统备份方法,其中整个文件系统被“转储”到磁带。
- 通过:这是“通过”标志。它告诉 Linux 应该使用
fsck
检查哪些分区的错误,以及检查的顺序。你的主引导和操作系统分区应该是 1,其余可以设置为 2。如果标志设置为零,则表示“根本不检查”。如果您的文件系统不是日志文件系统(例如 ext2 或 FAT16/32),最好将其设置为 0 以将其关闭。
这些字段必须按此顺序指定,并且它们之间必须有空格或制表符。查找这些字段的值可能会让人望而生畏,尤其是“选项”字段的值。 “选项”字段 options 必须位于逗号分隔的列表中,它们之间没有空格。
每个文件系统的 man
页面将列出可以使用的选项。 ext4
有大约 40 个选项。以下是一些更常见的选项:
- 自动:文件系统将在启动时自动安装。
- Noauto:仅当您输入
mount -a
命令时才挂载文件系统。 - Exec:允许在此文件系统上执行二进制文件。
- Noexec:不允许在此文件系统上执行二进制文件。
- Ro: 文件系统应该挂载为只读。
- Rw:文件系统应该挂载为可读写。
- Sync:文件写入应该立即进行,而不是缓冲。最好为软盘保留,如果有人仍在使用它们的话。导致性能下降。
- 异步:文件写入应该被缓冲和优化。
- 用户:允许任何用户挂载文件系统。
- Nouser:root 用户是唯一可以挂载此文件系统的用户。
- 默认值:这是指定一组常用设置的简写方式:rw、suid、dev、exec、auto、nouser 和 async)。
- Suid:允许操作
suid
和sgid
位。suid
位用于允许普通用户以 root 身份执行文件,而无需授予用户完全 root 权限。在目录上设置sgid
位时,在该目录中创建的文件和目录的组所有权设置为目录的组所有权,而不是创建它们的用户的组。 - Nosuid:不允许使用
suid
和sgid
位。 - Noatime: – 不更新文件系统上的文件访问时间。这有助于提高旧硬件的性能。
- Nodiratime:不更新文件系统上的目录访问时间。
- Relatime:更新相对于文件修改时间的文件访问时间。
“默认”选项是一个很好的开场白。如果需要进行一些微调,您可以添加或删除更多选项。如果有一种简洁的方法来获取您需要的设置,请按照您需要的顺序将它们输入到 fstab
文件中。
输入 mtab
文件。
mtab 文件
mtab
文件是当前安装的文件系统的列表。这与 fstab
文件形成对比,后者列出了应该在引导时安装的文件系统。 mtab
文件包括手动安装的文件系统。我们已经安装了新驱动器,因此它们应该出现在 mtab
文件中。
我们可以使用cat
查看mtab
文件的内容。我们将通过 grep
管道输出并仅查看 /dev/sdb1
和 /dev/sdc1
来限制输出。
cat /etc/mtab | grep sd[b-c]1

输出显示了这两个分区的 mtab
条目。

我们可以提取这些值并将它们直接放入 fstab
文件中,确保每个字段之间有空格或制表符。就是这样。当我们重新启动时,驱动器将被安装。
对此有两个警告。一是挂载点。我们创建临时挂载点只是为了证明我们可以将新分区挂载到新驱动器上。我们需要输入真正的挂载点而不是我们的临时挂载点——如果它们不同的话。
第二个警告是,如果我们使用 mtab
文件中的设置,我们将使用块设备文件作为每个分区的标识符。这会起作用,但是如果将新的大容量存储硬件添加到计算机,值 /dev/sda
和 /dev/sdb
等可能会发生变化。这意味着 fstab
文件中的设置不正确。
每个分区都有一个通用唯一标识符(UUID),我们可以使用它来标识分区。这永远不会改变。如果我们使用 UUID 来识别 fstab
文件中的分区,设置将始终保持准确和真实。
如果您将新分区用作廉价磁盘冗余阵列 (RAID) 系统的一部分,请查看该系统的文档。它可能指定您必须使用块设备标识符而不是 UUID。
查找分区的 UUID
要查找分区的 UUID,我们可以使用 blkid
来打印块设备的属性。我们将输出限制在我们新驱动器上的两个新分区:
blkid | grep sd[b-c]1

输出包括每个分区的 UUID。

PARTUUID 是 UUID 的一种形式,可与 GUID 分区表 (GPT) 分区方法一起使用(如果您不使用主引导记录 (MBR) 分区方法)。
编辑 fstab 文件
在编辑器中打开 fstab
文件。我们使用的是 gedit
,这是一种在大多数 Linux 发行版中都有的易于使用的编辑器。
sudo gedit /etc/fstab

编辑器出现,其中加载了您的 fstab
文件。

此 fstab
文件中已有两个条目。它们是现有硬盘驱动器上的分区/dev/sda1
,以及交换文件系统。小心不要更改这些条目。
我们需要向 fstab
文件添加两个新条目。一个用于 SCSI 驱动器上的分区,一个用于 SSD 驱动器上的分区。我们将首先添加 SCSI 分区。请注意,以散列 #
开头的行是注释。
- 在“文件系统”字段中,我们将使用
blkid
之前为我们检索到的 UUID。以“UUID=”开始该行,然后粘贴 UUID。按空格键或 Tab 键。 - 对于“挂载点”字段,我们将使用之前创建的挂载点,
/mnt/scsi
。您将从系统中使用适当的安装点。按空格键或 Tab 键。 - 对于“类型”,我们将输入
ext4
,这是我们分区上的文件系统类型。按空格键或 Tab 键。 - 在“选项”字段中,我们将使用通过 cat
/etc/mtab
检索到的选项。这些是“rw,relatime”。按空格键或 Tab 键。 - “转储”字段设置为零。按空格键或 Tab 键。
- “通过”字段设置为零。
现在我们将在单独的一行中添加 SSD 驱动器上的 fstab
入口分区。
- 在“文件系统”字段中,我们将输入
blkid
为 SSD 驱动器上的分区检索的 UUID。以“UUID=”开始该行,然后粘贴 UUID。按空格键或 Tab 键。 - 对于“挂载点”字段,我们将使用之前创建的挂载点,
/mnt/ssd
。按空格键或 Tab 键。 - 对于“类型”,我们将输入
ext4
,这是我们分区上的文件系统类型。按空格键或 Tab 键。 - 在“选项”字段中——只是为了使我们示例中的两个新条目不同——我们将使用“默认”选项。按空格键或 Tab 键。
- “转储”字段设置为零。按空格键或 Tab 键。
- “通过”字段设置为零。

保存文件并关闭编辑器。
在不重启的情况下测试 fstab
我们可以卸载新驱动器,然后强制刷新 fstab
文件。成功安装我们的新分区将验证我们输入的设置和参数在语法上是否正确。这意味着我们的 fstab
文件应该在重启或开机序列期间得到正确处理。
要卸载 SCSI 驱动器,请使用此命令。请注意,“umount”中只有一个“n”:
sudo umount /dev/sdb1

要卸载 SSD 驱动器,请使用以下命令:
sudo umount /dev/sdc1

现在我们将使用 lsblk
检查这些块设备是否已挂载。
lsblk | grep sd

我们看到块设备存在于计算机中,但没有安装在任何地方。

我们可以使用带有 -a
(全部)选项的 mount
命令重新挂载 fstab
中的所有文件系统。
sudo mount -a

我们可以再次使用 lsblk
检查我们的新分区是否已经挂载:
lsblk | grep sd

一切都安装在它应该在的地方。我们现在要做的就是更改挂载点的所有权,否则 root
将是唯一可以访问新存储设备的人。
我们可以使用 chown
轻松做到这一点。这是 SCSI 安装点的命令:
sudo chown dave:users /mnt/scsi

这是 SSD 安装点的命令:
sudo chown dave:users /mnt/ssd

我们现在可以放心地重新启动我们的计算机,因为我们知道我们添加的分区将为我们安装,并且我们可以访问它们。
毕竟没那么可怕
所有艰苦的工作都在侦察阶段——这也不难。收集到所需信息后,编辑 fstab
文件就轻而易举了。准备就是一切。
Linux Commands | ||
Files | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc | |
Processes | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap | |
Networking | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld |
RELATED: Best Linux Laptops for Developers and Enthusiasts