实验系统:ubuntu18.04(桌面版)内核4.15.0-29-generic

可挂载设备类型:

  1. 实体设备(实体块文件系统):分区、磁盘、软盘、网络设备等硬件
  2. 文件(虚拟块文件系统):.ISO镜像等文件,虚拟硬件与终端等。

查看当前挂载

一般而言,mount 在挂上后会在 /etc/mtab 中写入一笔资料(可取消写入)

# 查看当前挂载
mount
# 查看指定类型的挂载,例:tmpfs
mount -t tmpfs
# 查看当前支持的文件系统类型(不支持的使用modprobr ... 加载对应模块)
cat /proc/filesystems
# 列出所有使用的回环设备
losetup -a
# 列出可用块设备(其中包括loop*)
lsblk
# 查看路径是否为挂载点
mountpoint /mnt

创建文件系统

创建1G大小的文件

# 按块(块大小为1G)从“/dev/zero”中读取1个块到“loopfile.img”文件
dd if=/dev/zero of=loopfile.img bs=1G count=1

将文件格式化为 ext4 格式

# 格式化为ext4
mkfs.ext4 loopfile.img
# 查看文件类型
file loopfile.img

创建iso光盘映像文件

# 将/tmp/文件夹只作为ISO文件
mkisofs -r -o empty.iso /tmp/
# 挂载也用loop,但是为只读模式,即使指定--rw也无用,
# 因为 Linux内核的iso9660文件系统实现就是只读的,可以使用`isomaster`软件来修改或重新制作

临时挂载(重启后失效)

查看:

# 查看所有的loop设备
losetup -a

方法1:直接挂载

# 1.创建文件夹:mount挂载时指定目录需已存在,挂载后其中内容将无法被访问,可卸载挂载点后恢复访问
mkdir /mnt/test_mount_loop30
# 2.mount命令:使用loop模式将一个档案当成硬盘分割挂上系统
mount -o loop loopfile.img /mnt/test_mount_loop30

方法2:分步挂载

# 1.查找第一个未使用的循环设备(便于下一步使用)
losetup -f
# 2.使用 losetup将磁盘镜像文件关联到(虚拟成)块设备
# 注:一般已存在的loop*是已经在用的,修要改成不存在的数字编号loop文件
losetup /dev/loop30 loopfile.img
# 3.创建文件夹:mount挂载时指定目录需已存在,挂载后其中内容将无法被访问,可卸载挂载点后恢复访问
mkdir /mnt/test_mount_loop30
# 4.将虚拟块文件挂载到指定目录
mount /dev/loop30 /mnt/test_mount_loop30

方法3:分区后挂载(方法2的一种运用)

# 将文件虚拟成块设备
losetup /dev/loop1 loopfile.img
# 查看待分区磁盘
fdisk -l
# 开始对设备分区
fdisk /dev/loop30
...后续根据提示操作

临时移除loop设备创建与挂载

# 移除挂载
umount /mnt/vfs
# 将回环设备移除。
losetup -d /dev/loop30

卸载设备忙问题

# 查看挂载点被占用情况(返回例:/images:              5863c)
fuser -m /images/
# 查看进程id对应的进程
ps -P 5488  5863
# 杀死指定id进程
kill 5863
# 占用进程全被杀死后,卸载
umount /images/

永久挂载(重启后仍生效)

相关文件:/etc/fstab 开机自动加载的FS,/etc/mtab 当前已经加载的FS。

  1. 查看文件格式
  • 方法一:直接查看文件格式
root@xiaoqiang:/home/xiaoqiang# file /home/xiaoqiang/loop_img/test2.iso
/home/xiaoqiang/loop_img/test2.iso: Linux rev 1.0 ext4 filesystem data, UUID=46710fa9-9c04-4a93-a811-ba064114abb9 (needs journal recovery) (extents) (64bit) (large files) (huge files)
  • 方法二:挂载后查看文件格式
root@xiaoqiang:/home/xiaoqiang# mount -o loop /home/xiaoqiang/loop_img/test2.iso /mnt/test2_iso/
root@xiaoqiang:/home/xiaoqiang# df -T
文件系统       类型         1K-块     已用      可用 已用% 挂载点
......
/dev/loop19    ext4        999320     2568    927940    1% /mnt/test2_iso
  1. 编辑/etc/fstab文件
    在其中添加挂载设置(注意顺序,如根目录“/”)
# /etc/fstab: static file system information.
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# /
UUID=efdef8fc-1491-4773-9df6-c24a15f3e408   /   ext4   noatime,errors=remount-ro   0   1
# /boot/efi
UUID=93D6-2F3F   /boot/efi   vfat   noatime,umask=0077   0   1
/home/xiaoqiang/loop_img/test2.iso /mnt/test2_iso ext4 loop,defaults 0 0
  1. 测试是否正常(警告)
    警告:错误时重启将无法正常开机,但可输入root密码登录文件系统后修复。
# 测试:将 /etc/fstab 中定义的所有档案系统挂上(无报错则正常)
mount -a

内存文件系统

# 挂在一个tmpfs文件系统
mount -t tmpfs tmpfs /mount_dir
# 挂在一个共享内存文件系统:/dev/shm
mount -t tmpfs /dev/shm /mount_dir

参考链接:
内含创建示例:Linux losetup 命令mount命令用法:(linux下mnt目录作用)linux之loop设备详解linux增加loop设备上限