Linux中的文件系统与挂载


1. 前言

本文将介绍一下挂载是什么,怎么用,以及在文件系统中的作用,最后介绍了Linux的文件系统如何组织及查看方法。

2. 挂载

2.1. 简介

在讲文件系统前,我们先了解一下挂载(mount)是什么。通俗的来说,挂载就是将一个已有的磁盘或者说设备映射到一个文件夹下,以实现通过该文件夹来访问被映射设备的空间。例如,我们有一个U盘插到了一台运行Linux的系统中,这时,系统可以建立一个文件夹(例如/media/cxy/fastflash/),然后将该U盘中的文件系统(可能是exFAT)挂载到该目录下,这时我们便可以访问该目录以查阅其中的文件。这个例子只是挂载应用的冰山一角,它的用处在Linux系统从启动开始到处都可以发现。下面介绍几种常见的挂载用法。

2.2. 挂载一个磁盘到某个目录下

首先,我们先自己制作一块磁盘,运行如下命令,你可以在当前目录下得到一块大小为128M的虚拟磁盘rootfs.ext4,磁盘中数据全为0。

dd if=/dev/zero of=rootfs.ext4 bs=1M count=128

但这时这块磁盘并没有文件系统的概念,可以说就是废块,因为没有系统可以识别它。因此,我们需要格式化这块磁盘为某个格式,例如ext4,使用下面的命令格式化rootfs.ext4文件为ext4格式。

mkfs.ext4 rootfs.ext4

这时你就得到一个ext4格式的磁盘文件了,但是你仔细想想就会发现我们现在得到的这个东西其本质还是一个文件,如何能将他变为一块真正的磁盘呢?这时候就要用到/dev/loop设备了,loop设备是LInux系统用于将一个文件模拟为一个块设备所使用的接口。通俗来说就是将文件套了个壳变成了真正的虚拟磁盘,/dev/loop就是它的接口。使用下面的命令来完成上述功能。

sudo losetup /dev/loop0 rootfs.ext4 

这时你可以留意一下你的桌面,不出意外会发现多出一个像磁盘的图标,没错,它就是你创建的虚拟磁盘,双击它,系统会自动将其挂载到/media目录下供你访问,或者你也可以将其挂载到你想放的目录下,例如~/rootfs/,你可以使用这个命令完成这项功能。

mkdir -p ~/rootfs
sudo mount /dev/loop0 ~/rootfs/

这时,你便可以进入到~/rootfs/目录中像使用U盘一样添加删除文件了,不过你要记得完成后解除挂载,并断开与loop设备的绑定。

sudo umount /dev/loop0
sudo losetup -d /dev/loop0

另外提醒一下,记得退出挂载目录,并在解除所有/dev/loop0的挂载目录后(因为如果你双击了那个磁盘图标系统会自动为你将其挂载到/media的一个目录下,你可以输入mount回车查看关于该loop设备的所有挂载目录),解除与它的绑定。
这种方式经常会用到系统的根文件系统制作中。

2.3. 挂载一个已有目录到某个目录下

这个就比较好理解了,其实就是使用一个目录来访问另一个目录。例如,我们有两个目录如下:

cxy@ubuntu:~$ ls ~/test1/
a.c  b.c
cxy@ubuntu:~$ ls ~/test2/
cxy@ubuntu:~$ 

现在我想用test2作为一个接口访问test1目录,可以使用如下命令:

sudo mount -R test1 test2

这样,目的便达成了:

cxy@ubuntu:~$ ls test1
a.c  b.c
cxy@ubuntu:~$ ls test2
a.c  b.c

最后记得解挂载:

sudo umount test2

2.4. mount支持的文件系统格式

Linux系统的mount指令默认支持一些文件系统格式,如果你的磁盘不是这些格式,那你就需要另外装一些驱动了,你可以查看/proc/filsystems查看你的系统所支持的文件系统格式:

cxy@ubuntu:~$ cat /proc/filesystems 
nodev	sysfs
nodev	rootfs
nodev	ramfs
nodev	bdev
nodev	proc
nodev	cpuset
nodev	cgroup
nodev	cgroup2
nodev	tmpfs
nodev	devtmpfs
nodev	configfs
nodev	debugfs
nodev	tracefs
nodev	securityfs
nodev	sockfs
nodev	dax
nodev	bpf
nodev	pipefs
nodev	hugetlbfs
nodev	devpts
	ext3
	ext2
	ext4
	squashfs
	vfat
nodev	ecryptfs
	fuseblk
nodev	fuse
nodev	fusectl
nodev	pstore
nodev	mqueue
nodev	autofs
nodev	binfmt_misc

3. Linux的文件系统

Linux的文件系统有许多,有sysfs,proc,udev等等,它们其实都负责某一项具体的功能,例如proc专门负责为用户提供查看内部数据结构的功能。这些文件系统最终都会挂载到根文件系统下(根文件系统格式一般为ext4),例如你可以使用mount命令查看所有的文件系统挂载情况:

cxy@ubuntu:~$ 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,relatime,size=1981784k,nr_inodes=495446,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=401644k,mode=755)
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,rdma)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
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/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
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/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=32,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=20101)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,pagesize=2M)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
configfs on /sys/kernel/config type configfs (rw,relatime)
vmhgfs-fuse on /mnt/hgfs type fuse.vmhgfs-fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)
vmware-vmblock on /run/vmblock-fuse type fuse.vmware-vmblock (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=401644k,mode=700,uid=1000,gid=1000)
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)

上面打印了我系统中所有的挂载目录,或者使用df命令也可以:

cxy@ubuntu:~$ df -ah
Filesystem      Size  Used Avail Use% Mounted on
sysfs              0     0     0    - /sys
proc               0     0     0    - /proc
udev            1.9G     0  1.9G   0% /dev
devpts             0     0     0    - /dev/pts
tmpfs           393M   11M  382M   3% /run
/dev/sda1        26G   11G   14G  45% /
securityfs         0     0     0    - /sys/kernel/security
tmpfs           2.0G  212K  2.0G   1% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
cgroup             0     0     0    - /sys/fs/cgroup/systemd
pstore             0     0     0    - /sys/fs/pstore
cgroup             0     0     0    - /sys/fs/cgroup/perf_event
cgroup             0     0     0    - /sys/fs/cgroup/rdma
cgroup             0     0     0    - /sys/fs/cgroup/blkio
cgroup             0     0     0    - /sys/fs/cgroup/memory
cgroup             0     0     0    - /sys/fs/cgroup/cpu,cpuacct
cgroup             0     0     0    - /sys/fs/cgroup/net_cls,net_prio
cgroup             0     0     0    - /sys/fs/cgroup/freezer
cgroup             0     0     0    - /sys/fs/cgroup/pids
cgroup             0     0     0    - /sys/fs/cgroup/devices
cgroup             0     0     0    - /sys/fs/cgroup/hugetlb
cgroup             0     0     0    - /sys/fs/cgroup/cpuset
systemd-1          -     -     -    - /proc/sys/fs/binfmt_misc
mqueue             0     0     0    - /dev/mqueue
debugfs            0     0     0    - /sys/kernel/debug
hugetlbfs          0     0     0    - /dev/hugepages
fusectl            0     0     0    - /sys/fs/fuse/connections
configfs           0     0     0    - /sys/kernel/config
vmhgfs-fuse      20G   11G  9.8G  52% /mnt/hgfs
vmware-vmblock     0     0     0    - /run/vmblock-fuse
tmpfs           393M   64K  393M   1% /run/user/1000
gvfsd-fuse         0     0     0    - /run/user/1000/gvfs
binfmt_misc        0     0     0    - /proc/sys/fs/binfmt_misc

当然了,这些文件系统都是要存放在磁盘的某个区域内,例如我的根文件系统存放在/dev/sda1分区中,所以其他根文件系统中的文件系统也都在该分区中,另外,你可以使用fdisk命令查看系统的分区情况:

cxy@ubuntu:~$ sudo fdisk -l
[sudo] password for cxy: 
Disk /dev/sda: 30 GiB, 32212254720 bytes, 62914560 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xfbe6b49d

Device     Boot    Start      End  Sectors Size Id Type
/dev/sda1  *        2048 54527999 54525952  26G 83 Linux
/dev/sda2       54530046 62912511  8382466   4G  5 Extended
/dev/sda5       54530048 62912511  8382464   4G 82 Linux swap / Solaris

可以看到,我的系统有三个分区,第一个是根文件系统的分区,后面两个应该是用于系统交换用的分区,因为我用的虚拟机。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值