Docker入门篇数据卷先导课之文件挂载

本文详细解读Linux文件系统结构,特别是挂载机制,揭示其与Docker数据卷的相似之处,通过实例演示如何挂载、查看和操作分区,为理解Docker数据卷提供基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Linux文件系统(File System)

为了彻底搞懂Docker的数据管理,我们不如多费点时间追本溯源。
先来看看Linux的文件系统,再重点理解Linux操作系统中的挂载的概念。
因为Docker数据卷的使用和Linux中对目录的挂载非常类似,所以搞懂了Linux文件系统中的挂载,对于我们深入理解Docker中的数据卷是非常有帮助的。

Windows文件系统

为了理解Linux的文件系统,我们可以对比一下我们最常用的Windows操作系统的文件系统。
在Windows操作系统中,点击我的电脑图标后,我们可以看到列出来的设备和驱动器,也就是我们常用的C盘、D盘、E盘。
这些盘里面就是一些目录或文件。
在这里插入图片描述
上图可以看到C盘,代表PC中插入的一块硬盘;如果再插入一个U盘,列表上会看到一个新的盘(比如D盘)。

Linux文件系统

但是在Linux系统中,没有C盘D盘的说法,文件是以根目录(/)开始的树形结构组织起来的。
根目录可以被认为文件系统的根,其他的分支是它的子目录,子目录下还可以嵌套子目录或文件。
在这里插入图片描述
相比Windows中的C盘,对应的是一块硬盘,但是在Linux中,etc、bin分别是一块硬盘吗?显然不一定是。
Linux系统使用的目录树形架构,但是我们的文件数据其实是放在磁盘分区槽中的。
那么目录树结构和磁盘内的数据是如何结合的呢?这就需要说到另一个话题——挂载(mount)

Linux的文件挂载(mount)

挂载,顾名思义,就是把一个东西A挂到另一个东西B上去。
这里的A就是磁盘分区槽,我们的数据(010111二进制)真正存储的地方。
这里的B就是上图中的某个目录,也不一定只是在根目录下,设置就是根目录,可能子目录的子目录等,总之是目录或者是文件。

所以,所谓的挂载,就是把磁盘分区槽的数据放置在该目录下,这样的好处就是,进入这个目录,就可以直接读取这个分区槽的数据了!
在这里插入图片描述
上面的图片中,把分区1挂载到了根目录,把分区2挂载到了根目录下的home目录。

多说无益,我们找一套Linux环境一探究竟。

# df -h
/dev/sda2                       95G   36G   60G  38% /
/dev/sda1                       2.8G  271M  2.6G  10% /boot
138.48.48.150:/mnt/test/backup  4.9T  3.3T  1.4T  71% /data/backup

上面的结果可以看到:

  1. 根目录/挂载的是**/dev/sda2**分区
  2. /boot目录挂载的是**/dev/sda1**分区
  3. 至于**/data/backup**这个目录更有意思,它挂载的是另一台server的其他分区

也就是根目录/和/boot挂载的是本地分区,/data/backup挂载的是外部服务器的分区(相当于网盘)

标准的来说,/dev/sda2应该叫文件系统,/boot应该叫挂载点。我们使用df命令查看文件系统的挂载情况。

我们的磁盘设备或者磁盘分区,都可以挂载到挂载点上。

挂载其实就是物理设备到逻辑路径的转换机制,最终的结果就是访问这个目录,就是访问这个存储设备!

Linux挂载测试

前一章讲的都是原理和结果,这一章我们通过实际运行命令,来0距离体验一下挂载mount的魅力。

查看已有分区

我们先用ll命令看看我们系统中的磁盘分区:

# ll /dev/sda*
brw-rw----. 1 root disk 8, 0 Feb 15 19:45 /dev/sda
brw-rw----. 1 root disk 8, 1 Feb 15 19:45 /dev/sda1
brw-rw----. 1 root disk 8, 2 Feb 15 19:45 /dev/sda2
brw-rw----. 1 root disk 8, 3 Feb 15 19:45 /dev/sda3

可以看到,开头的字母b,它不是d表示它不是目录,也不是f表示它不是普通文件,而是b表示它block块设备文件

# cd /dev/sda1
-bash: cd: /dev/sda1: Not a directory
# vi /dev/sda1
"/dev/sda1" is not a file

Linux中万物皆文件,所以存储块设备文件,也算是一种特别的文件。

其实用fdisk命令看更精准
如下所示,我们设置可以看到每个分区开始和结束的位置,块大小

# fdisk -l
Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 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
Disk label type: dos
Disk identifier: 0x000cc7a8

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     5861375     2929664   83  Linux
/dev/sda2         5861376   205090815    99614720   83  Linux
/dev/sda3       205090816   209287167     2098176   82  Linux swap / Solaris
挂载情况

结合用df命令查看分区挂载情况:

# df -h
/dev/sda2                       95G   36G   60G  38% /
/dev/sda1                       2.8G  271M  2.6G  10% /boot
138.48.48.150:/mnt/test/backup  4.9T  3.3T  1.4T  71% /data/backup

因为/boot挂载了/dev/sda1这个分区,所以我们可以用cd命令进入到这个分区,查看及操作分区存储的数据文件:

# cd /boot/
# ll
total 174656
drwx------. 5 root root      132 Feb 12  2019 grub2
-rw-r--r--. 1 root root   611327 Apr 22  2018 initrd-plymouth.img
# touch Hello_mount
# ll
total 174656
drwx------. 5 root root      132 Feb 12  2019 grub2
-rw-r--r--. 1 root root   611327 Apr 22  2018 initrd-plymouth.img
-rw-r--r--. 1 root root        0 Feb 16 08:46 Hello_mount
umount卸载挂载

用umount命令卸载挂载

# umount -v /boot
umount: /boot (/dev/sda1) unmounted

再查看一下系统的挂载情况,发现已经找不到之前的/dev/sda1挂载到/boot目录了

# df -h
/dev/sda2                       95G   36G   60G  38% /
138.48.48.150:/mnt/test/backup  4.9T  3.3T  1.4T  71% /data/backup

再进入之前的挂载目录/boot,发现里面啥也没有

# ll /boot/
total 0
mount挂载

然后我们再用mount命令挂载回来

# mount /dev/sda1 /tmp/test

我们再看一下挂载情况,我们可以看到这个分区已经成功挂到了/tmp/test目录

# df -h
/dev/sda2                       95G   36G   60G  38% /
/dev/sda1                       2.8G  271M  2.6G  10% /tmp/test

再用ls命令查看这个目录的文件,发现和之前的/boot内容一模一样!

# ll
total 174656
drwx------. 5 root root      132 Feb 12  2019 grub2
-rw-r--r--. 1 root root   611327 Apr 22  2018 initrd-plymouth.img
-rw-r--r--. 1 root root        0 Feb 16 08:46 Hello_mount

这里挂载只是为了测试,所以最好还是把/dev/sda1挂载回/boot目录。另外使用手动挂载,系统重启后会失效,如果要一直生效,需要修改/etc/fstab

总结

通过挂载,我们可以将任意的存储设备(磁盘设备或分区)挂载到Linux的树形文件体系下的任意目录中,然后我们可以进入该目录,查看操作该设备或分区中存储的文件!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值