[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 <dirPath> -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 补充
(1)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的文件系统类型。
(2)确定设备的名称
在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文件,在该文件中可以找到计算机开机后系统已辨认出来的设备代号。
(3)查找挂接点
在决定将设备挂接之前,先要查看一下计算机是不是有个/mnt的空目录,该目录就是专门用来当作挂载点(Mount Point)的目录。
建议在/mnt里建几个/mnt/cdrom、/mnt/floppy、/mnt/mo等目录,当作目录的专用挂载点。
举例而言,如要挂载下列5个设备,其执行指令可能如下 (假设都是Linux的ext2系统,如果是Windows XX请将ext2改成vfat):
(4)挂载时出现/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
(5) 无法删除设备/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}
X 参考文献
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!