如何在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"设备都是只读的。
类型:标识设备的类型。磁盘条目表示磁盘驱动器,部件条目代表分区,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(对于aIDE硬盘驱动器)和11(对于CD-ROMS)。
实际上,不建议使用SDCSI CD-ROM驱动器的/ dev / sr0
样式。允许的格式为/ dev / scd0
。尽管如此,/ dev / sr0格式仍在用于研究本文的所有机器上使用。
内核文档包含一长串,列出了主要和次要数字可以采用的所有值。这是一个令人惊讶的长名单。
为了使" lsblk"的输出杂乱无章,我们可以使用" grep"来选择我们感兴趣的项目。我们知道我们还没有添加环路设备,因此让我们选择所有SCSI硬盘驱动器。我们知道这些将在其名称中包含sd。
lsblk | grep sd
这个命令将使grep
只打印sd中的行。在我们的测试机上,我们看到:
因此,我们有三个SCSI驱动器。第一个文件" / dev / sda"安装在文件系统的根目录" /"中。其余两个根本没有安装,这是全新驱动器所期望的。我们可以看到驱动器" / dev / sdb"的大小为32 GB,这意味着它是我们的传统机械驱动器。驱动器/ dev / sdc
的大小为16 GB,这是我们的SSD驱动器。
实际上,由于这是虚拟计算机,因此它们也是虚拟磁盘。因此,SSD就像SCSI机械驱动器一样出现。在我的常规桌面上,我的NVMe SSD显示为/ dev / nvme0n1
,并且第一个分区是/ dev / nvme0n1p1
。它的主要编号是259. 这些差异不会改变我们在fstab文件中要做的事情,但是请注意,如果我们有SSD,它就不会显示为物理驱动器。
另外,如果驱动器是全新的,则驱动器上可能没有分区。如果需要,可以使用fdisk
创建分区。
识别旋转和非旋转驱动器
如果我们在lsblk
中使用-o
(输出)选项并在显示中添加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文件包含重新启动计算机时挂载的每个文件系统的条目。每个条目由六个字段组成,这些字段是:
文件系统:顾名思义,不是分区上文件系统的类型(即typefield的用途)。这是应该挂载的分区的标识符。
挂载点:文件系统中我们希望挂载分区的位置。
类型:分区上文件系统的类型。
选项:每个文件系统都可以指定用于打开或者关闭功能的选项。
转储:对备份文件系统的一种过时的手段的引用,其中整个文件系统都已转储到磁带上。
通过:这是通过标志。它告诉Linux应该使用
fsck
检查哪个分区是否有错误,以及检查顺序。主引导和操作系统分区应该为1,其余分区可以设置为2. 如果该标志设置为零,则表示根本不进行检查。如果文件系统不是日记文件系统(例如ext2或者FAT16 / 32),则最好将其设置为0以将其关闭。
必须按此顺序指定这些字段,并且它们之间必须有空格或者制表符。寻找这些字段的值可能会令人生畏,尤其是选项字段的值。 options字段选项必须位于逗号分隔的列表中,并且之间不能有空格。
每个文件系统的" man"页面将列出可以使用的选项。 ext4大约有40个选项。以下是一些较常见的选项:
自动:文件系统将在引导时自动安装。
Noauto:仅在输入
mount -a
命令时挂载文件系统。执行:在此文件系统上允许执行二进制文件。
Noexec:在此文件系统上不允许执行二进制文件。
Ro:文件系统应安装为只读。
Rw:文件系统应以读写方式安装。
同步:应立即进行文件写入,而不要对其进行缓冲。最好保留给软盘(如果有人仍在使用它们)。导致性能下降。
异步:应缓冲和优化文件写入。
用户:允许任何用户挂载文件系统。
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
文件中。
我们可以使用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。按空格或者制表符。对于挂载点字段,我们将使用之前创建的挂载点,/ mnt / scsi。我们将在系统中使用适当的安装点。按空格或者制表符。
对于类型,我们将输入
ext4
,这是分区上文件系统的类型。按空格或者制表符。在选项字段中,我们将使用通过cat
/ etc / mtab
检索到的选项。这些是rw,relatime。按空格或者制表符。转储字段设置为零。按空格或者制表符。
通过字段设置为零。
现在,我们将在单独一行上的SSD驱动器上添加fstab
入口分区。
在文件系统字段中,我们将输入" blkid"为SSD驱动器上的分区检索的UUID。以UUID =开头这一行,然后粘贴UUID。按空格或者制表符。
对于挂载点字段,我们将使用之前创建的挂载点/ mnt / ssd。按空格或者制表符。
对于类型,我们将输入
ext4
,这是分区上文件系统的类型。按空格或者制表符。在options字段中,为使我们示例中的两个新条目不同,我们将使用defaults选项。按空格或者制表符。
转储字段设置为零。按空格或者制表符。
通过字段设置为零。
保存文件并关闭编辑器。
相关:如何使用gedit在Linux上以图形方式编辑文本文件
在不重新引导的情况下测试fstab
我们可以卸载新的驱动器,然后在fstab文件中强制刷新。成功安装新分区将验证我们输入的设置和参数在语法上是否正确。这意味着我们的fstab文件应在重新引导或者加电顺序中正确处理。
要卸载SCSI驱动器,请使用此命令。请注意,umount中只有一个n:
sudo umount /dev/sdb1
要卸载SSD驱动器,请使用以下命令:
sudo umount /dev/sdc1
现在,我们将使用lsblk
来检查这些块设备是否已安装。
lsblk | grep sd
而且我们看到了块设备存在于计算机中,但是没有安装在任何地方。
我们可以使用带有-a
(all)选项的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
现在,我们知道已经添加的分区将为我们装载,并且可以访问它们了,因此我们可以放心地重新启动计算机。