linux · 2023-02-28 0

mount 与 umount 使用

1.挂载列表

Linux中的根目录以外的文件要想被访问,需要将其“关联”到根目录下的某个目录来实现,这种关联操作就是“挂载”,这个目录就是“挂载点”,解除次关联关系的过程称之为“卸载”。只有被挂载了之后,才可以访问里面的内容

语法:

mount [-lhV]
mount [选项] <源> <目录>

选项:

  • -a, --all 挂载 fstab 中的所有文件系统
  • -t, --types <列表> 限制文件系统类型集合
  • -o, --options <列表> 挂载选项列表,以英文逗号分隔
  • -r, --read-only 以只读方式挂载文件系统(同 -o ro)
  • -w, --rw, --read-write 以读写方式挂载文件系统(默认)

源:

  • <设备> 按路径指定设备
  • <目录> 绑定式挂载的挂载点(参阅 --bind/rbind)
  • <文件> 用于设置回环设备的常规文件

-t 详细选项:

  • 光盘或光盘镜像: iso9660
  • DOS fat16文件系统: msdos
  • Windows 9x fat32文件系统: vfat
  • Windows NT ntfs文件系统: ntfs
  • Mount Windows文件网络共享: smbfs(需内核支持)推荐cifs
  • UNIX(LINUX)文件网络共享: nfs
  • 自动: auto

-o 详细选项:

  • loop:用来把一个文件当成硬盘分区挂接上系统
  • ro:采用只读方式挂接设备
  • rw:采用读写方式挂接设备
zxm@zxm-pc:~$ mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,nosuid,noexec,relatime,size=16328472k,nr_inodes=4082118,mode=755,inode64)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,noexec,relatime,size=3273792k,mode=755,inode64)
/dev/nvme0n1p2 on / type ext4 (rw,relatime,errors=remount-ro)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,inode64)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k,inode64)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755,inode64)
cgroup2 on /sys/fs/cgroup/unified type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
efivarfs on /sys/firmware/efi/efivars type efivarfs (rw,nosuid,nodev,noexec,relatime)
bpf on /sys/fs/bpf type bpf (rw,nosuid,nodev,noexec,relatime,mode=700)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,rdma)
cgroup on /sys/fs/cgroup/misc type cgroup (rw,nosuid,nodev,noexec,relatime,misc)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=28,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=22992)
mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,nosuid,nodev,noexec,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,pagesize=2M)
tracefs on /sys/kernel/tracing type tracefs (rw,nosuid,nodev,noexec,relatime)
fusectl on /sys/fs/fuse/connections type fusectl (rw,nosuid,nodev,noexec,relatime)
configfs on /sys/kernel/config type configfs (rw,nosuid,nodev,noexec,relatime)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,nosuid,nodev,noexec,relatime)
/dev/nvme0n1p1 on /boot/efi type vfat (rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=3273792k,mode=700,uid=1000,gid=1000,inode64)
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
/dev/fuse on /run/user/1000/doc type fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
/dev/sda1 on /mnt/data1 type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
/dev/sda2 on /mnt/data2 type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
overlay on /var/lib/docker/overlay2/37b197f104f3ea0125b216fe2cc133cb520e6a8c66cf5daf5af2743df8feb743/merged type overlay (rw,relatime,lowerdir=/var/lib/docker/overlay2/l/L7HZFN6EU2XC2VXBVBICEM2J5M:/var/lib/docker/overlay2/l/U6PUGQJQ2STIHTEOLHQDFANNMZ,upperdir=/var/lib/docker/overlay2/37b197f104f3ea0125b216fe2cc133cb520e6a8c66cf5daf5af2743df8feb743/diff,workdir=/var/lib/docker/overlay2/37b197f104f3ea0125b216fe2cc133cb520e6a8c66cf5daf5af2743df8feb743/work)
nsfs on /run/docker/netns/54d80aaf0de9 type nsfs (rw)

只输出指定类型的挂载:

zxm@zxm-pc:~$ mount -t tmpfs
tmpfs on /run type tmpfs (rw,nosuid,nodev,noexec,relatime,size=3273792k,mode=755,inode64)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,inode64)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k,inode64)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755,inode64)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=3273792k,mode=700,uid=1000,gid=1000,inode64)

2.文件系统的类型

多数情况下我们不用指定 -t 参数显式地说明文件系统的类型,但文件系统的类型对 mount 命令来说确实是非常重要的。原因是假如你要挂载一个当前系统不支持的文件系统,它是没办法工作的。当前系统支持的文件系统类型是由内核来决定的,比如 ext2、ext3、ext4、sysfs 和 proc 等常见的文件系统默认都是被支持的

查看当前系统具体都支持哪些文件系统:

zxm@zxm-pc:~$ cat /proc/filesystems
nodev   sysfs
nodev   tmpfs
nodev   bdev
nodev   proc
nodev   cgroup
nodev   cgroup2
nodev   cpuset
nodev   devtmpfs
nodev   configfs
nodev   debugfs
nodev   tracefs
nodev   securityfs
nodev   sockfs
nodev   bpf
nodev   pipefs
nodev   ramfs
nodev   hugetlbfs
nodev   devpts
    ext3
    ext2
    ext4
    squashfs
    vfat
nodev   ecryptfs
    fuseblk
nodev   fuse
nodev   fusectl
nodev   efivarfs
nodev   mqueue
nodev   resctrl
nodev   pstore
nodev   autofs
nodev   binfmt_misc
nodev   overlay
nodev   aufs

第一列说明文件系统是否需要挂载在一个块设备上, nodev 表明后面的文件系统不需要挂接在块设备上。 第二列是内核支持的文件系统。

3.挂载设备

格式化并挂载磁盘:

mkfs -t ext4 /dev/sda1
mount /dev/sda1 /mnt/data1/

以只读的方式挂载:

mount -o ro /dev/sda1 /mnt/data1/

把只读的挂载重新挂载为读写模式:

mount /mnt/data1/ -o rw,remount

4.挂载 windows 共享文件

局域网中一般都是 windows 系统和 Linux 系统共存的,在 windows 上共享文件时指定一个本机的用户,然后在 mount 命令中指定这个用户及其密码就可以了:

mount -t cifs -o username=zz1,password=123456 //172.16.107.1/doc /mnt

5.挂载虚拟系统

proc、tmpfs、sysfs、devpts 等都是 Linux 内核映射到用户空间的虚拟文件系统,它们不和具体的物理设备关联,但它们具有普通文件系统的特征,应用层程序可以像访问普通文件系统一样来访问他们

比如内核的 proc 文件系统默认被挂载到了 /proc 目录,当然也可以再把它挂载到其它的目录

mount -t proc none /mnt/proc1

由于 proc 是内核虚拟的一个文件系统,并没有对应的设备,所以这里的 -t 参数不能省略。由于没有对应的源设备,这里的 none 可以是任意字符串,取个有意义的名字就可以了,因为用 mount 命令查看挂载点信息时第一列显示的就是这个字符串

在 Linux 上我们还可以通过 tmpfs 文件系统轻松地构建出内存磁盘来。比如在内存中创建一个 512M 的 tmpfs 文件系统,并挂载到 /mnt 下,这样所有写到 /mnt 目录下的文件都存储在内存中,速度非常快,不过要注意,由于数据存储在内存中,所以断电后数据会丢失掉:

mount -t tmpfs -o size=512m tmpfs /mnt/tempfs1

6.挂载 loop 设备

在 Linux中,硬盘、光盘、软盘等都是常见的块设备,他们在 Linux 下的目录一般是 /dev/sda1、/dev/cdrom、 /dev/fd0 这样的。而 loop device 是虚拟的块设备,主要目的是让用户可以像访问上述块设备那样访问一个文件。 loop device 设备的路径一般是 /dev/loop0、dev/loop1 等,具体的个数跟内核的配置有关

loop设备是一种伪设备,是使用文件来模拟块设备的一种技术,文件模拟成块设备后, 就像一个磁盘或光盘一样使用。在使用之前,一个 loop 设备必须要和一个文件进行连接。这种结合方式给用户提供了一个替代块特殊文件的接口。因此,如果这个文件包含有一个完整的文件系统,那么这个文件就可以像一个磁盘设备一样被 mount 起来。之所以叫loop设备(回环),其实是从文件系统这一层来考虑的,因为这种被 mount 起来的镜像文件它本身也包含有文件系统,通过loop设备把它mount起来,它就像是文件系统之上再绕了一圈的文件系统,所以称为 loop

挂载 ISO 文件:

# 创建 iso 文件
mkisofs -o file.iso file/
# 挂载 iso 文件
mount t.iso /mnt/file

虚拟硬盘:

# dd 命令创建一个 512M 的文件
dd if=/dev/zero bs=1M count=512 of=./vdisk.img
# 文件里面创建 vfat 文件系统
mkfs.vfat vdisk.img
# 挂载
mount vdisk.img /mnt/vdisk

7.挂载目录

zxm@zxm-pc:~$ sudo mount --bind t1 t2
zxm@zxm-pc:~$ mount -l
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
/dev/nvme0n1p2 on /home/zxm/t2 type ext4 (rw,relatime,errors=remount-ro)

把 t1 挂载到 t2,如果 t2 目录有内容将被遮住,等 umount 了,原来 t2 目录的内容就显示出来了

8.卸载

语法:

umount [选项] <源> | <目录>

umount /dev/sda1
umount /mnt/data1/