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

驻留在 SATA/PATA 或者 SCSI 设备上的文件系统需要手动安装才能访问它。
mount 命令允许 root 用户手动挂载文件系统。
mount 命令的第一个参数指定要挂载的文件系统。
第二个参数指定文件系统在挂载后可用的目标目录。
目标目录称为挂载点。

使用 mount 挂载文件系统的一般语法是:

# mount [-t file_system_type] [-o mount_options] device mount_point_directory

通过使用 mount,我们可以覆盖 /etc/fstab 中的默认设置。
例如,输入以下内容将分区 /dev/sdd1 挂载到目录 /data:

# mount /dev/sdd1 /data

我们通常不指定文件系统类型,因为它是自动识别的(在超级块中使用幻数,或者只是通过尝试不同的文件系统类型;有关详细信息,请参阅 man mount)。

以下是在使用命令 mount 或者通过在 /etc/fstab 中输入它们来挂载文件系统时可以使用的一些选项。

  • remount。此选项会导致已挂载的文件系统再次挂载。当我们更改 /etc/fstab 中的选项时,我们可以使用 remount 来合并更改。
  • rw, ro 。这些选项指示文件系统是可写 (rw) 还是只读 (ro)。
  • sync, async。这些选项设置文件系统中的同步 (sync) 或者异步 (async) 输入和输出。默认设置为异步。
  • atime, noatime。这些选项设置是否在 inode (atime) 中更新文件的访问时间 (noatime)。选项 noatime 应该可以提高性能。
  • nodev, dev。 nodev 选项可防止在文件系统中解释设备文件。
  • noexec, exec。我们可以使用选项 noexec 禁止在文件系统上执行程序。
  • nosuid, suid。 nosuid 选项确保文件系统中的 suid 和 sgid 位被忽略。

某些选项仅在文件 /etc/fstab 中有意义。
这些选项包括:

  • auto, noauto。系统启动时,在文件 /etc/fstab 中使用选项 noauto 设置的文件系统不会自动挂载。
  • user, nouser。此选项允许用户挂载文件系统。通常,这是用户 root 的特权。
  • defaults。此选项会导致使用默认选项 rw、suid、dev、exec、auto、nouser 和 async。

选项 noauto 和 user 通常结合用于可移动媒体,例如软盘或者 CD-ROM 驱动器。

卸载文件系统

挂载文件系统后,我们可以使用 umount 命令(不带“n”)卸载文件系统。
我们可以通过对设备或者挂载点使用 umount 来卸载文件系统。

例如,要卸载安装在 /data 的文件系统 (dev/sdd1),我们可以输入以下内容之一:

# umount /data

或者

umount /dev/sdd1

为了卸载文件系统,任何应用程序或者用户都不得使用该文件系统。
如果正在使用,Linux 将文件系统视为“忙”,并拒绝卸载文件系统并产生以下错误。

# umount /data
umount: /data: target is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

如果挂载点被进程访问,则无法卸载。
要使 umount 成功,进程需要停止访问挂载点。

lsof 命令在提供的目录中列出所有打开的文件和访问它们的进程。
确定当前阻止文件系统成功卸载的进程很有用。

# lsof /data
COMMAND    PID    USER   FD   TYPE DEVICE  SIZE/OFF     NODE NAME
bash      1160    root  cwd    DIR  253,1       180  4194369 /root
rsyslogd   566    root  cwd    DIR  253,1       224       64 /
...

我们还可以使用 fuser 命令获取当前在要卸载的 mpunt 点上运行的进程的进程 ID。

# fuser -cu /data

我们还可以使用 fuser 命令终止挂载点上的所有进程。

# fuser -ck /data

一旦识别出进程,就可以采取行动,例如等待进程完成或者向进程发送 SIGTERM 或者 SIGKILL 信号。
在这种情况下,卸载挂载点就足够了。

# umount /data

注意:挂载点上的文件系统繁忙的一个常见原因是 shell 提示的当前工作目录低于活动挂载点。
访问挂载点的进程是bash。
更改到挂载点之外的目录允许卸载设备。

查看当前挂载的文件系统

我们可以通过输入命令 mount 查看当前挂载的文件系统。
出现类似如下信息:

# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=487424k,nr_inodes=121856,mode=755)
/dev/vda1 on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
...

我们还可以在文件 /proc/mounts 中查看此信息。

https://onitroad.com 更多教程

强制卸载文件系统

有时,无论我们尝试做什么,系统(内核)都会将文件系统视为繁忙。
在这些情况下,我们可以输入 umount -f 以强制卸载文件系统。
但是,我们建议仅将其用作最后的手段,因为内核认为文件系统仍处于挂载状态可能是有原因的。

# umount -f /mount_point
日期:2020-09-17 00:13:44 来源:oir作者:oir