[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 参考文献

posted @ 2021-07-15 20:19  千千寰宇  阅读(1400)  评论(0编辑  收藏  举报