电子头条

Linux 文件系统挂载与卸载完全指南:一步步学会管理你的分区和存储设备

2024-09-27
    阅读数:

链接:https://bbs.huaweicloud.com/blogs/365099

将新硬盘插入系统后,通常会使用fdisk或parted等实用程序来创建分区。创建分区后,您将使用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。



招已经开始啦,大家如果不做好充足准备的话, 招很难找到好工作。


送大家一份就业大礼包,大家可以突击一下春招,找个好工作!


展开↓