谢烟客---------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文件的格式

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、清空磁盘

# 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、分区

# fdisk /dev/sdb
    p 显示分区表
    n 新增磁盘分区
        +10G
    w 保存退出
    
# cat /proc/partitions
# ls /dev/sdb*

# partx -a /dev/sdb

3、格式化磁盘

[[email protected] ~]# 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、尝试挂载

[[email protected] ~]# mount /dev/sdb1 /mnt
[[email protected] ~]# ls /mnt
lost+found
[[email protected] ~]# umount /mnt

5、定义于fstab文件

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

ext文件系统结构

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

1、超级块

查看超级块结构信息:

[[email protected] ~]# dumpe2fs -h /dev/sdb1
[[email protected] ~]# tune2fs -l /dev/sdb1
整个分区:
    有多少个块组,每组有多少个块或Inode,及使用情况
    共有多少个Inode块,多少已用,多少未用。
    共有多少个Block块,多少已用,多少未用。

超级块的位置:

[[email protected] ~]# 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块结构信息

[[email protected] ~]# 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,依次循环,直到存储完毕。

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

 索引查找

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

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

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

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

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

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中找到块,返回文件的内容,说明是一个文件。

硬链接和软链接的区别

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

创建: ln [-v] SRC DEST

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

使用示例

***文件名,不能以数字开头***

1、测试两个文件是否为硬链接 
1)查看inode
[[email protected] ~]# 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)测试
[[email protected] ~]# [ 131.txt -ef file.txt ]
[[email protected] ~]# echo $?
1
2、创建硬链接
[[email protected] ~]# ln -v 131.txt 13110.txt
`13110.txt‘ => `131.txt‘

[[email protected] ~]# 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、测试
[[email protected] ~]# [ 13110.txt -ef 131.txt ]
[[email protected] ~]# echo $?
0

特性:

不能对目录,循环引用

不能跨分区

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

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

1、查看引用计数
[[email protected] ~]# 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、删除硬链接 
[[email protected] ~]# rm 13110.txt 
rm: remove regular file `13110.txt‘? y

3、查看引用计数
[[email protected] ~]# 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

[[email protected] ~]# ln -sv 131.txt 131.lk
`131.lk‘ -> `131.txt‘
[[email protected] ~]# 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引用计数

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

[[email protected] ~]# 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

[[email protected] ~]# rm 131.txt 
rm: remove regular file `131.txt‘? y

[[email protected] ~]# 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。读出数据和写入数据。

[[email protected] ~]# ls -li 1311.txt 
1968186 -rw-r--r-- 1 root root 29 Aug  9 08:29 1311.txt

[[email protected] ~]# cp 1311.txt a.txt

[[email protected] ~]# 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

移动文件

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

[[email protected] ~]# ls -li a.txt
1968181 -rw-r--r-- 1 root root 29 Aug 10 14:52 a.txt
[[email protected] ~]# mv a.txt b.txt
[[email protected] ~]# ls -li b.txt
1968181 -rw-r--r-- 1 root root 29 Aug 10 14:52 b.txt
[[email protected] ~]# ls a.txt
ls: cannot access a.txt: No such file or directory

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

时间: 2024-10-15 19:33:21

谢烟客---------Linux之文件系统自动挂载和ext文件系统结构、硬/软链接的相关文章

Linux 磁盘 开机自动挂载 -- 基于 fstab 文件

个人博客首页(点击查看详情) -- https://blog.51cto.com/11495268个人公众号(点击链接 扫码关注哦)-- https://blog.51cto.com/11495268/2401194     1.简介     开机 自动 挂载 很有用,特别是 很多 开启自启 服务 依赖于 某些 数据文件:本文 描述 编辑 /etc/fstab 实现 开机自启     2./etc/fstab # cat /etc/fstab # /etc/fstab: static file

linux分区自动挂载与fstab文件修复

linux分区自动挂载与fstab文件修复 在前面我们实现新添加硬盘,进行分区与格式化,然后手动挂载,这样做,在重启后,需要重新挂载才能使用. https://www.cnblogs.com/-wenli/p/10354807.html 自动挂载 要实现自动挂载,其实很简单,只需要把挂载信息写入/etc/fstab 1 .打开/etc/fstab 2.按照格式挂载/dev/sdb1与/dev/sdb5 /dev/sdb1 /disk1 ext4 defaults 1 2 设备文件名 挂载点 文件

[9-1]磁盘分区、创建文件系统、挂载以及链接文件

本文旨在复习磁盘分区.创建文件系统.挂载以及链接文件的基本概念 知识储备 硬盘出厂其实不能写入数据的,是"盲盘",需要处理后使用,格式化分为2种 低格:将空白磁盘划分出柱面.磁道及若干个扇区,每个扇区又划分出标识部分ID.间隔区GAP和数据区DATA等.现在大多出厂已经完成低格,只需要用户磁盘分区即可. 高格:真正意义上的创建文件系统,明确存储设备或分区上的文件方法和数据结构,即在存储设备上组织文件的方法. 文件系统是用户存取磁盘文件操作的"代理人" 不同类型的操作

fstab 文件系统 自动挂载

fstab文件介绍 fstab文件包含了你的电脑上的存储设备及其文件系统的信息.它是决定一个硬盘(分区)被怎样使用或者说整合到整个系统中的文件.具体来说:用fstab可以自动挂载各种文件系统格式的硬盘.分区.可移动设备和远程设备等.对于Windows与Linux双操作系统用户,用fstab挂载FAT格式和NTFS格式的分区,可以在Linux中共享windows系统下的资源. 这个文件的全路径是/etc/fstab.它只是一个文本文件,你能够用你喜欢的编辑器打开它,但是必须是root用户才能编辑它

文件系统管理 之 Linux 创建文件系统及挂载文件系统流程详解

阅读此文,必须具备知识点:<Linux 查看磁盘分区.文件系统.使用情况的命令和相关工具介绍><实例解说 fdisk 使用方法><合理规划您的硬盘分区><Fedora / Redhat 软件包管理指南> 如果您想加载一个分区(文件系统),首先您得确认文件系统的类型,然后才能挂载使用,比如通过mount 加载,或者通过修改 /etc/fstab来开机自动加载:如果您想添加一个新的分区,或者增加一个新的硬盘,您要通过分区工具来添加分区,然后要创建分区的文件系统,

linux根文件系统的挂载过程详解

一:前言 前段时间在编译kernel的时候发现rootfs挂载不上.相同的root选项设置旧版的image却可以.为了彻底解决这个问题.研究了一下rootfs的挂载过程.特总结如下,希望能给这部份知识点比较迷茫的朋友一点帮助. 二:rootfs的种类 总的来说,rootfs分为两种:虚拟rootfs和真实rootfs.现在kernel的发展趋势是将更多的功能放到用户空间完成.以保持内核的精简.虚拟rootfs也是各linux发行厂商普遍采用的一种方式.可以将一部份的初始化工作放在虚拟的rootf

linux系统autofs自动挂载服务

自动挂载autofs命令 涉及服务haldaemon和messagebus两个服务有关,保证两个服务是开启. ***现在想在客户端10.10.10.10自动挂载服务器10.10.10.254上的/share/soft和/share/iso两个目录,该如何配置? 在客户端10计算机上配置 1.mkdir /share 2.vim /etc/auto.master /share    /etc/auto.share    --后面的auto.share文件不存在,名字自定义. 3.# vim /et

Linux两块磁盘挂载指向一个文件夹LVM磁盘管理(一)

注意:任何磁盘的操作有可能损坏里面数据,请提前备份数据,切记!切记!切记! 0x00:前言. 在Linux使用过程中,发现一个文件很大,比如5G,但是有两块物理磁盘一个剩下4G,一个剩3G,磁盘空间不够,这样肯定不能放进去.如果把5G文件分割了是可以放进去,但是如果有很多文件呢!这时候就可以用LVM来帮我们来管理文件是放到哪个磁盘里. 注意:LVM用于单块硬盘小于2TB的分区,如果超过2TB用part分区,不建议用LVM会识别不了. 0x01:文本对照. 物理磁盘:即你购买来能拿在手里的那一块磁

Linux根据UUID自动挂载磁盘分区

一般服务器都有多个硬盘分区,在重启后,这些分区的逻辑位置加载时可能会发生变动,如果使用传统的设备名称(例如:/dev/sda)方式挂载磁盘,就可能因为磁盘顺序变化而造成混乱. Linux环境中每个Block Device都有一个全局唯一的UUID,可以标识这个设备,我们可以在fstab中使用UUID替换设备名称,这样就不会产生上述混乱的情况了. 1.以sdb1为例,首先使用lsblk命令可以清晰的获取全局的块设备布局 2.然后,使用blkid命令可以获取设备的UUID.复制记下sdb1的UUID