admin管理员组

文章数量:1558077

如何在 Linux 中挂载和卸载文件系统?

    • 前言
    • 查看已挂载的文件系统
    • 挂在一个文件系统
      • U盘或磁盘
      • ISO文件
      • 挂载Samba 共享
      • NFS文件的挂载
    • 常用的挂载选项
    • 开机自动挂载
    • 卸载文件系统
      • 延迟卸载(推荐使用)
      • 强制卸载(不推荐使用)
    • 结语

前言

我们知道文件是 Linux 系统中的核心操作单元,在Linux中一切皆文件。文件和目录存储在文件系统中,文件系统可以位于各种设备上,例如硬盘或 USB 驱动器,并且在Linux中文件系统也可以通过网络共享。

在本教程中,我们将讨论如何使用 mount 命令来连接各种文件系统并使用命令 umount 分离它们。

查看已挂载的文件系统

在 Linux 中,我们可以将文件系统挂载到任何目录中。当我们进入目录时,可以访问存储在该文件系统中的文件。我们将这些目录称为文件系统的挂载点

我们可以通过使用不带任何参数的 mount 命令来获取当前系统所有已挂载的文件系统的信息:

$ mount
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
sys on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
dev on /dev type devtmpfs (rw,nosuid,relatime,size=8133056k,nr_inodes=2033264,mode=755)
run on /run type tmpfs (rw,nosuid,nodev,relatime,mode=755)
cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,rdma)
/media/Data/archLinux.iso on /mnt/archIso type udf (ro,relatime,utf8)
/dev/sdb1 on / type ext4 (rw,noatime,commit=120)
...

我们以最后一行打印为例为大家讲解mount打印信息的结构:

/dev/sdb1 on / type ext4 (rw,noatime,commit=120)
---------   ---     ----  ---------------------
   (1)      (2)     (3)          (4)
  1. 文件系统(设备)名称:在本例中,它是第二个硬盘上的第一个分区。

  2. 挂载点:这是设备挂载到的目录 — 在本例中为根目录。

  3. 文件系统的类型:在此示例中,它是 ext4

  4. 装载选项:我们将在以下部分中介绍一些常用的装载选项。

默认情况下,mount 命令将打印所有挂载的文件系统,包括虚拟文件系统,例如 /sys/fs目录下的 cgroup ,但默认 mount 指令打印出来的信息非常多,不方便我们查看,我们可以通过 -t 来过滤掉部分内容,仅显示我们需要的类型,具体命令如下:

$ mount -t ext4
/dev/sda4 on / type ext4 (rw,relatime,errors=remount-ro)
/dev/sdc1 on /opt type ext4 (rw,relatime)
/dev/sda3 on /boot type ext4 (rw,relatime)
/dev/sdb1 on /home type ext4 (rw,relatime)

上面的语句就实现了仅查看文件系统的类型为 ext4 的挂载信息。

挂在一个文件系统

挂载(mounting)是指由操作系统使一个存储设备(诸如硬盘、CD-ROM或共享资源)上的计算机文件和目录可供用户通过计算机的文件系统访问的一个过程。

在Linux系统下挂在文件系统需要两个步骤:

  1. 创建挂载点(使用 mkdir 命令创建目录)
  2. 使用 mount 命令挂载文件系统

具体步骤如下:

#建立挂载点目录
[root@localhost ~]# mkdir /mnt/disk1
#挂载分区
[root@localhost ~]# mount /dev/sdb1 /mnt/disk1

/dev/sdb1 分区还没有被划分。我们在这里只看看挂载分区的方式,非常简单,甚至不需要使用 -ext4 命令指定文件系统,因为系统可以自动检测。

在某些情况下,mount 命令无法检测到文件系统类型,例如:

  1. 分区已损坏或未格式化;
  2. 所需的文件系统工具不可用 ;

在 Linux 系统上,出于安全考虑,挂载通常仅限于 root 用户,但是 root 用户可以设置挂载点目录的权限。因此,所有允许进入目录的用户都可以访问挂载的文件系统。接下来,让我们看看如何挂载各种设备和文件系统。

U盘或磁盘

要在Linux中安装USB驱动器,首先,我们必须找到要安装的USB设备的名称。插入 USB 设备后,Linux 系统会将一个新的块设备文件添加到 /dev 目录中。

大多数 Linux 发行版都会通过 udev 规则填充 /dev/disk/by-label 目录。要识别 USB 驱动器上的分区,我们可以切换到 /dev/disk/by-label ,通过检查分区的标签来查找块设备。

下面让我们以一个U盘为例来进行讲解,假设我们插入一个具有单个分区的 16GB U 盘,该分区以 ext4 格式格式化,标签为SanDisk_16G

$ pwd
/dev/disk/by-label
$ ls -l
...
lrwxrwxrwx 1 root root 10 Oct 28 23:47  Backup -> ../../sda3
lrwxrwxrwx 1 root root 10 Nov  1 18:07  SanDisk_16G -> ../../sdd1
...

ls -l 输出显示我们的 U 盘的块设备文件是 /dev/sdd1。但是,并非所有 Linux 发行版都会填充 /dev/disk/by-label 目录。例如,默认情况下,CirrOS和Ubuntu不会填充按标签目录。除了在 /dev/disk/by-label 中搜索之外,我们还可以使用带有 -l 选项的 fdisk 命令来识别 USB 设备的块设备文件:

root# fdisk -l
...
Disk /dev/sdd: 14.94 GiB, 16013942784 bytes, 31277232 sectors
Disk model: Extreme         
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: 0xfdc01076

Device     Boot Start      End  Sectors  Size Id Type
/dev/sdd1  *       63 31277231 31277169 14.9G 83 Linux
...

找到正确的设备文件后,挂载设备非常简单。首先,我们创建挂载点:

root# mkdir /mnt/usb16G

挂载U盘:

root# mount /dev/sdd1 /mnt/usb16G

root# mount | grep usb16G
/dev/sdd1 on /mnt/usb16G type ext4 (rw,defaults,data=ordered)

现在,我们可以通过访问目录/mnt/usb16G 来访问我们的U盘了,以上就是关于U盘的挂载方式。

ISO文件

挂载不仅限于磁盘的挂载,当然也包括文件的挂载。如果我们有一个文件系统镜像,例如光盘 ISO 镜像,我们可以将镜像挂载为文件系统。

在Linux中,有一种特殊的块设备叫loop device,这种loop device设备是通过影射操作系统上的正常的文件而形成的虚拟块设备。因为这种设备的存在,就为我们提供了一种创建一个存在于其他文件中的虚拟文件系统的机制。

让我们看看如何在 /mnt/archISO 上挂载 iso 文件 archLinux.iso

首先,我们创建一个目录作为挂载点:

root# mkdir /mnt/archIso

接下来,我们将 ISO 映像挂载到我们刚刚创建的目录中:

root# mount /media/Data/archLinux.iso /mnt/archIso -o loop

root# mount | grep archIso
/media/Data/archLinux.iso on /mnt/archIso type udf (ro,relatime,utf8)

通过上面的挂载命令,我们就将 ISO 镜像作为虚拟文件系统进行了挂载,我们通过使用 loop 选项告诉挂载命令将ISO映像视为循环设备。

挂载Samba 共享

SMB协议允许类Unix系统访问Microsoft Windows系统中的共享资源。Samba 是 SMB 协议的开源实现。需要 cifs-utils 包才能挂载 Samba 共享。

例如,假设我们在Windows服务器(192.168.0.7)上有一个Windows共享sharedOnWin,并且密码为kent_PWD的Windows用户kent已被授权访问共享资源。

同样在挂载 Samba 共享之前,我们创建一个目录:

root# mkdir /mnt/winShare

接下来,让我们挂载Samba 共享:

root# mount -t smbfs //192.168.0.7/sharedOnWin /mnt/winShare -o username=kent,password=kent_PWD

root# mount | grep winShare
//192.168.0.7/shareOnWin on /mnt/winShare type cifs (rw,relatime...addr=192.168.0.7,username=kent...)

现在,Windows 共享中的文件就位于目录 /mnt/winShare 中了。

NFS文件的挂载

NFS(网络文件系统)是一种分布式文件系统协议,允许我们通过网络共享远程目录。要挂载 NFS 共享,我们必须先安装 NFS 客户端软件包。

假设我们在服务器 192.168.0.8 上有一个配置良好的 NFS 共享目录/export/nfs/shared

与 Samba 共享挂载类似,我们首先创建挂载点,然后挂载 NFS 共享:

root# mkdir /mnt/nfsShare
root# mount -t nfs 192.168.0.8:/export/nfs/shared /mnt/nfsShare

root# mount | grep nfsShare
192.168.0.8:/export/nfs/shared/ on /mnt/nfsShare type nfs (rw,addr=192.168.0.8)

常用的挂载选项

mount 命令支持许多选项,一些常用的选项是:

  1. loop – 作为环路设备安装
  2. rw– 挂载文件系统读写(默认)
  3. ro – 以只读方式挂载文件系统
  4. iocharset=value – 用于访问文件系统的字符(默认 ISO8859-1)
  5. noauto – 文件系统在系统引导期间不会自动挂载

开机自动挂载

到目前为止,我们已经看到了几个附加到各种文件系统的 mount 命令示例。但是,我们上面这些挂载方式当电脑重启后挂载就会消失,但是对于某些文件系统,我们可能希望在系统引导或重新启动后自动挂载它们。/etc/fstab 文件可以帮助我们实现这一目标。

/etc/fstab 文件包含描述哪些文件系统或设备将挂载在哪些挂载点上以及使用哪些挂载选项的行。

stab 文件中列出的所有文件系统都将在系统引导期间自动挂载,但包含 noauto 挂载选项的行除外。让我们看一个 /etc/fstab 示例:

$ cat /etc/fstab
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/sdb1	/	ext4	rw,defaults,noatime,commit=120,data=ordered	0	1
/dev/sdb2	/home	ext4	rw,defaults,noatime,data=ordered	0	2
/dev/sda3	/media/Backup	ntfs-3g	defaults,locale=en_US.UTF-8	0	0
/dev/sda2	/media/Data	ntfs-3g	defaults,locale=en_US.UTF-8	0	0
...

因此,如果我们在这个文件中添加以下行,archLinux.iso 镜像将在系统启动后自动挂载到 /mnt/archIso 上:

/media/Data/archLinux.iso /mnt/archIso udf ro,relatime,utf8 0 0

一旦 /etc/fstab 中存在该文件系统,我们就可以通过提供挂载点或设备来挂载它。

例如,使用上述 fstab 配置,我们可以使用两个简短命令中的任何一个挂载 /dev/sda2 分区:

root# mount /media/Data

root# mount /dev/sda2

卸载文件系统

umount 命令可以使文件系统分离挂载文件系统。我们只在 umount 命令后面提供文件系统名称或挂载点。

例如,如果我们想卸载之前安装的 U 盘ISO 映像

root# umount /dev/sdd1
root# umount /mnt/archIso

我们还可以一次性卸载多个挂载的文件系统:

root# umount /dev/sdd1 /mnt/archIso

延迟卸载(推荐使用)

当我们想要卸载文件系统时,我们并不知道它上面是否仍在运行操作。例如,复制操作可能正在文件系统上运行。

当然,我们不想破坏副本并获得不一致的数据。选项 -l 将让我们做一个 懒惰umount-l 选项通知系统在该文件系统上完成挂起的读取或写入操作,然后安全地卸载它:

root# umount -l mount_point

强制卸载(不推荐使用)

如果我们将 -f 选项传递给命令 umount,即使文件系统仍然繁忙,它也会强制卸载文件系统:

root# umount -f mount_point

使用 -f 执行 umount 时我们要十分小心,因为它可能导致未挂载文件系统中的数据损坏或不一致。强制卸载的一个实际用例是由于连接问题而需要卸载网络共享,此时我们就可以使用强制卸载命令。

结语

在本文中,我们学习了如何使用 mountumount 命令来挂载和卸载各种文件系统或设备的示例。以及如何常用的安装选项和如何实现自动挂载。

有了这两个命令,在 Linux CLI 中访问网络共享或其他文件系统对我们来说就变得非常简单了。

👇点击下方公众号卡片获取资料👇

本文标签: 文件系统如何在Linux中挂载