[Linux] 常用命令之【mount/umount】

[Linux] 常用命令之【mount/umount】

1 mount 挂载

mount命令的作用是加载文件系统,它的用权限是超级用户或/etc/fstab中允许的使用者。

在Linux和Unix系统上,所有文件都是作为一个大型树(以/为根)的一部分访问的。

要访问CD-ROM上的文件,需要将CD-ROM设备挂装在文件树中的某个挂装点。

如果发行版安装了自动挂装包,那么这个步骤可自动进行。

在Linux中,如果要使用硬盘、光驱等储存设备,就得先将它加载,当储存设备挂上了之后,就可以把它当成一个目录来访问。

挂上一个设备使用mount命令。

在使用mount这个指令时,至少要先知道下列3种信息:

要加载对象的文件系统类型、

要加载对象的设备名称

及要将设备加载到哪个目录下

格式: mount -a [-fv] [-t vfstype] [-o options] [-n] [-rw] [-F] device dir

-h:显示辅助信息。

-v:显示信息,通常和-f用来除错。

-a:将/etc/fstab中定义的所有文件系统挂上。

-F:这个命令通常和-a一起使用,它会为每一个mount的动作产生一个行程负责执行。在

系统需要挂上大量NFS文件系统时可以加快加载的速度。

-f:通常用于除错。它会使mount不执行实际挂上的动作,而是模拟整个挂上的过程,通常

会和-v一起使用。

-t vfstype:显示被加载文件系统的类型。通常不必指定。mount 会自动选择正确的类型。

常用类型有:

光盘或光盘镜像:iso9660

DOS fat16文件系统:msdos

Windows 9x fat32文件系统:vfat

Windows NT ntfs文件系统:ntfs

Mount Windows文件网络共享:smbfs

UNIX(LINUX) 文件网络共享:nfs

-o options 主要用来描述设备或档案的挂接方式。

常用的参数有:

loop:用来把一个文件当成硬盘分区挂接上系统

ro:采用只读方式挂接设备

rw:采用读写方式挂接设备

iocharset:指定访问文件系统所用字符集

-n:一般而言,mount挂上后会在/etc/mtab中写入一笔资料,在系统中没有可写入文件系

统的情况下,可以用这个选项取消这个动作。

device : 要挂接(mount)的设备

dir : 设备在系统上的挂接点(mount point)

查看挂载的情况:

df -h

或者

df -h

查看某台主机提供的nfs服务

showmount -e 192.168.1.2

nc -v -w 2 192.168.1.2 -z 2049

挂载 ISO镜像文件

mount /iso/CentOS7-1804.iso /var/www/html/repo/

mount -o loop /iso/CentOS-6.8-x86_64-LiveDVD.iso /var/www/html/repo/

挂载 光盘/软盘

mount /dev/cdrom /mnt

mount -t iso9660 /dev/hdc /mnt/cdrom

# 挂载 cdrom

mount -t iso9660 /dev/sdb /mnt/scdrom

# 挂载 SCSI

mount -t iso9660 /dev/sdc /mnt/scdr

# SCSI cdr

mount -t ext2 /dev/fd0 /mnt/floppy

# 挂载软盘

nfs挂载

mount -t nfs 192.168.1.2:/a /b

挂载U盘

如果计算机没有其它SCSI设备和usb外设的情况下,插入的U盘的设备路径是 /dev/sda1

mkdir /mnt/u-disk

mount /dev/sda1 /mnt/u-disk

2 umount 卸载

umount命令的作用是卸载一个文件系统,它的使用权限是超级用户或/etc/fstab中允许的使用者。

格式: umount -a [-fFnrsvw] [-t vfstype] [-n] [-rw] [-F] device dir

卸载 by 被挂载的文件目录

umount /mnt

卸载 by 被挂载的光盘介质

umount /dev/cdrom

卸载 by 被挂载的 文件目录 + 光盘介质

umount /dev/cdrom /mnt

注意事项

1. 当你的当前路径为/mnt下,即在挂载文件的里面时,卸载会失败,提示:Dev is busy.

解决办法:退出挂载的目录

2. 当有别的程序正在访问挂载的文件时,也会提示卸载失败.

解决颁发:

通过 lsof /mnt 查看是哪个进程占用了/mnt

kill -9 $pid

umount xx 卸载

Y FAQ

Q: Linux可以识别的文件系统

Windows 95/98常用的FAT 32文件系统:vfat ;

Win NT/2000 的文件系统:ntfs ;

OS/2用的文件系统:hpfs;

Linux用的文件系统:ext2、ext3;

CD-ROM光盘用的文件系统:iso9660。

虽然vfat是指FAT 32系统,但事实上它也兼容FAT 16的文件系统类型。

Q: 确定设备的名称

在Linux中,设备名称通常都存在/dev里。这

些设备名称的命名都是有规则的,可以用“推理”的方式把设备名称找出来。

例如,/dev/hda1这个 IDE设备,hd是Hard Disk(硬盘)的,sd是SCSI Device,fd是Floppy Device(或是Floppy Disk?)。

a代表第一个设备,通常IDE接口可以接上4个IDE设备(比如4块硬盘)。

所以,要识别IDE硬盘的方法分别就是hda、hdb、hdc、 hdd。

hda1中的“1”代表hda的第一个硬盘分区 (partition),

hda2代表hda的第二主分区,

第一个逻辑分区从hda5开始,依此类推。

此外,可以直接检查/var/log/messages文件,在该文件中可以找到计算机开机后系统已辨认出来的设备代号。

Q:查找挂接点

在决定将设备挂接之前,先要查看一下计算机是不是有个/mnt的空目录,该目录就是专门用来当作挂载点(Mount Point)的目录。

建议在/mnt里建几个/mnt/cdrom、/mnt/floppy、/mnt/mo等目录,当作目录的专用挂载点。

举例而言,如要挂载下列5个设备,其执行指令可能如下 (假设都是Linux的ext2系统,如果是Windows XX请将ext2改成vfat):

Q: 挂载时出现/dev/loop0 already mounted or mount point busy

若mount时出现/dev/loop0 already mounted or mount point busy错误,表明你尝试挂载的设备 /dev/loop0 已被挂载,或者你指定的挂载点(目录)正在使用中,不能进行挂载。

# 【本次问题的根因】如果 nginx 等 web 容器基于挂载点目录在运行时,需要先停止掉,否则:可能报 "mount: /volume1/docker/data/nginx/html/yum-repository: /dev/loop0 already mounted or mount point busy."

sh-4.4$ sudo mount -o loop $BASE_DIR/docker/data/iso/CentOS-7-x86_64-DVD-2009.iso $BASE_DIR/docker/data/nginx/html/yum-repository

mount: /volume1/docker/data/nginx/html/yum-repository: /dev/loop0 already mounted or mount point busy.

检查 /dev/loop0 是否已经被挂载。可以使用 losetup 命令查看当前所有 loop 设备的状态

如果 /dev/loop0 显示已被关联到某个文件或设备,你需要先解除关联后才能进行挂载

sh-4.4$ sudo losetup -a

/dev/loop0: [0041]:524 (/volume1/docker/data/iso/CentOS-7-x86_64-DVD-2009.iso)

losetup命令是Linux系统中的一个工具,用于将一个文件或设备与一个回环设备(loop device)进行关联。回环设备是一种特殊的虚拟设备,可以将一个文件或设备作为一个块设备来使用。

如果你已经知道 /dev/loop0 被挂载到了某个目录,你可以先卸载它,然后再尝试挂载。使用 umount 命令:

umount /path/to/mount/point

如果你尝试挂载到一个目录,而该目录正在被使用,你需要确保没有进程正在使用这个目录。可以使用 fuser 或 lsof 命令查看:

fuser -m /path/to/mount/point

lsof /path/to/mount/point

根据这些命令的输出,你可能需要停止相关进程或者等它们完成后再尝试挂载。

如果你在脚本中遇到这个错误,并且你确定挂载点没有被占用,可以在挂载命令前加上 -B 选项来忽略这个错误,例如:

mount -B -o loop /path/to/image /path/to/mount/point

Q: 无法删除设备/dev/loop0

当不安全地移除了一个通过losetup连接到loop0的USB设备,之后无法删除或分离loop0。

losetup -a显示/dev/loop0: [0005]:145606719 (/dev/sdb1)

当我将设备重新挂载到/dev/sdb1,umount它并尝试losetup -d /dev/loop0时,我仍然会得到相同的错误loop: can't delete device /dev/loop0: Device or resource busy。有没有办法摆脱环路装置?

step1 要检查循环设备是否安装在某个位置

mount | grep /dev/loopN

step2 来卸载它。

umount /dev/loopN

step3 如果仍有问题,则检查哪个进程正在使用它

lsof | grep loopN

step4 杀死它。

kill -9 {pid}

Q: 执行挂载命令时报:"mount: /mnt/os_iso: can't find in /etc/fstab."

问题描述

下载了 debian iso 包在/iso目录下,现准备挂载到/mnt/os_iso,但报错

root@58e725f418cc:/# mount /iso/debian-11.11.0-amd64-DVD-1.iso /mnt/os_iso/

mount: /mnt/os_iso/: mount failed: Operation not permitted.

root@58e725f418cc:/# mount -o /iso/debian-11.11.0-amd64-DVD-1.iso /mnt/os_iso

mount: /mnt/os_iso: can't find in /etc/fstab.

问题分析

报错信息:"mount: /etc/fstab can't find" 表示系统尝试根据 /etc/fstab 文件中的配置自动挂载文件系统时,找不到指定的挂载点。

解决方法:

检查 /etc/fstab 文件是否存在

一般默认是一个空文件

root@58e725f418cc:/# find / -name fstab

find: '/proc/1/map_files': Operation not permitted

find: '/proc/7/map_files': Operation not permitted

find: '/proc/14/map_files': Operation not permitted

/etc/fstab

root@58e725f418cc:/# cat /etc/fstab

# UNCONFIGURED FSTAB FOR BASE SYSTEM

检查 /etc/fstab 文件中对应的挂载点路径是否正确。

确认挂载点目录是否确实存在。如果不存在,需要创建相应的目录。

以挂载 iso 包为例,在/etc/fstab文件中追加1行配置:

# 格式: <挂载点> iso9660 loop,defaults 0 0

/iso/debian-11.11.0-amd64-DVD-1.iso /mnt/os_iso iso9660 defaults,ro,loop 0

对应的手动命令:mount -o /iso/debian-11.11.0-amd64-DVD-1.iso /mnt/os_iso/

检查挂载点的权限,确保有适当的读写权限。

如果挂载点是通过UUID或LABEL指定的,确保这些标识符是正确的。

如果是网络文件系统,确保相应的网络共享可用,并且网络服务(如NFS或SMB)已启动。

修复或更新 /etc/fstab 文件后,重新尝试挂载可能解决问题:

mount -a

-a 选项会尝试挂载 /etc/fstab 中未挂载的所有文件系统。

参考文献

在/etc/fstab自动挂载iso文件 - CSDN

linux异常(一):linux挂载iso镜像时报错的解决方法 mount: can‘t find cdrom in /etc /fstab or /etc/mtab - CSDN

https://mirrors.aliyun.com/centos/7/isos/x86_64/

https://mirrors.aliyun.com/debian/dists/

X 参考文献

mount挂载与umount卸载 - 博客园

Linux 命令:mount umount - 51CTO

相关推荐