Linux文件系统概念,操作方法和分析系统日志

一,inode与block

文件数据包括元信息与实际信息;
文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节。
一个文件必须占用一个inode,并且至少占用一个block。

1.1 block:(块)的概念

连续的八个扇区组成一个block(4k);
是文件存取的最小单位
操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取

1.2 inode:(索引节点)的概念

存储文件元信息( 比如文件的创建者、创建日期、文件大小、文件权限等)的区域就叫做inode
中文译名为“索引节点”,也叫i节点;
用于存储文件元信息
inode不包含文件名。文件名是存放在目录当中的

1.3 inode和block的关系

元信息→inode
数据→block

  • Linux系统中一切皆文件,因此目录也是一种文件
    每个Inode都有一个号码,操作系统用inode号码来识别不同的文件
  • Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称,每个inode号码对应一个文件名
  • 当用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它对应的inode号码;通过inode号码,获取inode信息;根据inode信息,看该用户是否具有访问这个文件的权限,如果有,就指向对应的数据block,并读取

1.4 查看文件名对应的inode方式

ls -i 【文件名】#查看文件名对应的inode号
stat 文件名 #除了显示该文件的inode号还包含时间,硬链接等
Linux文件系统概念,操作方法和分析系统日志
Linux文件系统概念,操作方法和分析系统日志

1.5 inode包含文件的元信息

Linux文件系统概念,操作方法和分析系统日志

  • 文件的字节数
  • 文件的UID
  • 文件的GID
  • 文件的权限
  • 文件的时间戳

1.6 Linux系统文件三个主要的时间属性

  • ctime (change time):最后一次改变文件或目录(属性)的时间
  • atime (access time):最后一次访问文件或目录的时间
  • mtime (modify time):最后一次修改文件或目录(内容)的时间

1.7 用户通过文件名打开文件夹时,系统内部的过程

  • 系统找到文件名对应的inode号
  • 根据inode号,获取对应信息
  • 根据inode信息,找到文件数据所在的block,读出数据

1.8硬盘分区后的结构

Linux文件系统概念,操作方法和分析系统日志

1.9 访问文件的简单流程

用户访问文件→系统查找文件对应的inode号→判断用户是否具备访问权限:
是→指向对应数据(block)
否→返回(permission denied)

1.10 inode 的大小

  • inode也会消耗硬盘空间:每个inode的大小一般是128字节或者256字节;
  • 格式化文件系统时确定inode的总数;
  • 使用df -i命令可以查看每个硬盘分区的inode总数和已经使用的数量

Linux文件系统概念,操作方法和分析系统日志

1.11 inode特点

由于inode号码与文件名分离,导致Linux系统具备以下几种特有的现象:

  • 文件名包含特殊字符,可能无法正常删除。这时直接删除inode,能够起到删除文件的作用
  • 移动文件或重命名文件,只是改变文件名,不影响inode号,但是复制的话,会生成一个新的inode号
  • 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名
  • 文件数据被修改保存后,会生成一个新的inode号码

删除inode号:

find ./ -inum 68201004 | xargs rm -rf
find ./ inum 68201004 -delete
find ./ -inum 68201002 -exec rm -i {} \;

三条命令都可通过inode号删除对应文件
find命令的参数:
-exec:find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为command{ } \ ;

xargs命令
用途:
构造参数列表并运行命令,即将接收的参数传递给后面的command命令执行
特殊功效:将多行输入转换为单行

1.11.2 inode号的变化

Linux文件系统概念,操作方法和分析系统日志
复制123.txt且不改变名称,inode号改变

Linux文件系统概念,操作方法和分析系统日志
复制文件,且改变名称,inode号改变

Linux文件系统概念,操作方法和分析系统日志
移动文件,名称不变,inode号不改变

Linux文件系统概念,操作方法和分析系统日志
重命名操作,inode号不变

Linux文件系统概念,操作方法和分析系统日志
修改文件内容,inode号改变

3.inode节点耗尽故障处理

inode也会消耗硬盘空间,当inode的空间消耗完以后,即使硬盘还有空间,也无法使用

3.1 操作步骤格式

fdisk /dev/sdb  #创建新的10M大小的分区
mkfs.ext4 /dev/sdb1    #也可以用xfs类型,但是在做实验室创建inode号的时候要比inode总数多创建100多个,可能是统计问题,这里建议用ext4或者ext3方便实验
mkdir /data
mount /dev/sdb1 /data
df -i
 
#模拟inode节点耗尽故障
for ( (i=1; i<=2549; i++) ) #for循环,循环+1创建文件
>do
>touch /test/ file$i
>done<br><br>或者直接touch {1. . 2549} . txt
 
df -i
df -hT
 
#删除文件恢复
rm -rf /data/ *
df -i
df -hT

3.2 恢复误删除的文件(EXT类型)

extundelete是一个开源的Linux数据恢复工具,支持ext3、ext4文件系统(ext4只能在Centos6版本恢复)
1、编译安装exttundelete软件包
安装依赖包

  • e2fsprogs-libs-1. 41.12-18.el6.x86_ 64.rpm
  • e2fsprogs-devel-1 .41.12-18.el6.x86_ _64.rpm
    配置、编译及安装
  • extundelete-0.2.4.tar.bz2
    Linux文件系统概念,操作方法和分析系统日志

Linux文件系统概念,操作方法和分析系统日志
挂载一块新硬盘分区至/data目录
Linux文件系统概念,操作方法和分析系统日志

把extundelete上传至/data
Linux文件系统概念,操作方法和分析系统日志
解压并指定文件夹安装

Linux文件系统概念,操作方法和分析系统日志
最后一行显示安装位置

Linux文件系统概念,操作方法和分析系统日志
切换到挂载目录
Linux文件系统概念,操作方法和分析系统日志
创建文件及内容
Linux文件系统概念,操作方法和分析系统日志
将源码包的命令设置到usr/bin

Linux文件系统概念,操作方法和分析系统日志
查看/dev/sdb2下有那些文件,inode节点从2开始,表示从根目录开始

Linux文件系统概念,操作方法和分析系统日志
删除文件123.txt,456.txt,789.txt,并查看
Linux文件系统概念,操作方法和分析系统日志

解挂/data
Linux文件系统概念,操作方法和分析系统日志

Linux文件系统概念,操作方法和分析系统日志
ls查看文件

Linux文件系统概念,操作方法和分析系统日志
cd进入查看
文件恢复成功

三,xfs类型文件备份和恢复

1.介绍:
Centos 7系统默认采用xfs类型的文件,xfs类型的文件可使用xfsdump 与xfsrestore 工具进行备份恢复。
xfsdump的备份级别有两种: 0表示完全备份; 1-9表示增量备份。xfsdump的备份级别默认为0。
2.xfsdump的命令格式

xfsdump -f 备份存放位置  要备份的路径或设备文件

3.xfsdump命令常用的选项
-f:指定备份文件目录
-L:指定标签session label
-M:指定设备标签media label
-S:备份单个文件,-s后面不能直接跟路径
4.xfsdump使用限制:
只能备份已挂载的文件系统
必须使用root的权限才能操作
只能备份XFS文件系统
备份后的数据只能让xfsrestore解析
不能备份两个具有相同UUID的文件系统(可用blkid命令查看)

#使用fdisk创建分区/dev/sdb1,格式化xfs文件系统
fdisk /dev/ sdb
partprobe /dev/ sdb
mkfs.xfs [-f] /dev/ sdb1
mkdir /data
mount /dev/ sdb1 /data/
cd /data
cp /etc/passwd ./
mkdir  test
touch test/a
 
#使用xfsdump 命令备份整个分区
rpm -qa| grep xfsdump
yum install -y xfsdump
xfsdump -f /opt/dump_sdb1 /dev/sdb1 [-L dump sdb1 -M sdb1 ]
 
#模拟数据丢失并使用 x fsrestore 命令恢复文件
cd /data/
rm -rf ./*
ls
 
xfsrestore -f /opt/dump_ sdb1 /data/
上一篇:Linux-深入理解文件系统(inode与block的详解、5分钟搞懂硬链接与软链接)


下一篇:了解实现Linux内核文件系统