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

举报
Tiamo_T 发表于 2022/07/18 20:01:56 2022/07/18
【摘要】 本文通过 15 个实际示例解释了您需要了解的有关 mount 和 umount 命令的所有内容。

将新硬盘插入系统后,通常会使用fdiskparted等实用程序来创建分区。创建分区后,您将使用mkfs 命令创建 ext2、ext3 或 ext4 分区。

创建分区后,应使用 mount 命令将分区挂载到挂载点(目录),以开始使用文件系统。

本文通过 15 个实际示例解释了您需要了解的有关 mount 和 umount 命令的所有内容。

挂载设备的通用 mount 命令语法:

mount -t type device destination_dir

1. 挂载光盘

CD 的设备文件将存在于 /dev 目录下。例如,将安装一个 CD-ROM 设备,如下所示。

# mount -t iso9660 -o ro /dev/cdrom /mnt

在上面的示例中,选项“-o ro”表示应该以只读访问权限安装 cdrom。此外,在执行 mount 命令之前,请确保目标目录(在上面的示例中为 /mnt)存在。

2. 查看所有坐骑

执行挂载分区或文件系统后,执行不带任何参数的挂载命令以查看所有挂载。

在下面的示例中,在系统上挂载 USB 驱动器后,挂载的输出如下所示。如下所示,USB 设备(即:/dev/sdb)挂载在 /media/myusb 上,显示为挂载命令的最后一行。

# mount
/dev/sda5 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
/dev/sda6 on /mydata type ext2 (rw)
/dev/sda7 on /backup type vfat (rw)
gvfs-fuse-daemon on /home/bala/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=bala)
/dev/sdb on /media/myusb type vfat (rw,nosuid,nodev,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks)

您还可以使用df 命令查看所有挂载点。

# df
Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/sda5      195069136 128345036  56958520  70% /
udev             2008336         4   2008332   1% /dev
tmpfs             806244       928    805316   1% /run
none                5120         0      5120   0% /run/lock
none             2015604       228   2015376   1% /run/shm
/dev/sda6       17729076    176200  16657596   2% /mydata
/dev/sda7       11707200    573312  11133888   5% /backup
/dev/sdb         3910656   2807160   1103496  72% /media/myusb

3.挂载/etc/fstab中提到的所有文件系统

/etc/fstab 中列出的文件系统在引导过程中被挂载。启动后,系统管理员可能会出于各种原因卸载某些分区。如果您希望按照 /etc/fstab 中指定的方式安装所有文件系统,请使用带有 mount 的 -a 选项,如下所示:

示例 /etc/fstab 文件条目:

# cat /etc/fstab
#
proc            /proc           proc    nodev,noexec,nosuid 0       0
# / was on /dev/sda5 during installation
/dev/sda5 /               ext4    errors=remount-ro 0       1
# /mydata was on /dev/sda6 during installation
/dev/sda6 /mydata         ext2    defaults        0       2
# /backup was on /dev/sda7 during installation
/dev/sda7 /backup         vfat    defaults        0       3

使用 -a 选项执行 mount 命令以挂载所有 /etc/fstab 条目。

# mount -a

# mount
/dev/sda5 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
/dev/sda6 on /mydata type ext2 (rw)
/dev/sda7 on /backup type vfat (rw)
gvfs-fuse-daemon on /home/bala/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=bala)

umount 可以使用相同的 -a 选项来卸载 /etc/mtab 中提到的所有文件系统

# umount -a
umount: /run/shm: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
umount: /run: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
umount: /dev: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
umount: /: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

某些文件系统由于忙或当前正在使用而未卸载。请注意,文件 /etc/mtab 和 /proc/mounts 的内容是相似的。

4. 仅从 /etc/fstab 挂载特定文件系统

当您仅将目录名称传递给挂载时,它会查找挂载点条目,如果未找到,则在 /etc/fstab 中连续搜索设备并进行挂载。

# mount | grep /mydata

# cat /etc/fstab | grep mydata
##########/mydata was on /dev/sda6 during installation##########
 /dev/sda6 /mydata         ext2    defaults        0       2

如上所示,/mydata 目录不是挂载点,但它存在于 /etc/fstab 中。

# mount /mydata

# mount | grep /mydata
/dev/sda6 on /mydata type ext2 (rw)

如果您再次执行相同的操作,您将收到如下错误消息:

# mount /mydata
mount: /dev/sda6 already mounted or /mydata busy
mount: according to mtab, /dev/sda6 is already mounted on /mydata

在这里,您还可以传递设备名称而不是目录名称(从 /etc/fstab 文件中获取)。

# mount /dev/sda6

请注意,文件 /etc/mtab 和 /proc/mounts 的内容是相似的。

5.查看所有挂载的特定类型的分区

可以只列出使用选项 -l 和 -t 挂载的特定类型的文件系统,如下所示:

# mount -l -t ext2
/dev/sda6 on /mydata type ext2 (rw)

# mount -l -t ext4
/dev/sda5 on / type ext4 (rw,errors=remount-ro)

如上所示,/dev/sda6 是唯一的 ext2 分区,/dev/sda5 是唯一的 ext4 分区。

6. 挂载软盘

软盘的设备文件将存在于 /dev 目录下。例如,将安装一张软盘,如下所示。

# mount /dev/fd0 /mnt
# cd /mnt

挂载成功后,您就可以访问软盘的内容了。完成后,在从系统中物理删除软盘之前使用 umount。

# umount /mnt

7.绑定挂载点到新目录

挂载点可以绑定到新目录。这样您就可以同时通过多个挂载点访问文件系统的内容。

使用 -B 选项与 olddir 和 newdir 绑定如下,

# mount -B /mydata /mnt

现在绑定已完成,您可以按如下方式验证它,

# mount | grep /mydata
/dev/sda6 on /mydata type ext2 (rw)
/mydata on /mnt type none (rw,bind)

如上所示,绑定已正确完成。因此,当您在一个地方对文件系统进行修改时,您可以在其他挂载点看到它的反映,如下所示:

# cd /mydata
# ls
test
# mkdir dir1
# mkdir dir2
# ls
test    dir1    dir2
# cd /mnt
# ls
test    dir1    dir2

8.从新的挂载点访问内容

Mount 允许您从新的挂载点访问挂载点的内容。它只不过是将一棵已安装的树移到另一个地方。

在下面的示例中,挂载点 /mydata 将使用选项 -M 从 /mnt 访问,如下所示:

# mount -M /mydata /mnt/

完成后,您不能将旧的挂载点移动到新的挂载点,这可以验证如下:

# mount | grep /mydata
# mount | grep /mnt
/dev/sda6 on /mnt type ext2 (rw)

9. 挂载而不将条目写入 /etc/mtab

在/etc/只读挂载期间,挂载命令不能修改/etc/mtab文件条目。但是,可以通过使用选项 -n 来完成挂载,而无需写入 /etc/mtab,如下所示,

# mount -n /dev/sda6 /mydata

您在 mount 命令输出以及 /etc/mtab 文件中看不到此 /mydata 的任何条目,如下所示:

# mount | grep /mydata
# cat /etc/mtab | grep /mydata

访问已安装目录 /mydata 的内容:

# cd /mydata
# ls
dir1  dir2  test

10. 挂载具有读或读/写访问权限的文件系统

要将分区挂载为只读,请使用 -r 选项,它是 -o ro 的同义词。

# mount /dev/sda6 /mydata -r
# mount  | grep /mydata
/dev/sda6 on /mydata type ext4 (ro)

ext3 和 ext4 文件系统仍然允许您在文件系统脏时执行写操作。因此,您可能必须使用“ro,noload”来防止此类写操作。

# mount /dev/sda6 /mydata -t ext4 -o ro -o noload
# mount | grep /mydata
/dev/sda6 on /mydata type ext4 (ro,noload)

要挂载具有读/写访问权限的分区,请使用与“-o rw”相同的 -w 选项(即:默认值)。

11.重新挂载挂载的文件系统

为了挂载已经挂载的文件系统,使用 remount 选项,它通常用于在以前以读访问权限挂载文件系统时以读/写访问权限重新挂载文件系统。

/mydata 挂载点将通过读访问的读/写访问重新挂载,如下所示:

# mount | grep /mydata
/dev/sda6 on /mydata type ext4 (ro,noload)
# mount -o remount,rw /mydata
# mount | grep /mydata
/dev/sda6 on /mydata type ext4 (rw)

12. 挂载iso镜像到目录

可以安装iso镜像,如下图:

# mount -t iso9660 -o loop pdf_collections.iso /mnt
# cd /mnt
# ls
perl/    php/    mysql/

13.卸载多个挂载点

umount 允许您在一次执行 umount 命令时卸载多个挂载点,如下所示:

# umount /mydata  /backup
# mount | grep /mydata
# mount | grep /backup

14. 延迟卸载文件系统

这是 umount 中的一个特殊选项,以防您想在磁盘操作完成后卸载分区。您可以使用该分区发出命令 umount -l ,卸载将在磁盘操作完成后完成。

例如,考虑一个任务(即:脚本或任何其他命令)正在磁盘上执行复制操作的场景,同时您可以使用 -l 发出卸载,这样卸载就会在复制结束(即:磁盘操作)。

# umount /mydata -l

15. 强制卸载文件系统

umount 提供了在设备繁忙时使用选项 -f 强制卸载文件系统的选项,如下所示:

# umount -f /mnt

如果这对您不起作用,那么您可以进行延迟卸载。

同时,您还可以查看ps 命令输出当前哪个进程正在使用挂载点,如下所示:

# ps ajx | grep /mydata
 2540  3037  3037  2468 pts/2     3037 D+       0   0:00 cp -r /home/tiamo/ProjectData/ /mydata

您还可以执行fuser 命令来找出哪个进程正在保存该目录以进行操作。

# fuser -cu /mydata
/mydata:              3087(root)

它为您提供带有用户名的进程 id(只有进程的所有者)。如果您知道该进程是什么,您可能希望停止该进程,然后再次尝试 umount。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。