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,如需转载请自行联系原作者
目录
相关文章
|
16天前
|
缓存 Linux 测试技术
安装【银河麒麟V10】linux系统--并挂载镜像
安装【银河麒麟V10】linux系统--并挂载镜像
83 0
|
19天前
|
存储 安全 数据管理
探索Linux的挂载操作🌈
在Linux这个强大的操作系统中,挂载操作是一个基本而重要的概念。它涉及到文件系统、设备和数据访问,对于理解Linux的工作方式至关重要。那么,挂载操作究竟是什么,为什么我们需要它,如果没有它,我们将面临什么问题呢?让我们一起深入探讨。
探索Linux的挂载操作🌈
|
30天前
|
存储 算法 Linux
【Linux系统编程】Linux 文件系统探究:深入理解 struct dirent、DIR 和 struct stat结构
【Linux系统编程】Linux 文件系统探究:深入理解 struct dirent、DIR 和 struct stat结构
45 0
|
3天前
|
Ubuntu Linux 芯片
Linux(2)ubuntu rootfs根文件系统制作
Linux(2)ubuntu rootfs根文件系统制作
19 0
|
12天前
|
存储 运维 监控
深入理解 Linux 文件系统的层次结构
【4月更文挑战第14天】本文将探讨 Linux 操作系统的文件系统层次结构,这是每个系统管理员和开发人员必须掌握的核心知识。我们将从文件系统的顶层目录开始,逐步深入到每个目录的特定用途和重要性,以及它们如何协同工作以支持 Linux 系统的正常运行。
|
16天前
|
缓存 Linux
linux centos7 挂载本地iso yum源
linux centos7 挂载本地iso yum源
73 0
|
24天前
|
Linux 编译器 Windows
Linux软链接使用技巧
Linux软链接使用技巧
14 1
|
24天前
|
存储 固态存储 Unix
Linux中磁盘分区和文件系统管理
在Linux系统中,磁盘是存储数据的物理设备,如HDD或SSD,以文件形式存在于`/dev`目录下,如`sda`、`sdb`等。文件系统定义了如何在磁盘上组织和访问数据,常见的Linux文件系统有ext2、ext3、ext4、xfs等。通过虚拟机软件如VMware,用户可以向Linux虚拟机添加新的硬盘。
|
30天前
|
存储 算法 Linux
Linux中的硬链接与软链接:原理、应用与最佳实践
Linux中的硬链接与软链接:原理、应用与最佳实践
56 0
|
1月前
|
安全 Linux 数据安全/隐私保护
深入理解Linux文件系统的权限管理
在Linux操作系统中,文件系统权限管理是维护系统安全与数据完整性的基石。本文将深入探讨Linux文件系统中的权限模型,包括用户、组和其他三个层级的读、写、执行权限。通过分析权限位的具体含义和实际作用,文章旨在提供一套系统的方法论,以帮助系统管理员和开发人员更有效地配置和管理文件权限。同时,我们将通过实例展示如何使用命令行工具和配置文件来修改和查看文件权限,以及如何利用权限管理来增强系统的安全性。