Linux之文件系统自动挂载和ext文件系统结构、硬/软链接

简介:

/etc/fstab文件的格式


GDT,超级块,Indode,校验码

inode表,inode组成,地址指针结构

创建文件:位图索引

查找文件:目录

硬链接,软链接

删除文件,复制文件,移动文件


开机后,首先挂载的是根,然后手动通过根中的mount命令,关联其他分区至根


自动挂载的实现

    1)定义在/etc/fstab文件中

    2)挂载的文件系统支持auto选项


    /etc/fstab文件为何开机能自动挂载

    系统初始化脚本会起用mount命令扫描/etc/fstab文件中的每一行


    /etc/fstab文件定义的条目

        1、文件系统非正常关机,开机时,是否检测?

        2、文件系统中有重要的文件,是否备份?

    /etc/fstab文件的格式

1
2
UUID=07151862-c2b9-45dc-bf7a-af8d2a6fa6c1     /     ext3    defaults      1 1
要挂载的设备或伪文件系统    挂载点(设备挂载的位置)  文件系统类型  挂载选项  转储频率(备份频率) 自检次序

        1)要挂载的设备或伪文件系统

            LABEL="LABEL", UUID="UUID",伪文件系统(devpts,proc,sysfs),设备文件,目录

                CentOS 6: 设备文件名,LABEL。当文件过多时,LABEL可能重复。设备文件名可能改变

                CentOS 7: btrfs文件系统,UUID ,UUID_SUB,UUID:全局唯一标示符,就算设备名改变此                                     UUID不会改变 

        

        2)MOUNT_POINT: 目录

        

        3)文件系统的类型: ext2,ext3,ext4,xfs,btrfs


        4)挂载选项:mount -o OPTIONS中所有选项:

                sync,nosuid,nodev,noatime,noexec,ro

        

        5)转储/备份频率:多长时间备份一次    

            0 不备份,1 每天备份一次,2每隔一天备份一次

            现在一般不会用到此功能:

                1、对目录的备份:周期性任务计划

                2、对文件系统的备份:用dump备份工具

                3、数据库有专用的备份工具(mysqldump,lv_snapshot,percona-xtraDB)


        6)自检的次序

            0:不自检,1首先自检,通常为rootfs,2在1次序对应的设备自检完毕后,才能自检。.... 9

            不同设备有相同的自检序号时,开机同时自检


实现开机自动挂载

1、清空磁盘

1
2
3
4
5
# dd if=/dev/zero of=/dev/sdb count=1 bs=512
** dd 命令**更为底层的复制
if 中的文件复制至of中,of可为文件,可为文件系统
bs=512:     ## 512bytes,0磁道,0扇区,0柱面MBR
count=1     ## 次数

2、分区

1
2
3
4
5
6
7
8
9
10
# fdisk /dev/sdb
     p 显示分区表
     n 新增磁盘分区
         +10G
     w 保存退出
     
# cat /proc/partitions
# ls /dev/sdb*
 
# partx -a /dev/sdb

3、格式化磁盘

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@localhost ~] # mkfs.ext4 -L 'My222' -U $(uuidgen) /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
文件系统标签=My222
操作系统:Linux
块大小=4096 (log=2)   ##默认
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655776 inodes, 2622603 blocks
131130 blocks (5.00%) reserved  for  the super user  ##默认
第一个数据块=0
Maximum filesystem blocks=2688548864
81 block  groups
32768 blocks per group, 32768 fragments per group
8096 inodes per group
Superblock backups stored on blocks:   ##超级块路径
     32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
 
正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
 
This filesystem will be automatically checked every 25 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

4、尝试挂载

1
2
3
4
[root@localhost ~] # mount /dev/sdb1 /mnt
[root@localhost ~] # ls /mnt
lost+found
[root@localhost ~] # umount /mnt

5、定义于fstab文件

1
2
# vim /etc/fstab
/dev/sdb1        /mydata          ext4    defaults,acl    2   3


ext文件系统结构


文件系统创建时,划分成多个大小相等的块,再将几个块归并为一个组。整个文件系统的结构信息,保存于超级块中每个组内的结构信息保存于GDT块中


wKiom1mL_TrCgfoYAABRM4ShDb0185.png

1、超级块


查看超级块结构信息:

1
2
3
4
5
6
[root@localhost ~] # dumpe2fs -h /dev/sdb1
[root@localhost ~] # tune2fs -l /dev/sdb1
整个分区:
     有多少个块组,每组有多少个块或Inode,及使用情况
     共有多少个Inode块,多少已用,多少未用。
     共有多少个Block块,多少已用,多少未用。

超级块的位置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@localhost ~] # mkfs -t ext4 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
文件系统标签=
操作系统:Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655776 inodes, 2622603 blocks
131130 blocks (5.00%) reserved  for  the super user
第一个数据块=0
Maximum filesystem blocks=2688548864     ## 共有块数
81 block  groups                          ## 块组数
32768 blocks per group                   ## 每个组有多少Block
32768 fragments per group 
8096 inodes per group                    ## 每个组有多少inode
Superblock backups stored on blocks:     ## 超级块的位置
     32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632


2、GDT块

查看GDT块结构信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost ~] # dumpe2fs /dev/sdb1
Group 80            当前分区块组编号 
   (Blocks 2621440-2622602) [INODE_UNINIT, ITABLE_ZEROED]   ##块组中块数量
   Checksum 0x1b87        ##校验和
   unused inodes 8096     ##没有使用的inode
   Block bitmap at 2621440 (+0)           ## 块位图 
   Inode bitmap at 2621456 (+16)          ## inode位图
   Inode table at 2621472-2621977 (+32)   ## inode表
   655  free  blocks                        ## 块组中空闲的块
   8096  free  inodes                       ## 块组中空闲的inode
   0 directories                         
   8096 unused inodes                   0
   Free blocks: 2621441-2621455, 2621457-2621471, 2621978-2622602       ##空闲的块
   Free inodes: 647681-655776                                           ##空闲的inode


基础名词:


校验码

作用:检查数据的完整性

校验方法:

    1、数据提供校验码,

    2、使用前,计算数据的检验码

    3、将计算结果与之前的校验码比对,一样,数据可靠。不一样,不可靠的数据


inode ,inode index

    inode是文件的一级索引(稠密索引,一个文件对应一个索引节点)

    

    inode组成: size, perm, owner, group, timestamp + 地址指针:文件存储的数据块的编号


    inode引用: inode编号 


    inode空间:计算机标识每个磁盘块,用一个二进制数字。

        例如65535个数据块,用16个0到16个1之间的所有变化,每一种变化对应一个磁盘块。Inode中只用存储这些编号,即可找到文件中所有的数据块。

        如果数据块过多,二进制位过长时,单个磁盘块的编号过长,inode空间可能存储不下。


        inode地址指针结构:

直接指针: 直接引用固定个数的块的编号,引用的块的数量太少

间接指针: 每个块编号指向另一个连续的空间。目的为了扩展空间。类似于扩展分区

三级指针:另一个连续空间中的块中的编号,又指向一个连续的空间


在文件系统中创建文件的过程


    遍历查找

        在一级索引(Inode表)中以遍历的方式查找 

        1、找空闲Inode:在inode表中,根据inode的标志位遍历的方式找空闲的inode

        2、找空闲block: 根据block的标志位遍历的方式找空闲的block,每次查找为单个inode分配固定个数的块。

            如果此次存储的文件较小时,将没有用到的块的状态标识为0即可。

            如果文件存储文件较大时,再次分配固定数量的块给inode,依次循环,直到存储完毕。


        wKioL1mL85WxrORhAABpeCyBhKI592.png-wh_50

        标志位:标示每个inode或block块使用的状态(使用为1 | 未使用为0 )

    

    索引查找

        由于遍历的文件过于低效,就在原基础之上在建立一个索引(位图索引),将使用状态为0归为一类,将使用状态为1归为一类

        1、找空闲Inode:查找inode位图索引

        2、找空闲block:  查找block位图索引

wKiom1mL9OSx20LfAACIlEJJFtQ823.png

    

位图索引的建立时也需要全盘扫描,才知道每个标志位状态,为了便于建立块位图,inode位图,在每个块组中都有一个块位图和Inode位图。

wKioL1mNFseQ-zEgAACemLtJFHQ004.png-wh_50

在文件系统中查找文件的过程

        1、找到inode块 

        2、找到block块


目录:存储在磁盘块中,磁盘块中记录了文件名文件名对应的inode号码

     

查找/etc/sysconfig/network-scripts/ifcfg-eth0的过程

/内核开机挂载了根,就能识别根目录下文件及inode号码

根据etc文件名对应的inode号码在inode位图中找到inode所对应的inode据inode中的数据块编号,在block bitmap中找到块返回文件名及对应的inode号码,说明是一个目录


根据sysconfig文件名对应的inode号码在inode位图中找到inode所对应的inode,据inode中的数据块编号,在block bitmap中找到块,返回文件名及对应的inode号码,说明是一个目录


根据network-scripts文件名对应的inode号码在inode位图中找到inode所对应的inode,据inode中的数据块编号,在block bitmap中找到块,返回文件名及对应的inode号码,说明是一个目录


根据ifcfg-eth0文件名对应的inode号码在inode位图中找到inode所对应的inode,据inode中的数据块编号,在block bitmap中找到块,返回文件的内容,说明是一个文件。


wKiom1mL_JOB6vV3AADCnK3Fz9g334.png


硬链接和软链接的区别



硬链接:同一设备下不同文件指向相同的inode

    创建: ln [-v] SRC DEST

    测试两个文件是否为硬链接: [ FILE1 -ef FILE2 ]

使用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
***文件名,不能以数字开头***
 
1、测试两个文件是否为硬链接 
1)查看inode
[root@localhost ~] # ls -li file.txt 131.txt 
1968181 -rw-r--r-- 1 root root 28 Aug  9 08:28 131.txt
1968192 -rw-r--r-- 1 root root 28 Aug 10 14:34  file .txt
2)测试
[root@localhost ~] # [ 131.txt -ef file.txt ]
[root@localhost ~] # echo $?
1
2、创建硬链接
[root@localhost ~] # ln -v 131.txt 13110.txt
`13110.txt ' => `131.txt'
 
[root@localhost ~] # ls -li 13110.txt 131.txt
1968181 -rw-r--r-- 2 root root 28 Aug  9 08:28 13110.txt
1968181 -rw-r--r-- 2 root root 28 Aug  9 08:28 131.txt
 
3、测试
[root@localhost ~] # [ 13110.txt -ef 131.txt ]
[root@localhost ~] # echo $?
0


    特性:

不能对目录,循环引用

不能跨分区

同一设备同一个inode,会增加Inode引用计数

    

    删除硬链接指向的文件:表示删除文件的路径,把inode计数-1

1
2
3
4
5
6
7
8
9
10
11
12
13
1、查看引用计数
[root@localhost ~] # ls -li 13110.txt 131.txt
1968181 -rw-r--r-- 2 root root 28 Aug  9 08:28 13110.txt
1968181 -rw-r--r-- 2 root root 28 Aug  9 08:28 131.txt
 
2、删除硬链接 
[root@localhost ~] # rm 13110.txt 
rm : remove regular  file  `13110.txt'? y
 
3、查看引用计数
[root@localhost ~] # ls -li 13110.txt 131.txt
ls : cannot access 13110.txt: No such  file  or directory
1968181 -rw-r--r-- 1 root root 28 Aug  9 08:28 131.txt

    当引用计数为0时,Inode位图中此inode编号对应的Inode块状态为0,inode对应的磁盘块的状态为0


软链接:根据文件名对应的inode号码在inode位图中找到inode所对应的inode,inode中不是地址指针/数据块编号,是一串数字

    创建:ln -s [-v] SRC DEST

1
2
3
4
5
[root@localhost ~] # ln -sv 131.txt 131.lk
`131.lk ' -> `131.txt'
[root@localhost ~] # ls -l 131.txt 131.lk 
lrwxrwxrwx 1 root root  7 Aug 10 14:43 131.lk -> 131.txt
-rw-r--r-- 1 root root 28 Aug  9 08:28 131.txt


    特性:

        可以对目录和文件

        可以跨分区

        指向另一个文件的路径,其大小为路径字符串的长度,不会增加inode引用计数


 删除软链接指向的文件:删除引用路径 

1
2
3
4
5
6
7
8
9
10
[root@localhost ~] # ls -l 131.txt 131.lk 
lrwxrwxrwx 1 root root  7 Aug 10 14:43 131.lk -> 131.txt
-rw-r--r-- 1 root root 28 Aug  9 08:28 131.txt
 
[root@localhost ~] # rm 131.txt 
rm : remove regular  file  `131.txt'? y
 
[root@localhost ~] # ls -l 131.txt 131.lk 
ls : cannot access 131.txt: No such  file  or directory
lrwxrwxrwx 1 root root 7 Aug 10 14:43 131.lk -> 131.txt


复制文件和移动文件的区别

    复制文件

       创建新的文件,在Inode位图中查找,后在block位图中查找,引用新的Inode,block。读出数据和写入数据。

1
2
3
4
5
6
7
8
[root@localhost ~] # ls -li 1311.txt 
1968186 -rw-r--r-- 1 root root 29 Aug  9 08:29 1311.txt
 
[root@localhost ~] # cp 1311.txt a.txt
 
[root@localhost ~] # ls -li 1311.txt a.txt
1968186 -rw-r--r-- 1 root root 29 Aug  9 08:29 1311.txt
1968181 -rw-r--r-- 1 root root 29 Aug 10 14:52 a.txt

    移动文件

        同分区,创建硬链接后,删除原文件

1
2
3
4
5
6
7
[root@localhost ~]# ls -li a.txt
1968181  -rw-r--r--  1  root root  29  Aug  10  14 : 52  a.txt
[root@localhost ~]# mv a.txt b.txt
[root@localhost ~]# ls -li b.txt
1968181  -rw-r--r--  1  root root  29  Aug  10  14 : 52  b.txt
[root@localhost ~]# ls a.txt
ls: cannot access a.txt: No such file or directory

    跨分区: 在新分区中创建新的文件,在新分区的位图中查找,引用新的Inode,block。读出数据和写入数据。










本文转自 lccnx 51CTO博客,原文链接:http://blog.51cto.com/sonlich/1955143,如需转载请自行联系原作者
目录
相关文章
|
21天前
|
安全 Linux 数据安全/隐私保护
深入Linux操作系统:文件系统和权限管理
在数字世界的海洋中,操作系统是连接用户与硬件的桥梁,而Linux作为其中的佼佼者,其文件系统和权限管理则是这座桥梁上不可或缺的结构。本文将带你探索Linux的文件系统结构,理解文件权限的重要性,并通过实际案例揭示如何有效地管理和控制这些权限。我们将一起航行在Linux的命令行海洋中,解锁文件系统的奥秘,并学习如何保护你的数据免受不必要的访问。
|
1月前
|
存储 运维 监控
深入Linux基础:文件系统与进程管理详解
深入Linux基础:文件系统与进程管理详解
85 8
|
1月前
|
Linux 调度
Linux系统结构
内核是操作系统的核心组件,负责管理系统资源和硬件设备。它提供了硬件抽象层,使得应用程序不必直接操作硬件。内核的主要功能包括: 进程管理:创建、调度和终止进程。 内存管理:分配和回收内存,提供虚拟内存功能。 设备管理:控制硬件设备的访问。 文件系统管理:管理文件和目录结构。 系统调用接口:提供系统调用,使应用程序能够与操作系统交互。
43 8
|
1月前
|
存储 Linux 文件存储
Linux文件系统
Linux文件系统 一切皆文件 在Linux中,“一切皆文件”的概念意味着系统中的所有资源,包括硬件设备、目录及进程等,均被视为文件。这种设计简化了操作和管理,具体包括: 普通文件:存储数据的常规文件。 目录文件:包含其他文件和子目录的文件。 进程文件:在/proc目录下代表系统中运行的进程。 设备文件:位于/dev目录,代表硬件设备。 网络字节流套接字文件:用于网络通信的数据流。 链接文件:指向另一个文件的符号链接或硬链接。 管道文件:用于进程间通信的文件。
54 7
|
1月前
|
缓存 Linux
揭秘Linux内核:探索CPU拓扑结构
【10月更文挑战第26天】
52 1
|
1月前
|
缓存 运维 Linux
深入探索Linux内核:CPU拓扑结构探测
【10月更文挑战第18天】在现代计算机系统中,CPU的拓扑结构对性能优化和资源管理至关重要。了解CPU的核心、线程、NUMA节点等信息,可以帮助开发者和系统管理员更好地调优应用程序和系统配置。本文将深入探讨如何在Linux内核中探测CPU拓扑结构,介绍相关工具和方法。
33 0
|
2月前
|
Linux
linux开机挂载镜像
【10月更文挑战第1天】在 Linux 系统中,开机挂载镜像通常涉及几个关键步骤,包括创建挂载点、编辑配置文件以及重新加载配置
101 0
|
3月前
|
存储 缓存 Linux
Linux文件系统的功能规划
【9月更文挑战第12天】本文通过类比图书馆,形象地解释了文件系统的组织形式和管理方法。首先,文件系统需按块存储文件,并设有索引区方便查找。其次,热点文件应有缓存层提高效率,文件需分类存储以便管理。最后,Linux内核需记录文件使用情况,通过文件描述符区分不同文件,确保文件操作准确无误。
|
存储 缓存 算法
【Linux】基础IO(二)--- 理解内核级和用户级缓冲区、磁盘与ext系列文件系统、inode与软硬连接(下)
【Linux】基础IO(二)--- 理解内核级和用户级缓冲区、磁盘与ext系列文件系统、inode与软硬连接(下)
220 1
|
存储 Linux 编译器
【Linux】基础IO(二)--- 理解内核级和用户级缓冲区、磁盘与ext系列文件系统、inode与软硬连接(上)
【Linux】基础IO(二)--- 理解内核级和用户级缓冲区、磁盘与ext系列文件系统、inode与软硬连接(上)
269 0