Linux深入理解文件系统

在这里插入图片描述

inode和block概述

  • 文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节
  • block(块)
  • 连续的八个扇区组成一个block(块),一个块是4K大小
  • 是文件存取的最小单位
  • 操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的
  • 文件数据包括元信息(类似文件属性)与实际数据
  • 文件数据存储在“块”中,存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域就叫做inode不包含文件名,文件名是存放在目录当中的。Linux系统中一切皆文件,因此目录也是一种文件
  • inode(索引节点)
  • 每个inode都有一个号码,操作系统用inode号来识别不同的文件。Linux内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名
  • 所以,当用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它对应的inode号:通过inode号码,获取inode信息:根据inode信息,看该用户是否具有访问这个文件的权限:如果有,就指向相对于的数据block,并读取数据

inode的内容

  • 用stat命令查看某个文件的inode信息
    在这里插入图片描述
  • Linux系统文件三个主要的时间属性
  • ctime(change time)
    • 最后一次改动文件或目录(属性)的时间
  • atime(access time)
    • 最后一次访问文件的目录时间
  • mtime(modify time)
    • 最后一次**修改(变更)**文件或目录(内容)的时间
  • 目录文件的结构
  • 目录也是一种文件
  • 目录文件的结构
  • 每个inode都有一个号码,操作系统用inode号码来识别不同的文件
  • Linux系统文件内部不使用文件名,而使用inode号码来识别文件
  • 对于用户,文件名只是inode号码便于识别的别称

文件存储小结

  • 硬盘分区后的结构
    在这里插入图片描述
  • 访问文件的简单流程

在这里插入图片描述

inode的大小

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

inode的特殊作用

  • 由于inode号码与文件名分离,导致一些Unix/Linux系统具有以下的现象
  • 当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件
  • 移动或重命令文件时,只改变文件名,不影响inode号码
  • 打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名
  • 移动文件或重命名文件,只是改变文件名,不影响inode号码
  • 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名
  • 文件数据被修改保存后,公生成一个新的inode号码
  • 通过inode号删除文件方法
    find ./ -inum 52305140 -exec rm -i { } ;
    find ./ -inum 50464299 -delete
    在这里插入图片描述
    在这里插入图片描述

模拟inode号节点被耗尽故障

1.使用fdisk /dev/sdb1,分区大小20M即可
fdisk /dev/sdb
在这里插入图片描述
2.格式化ext4类型,创建挂载的目录,挂载进去
mkfs.ext4 /dev/sdb1
mkdir /data
mount /dev/sdb1 /data
在这里插入图片描述
3.查看可用inode号的数量
在这里插入图片描述
4.模拟故障

在这里插入图片描述
在这里插入图片描述
或者可以使用
for ((i=1; i<=5136; i++));do touch /data/${i}.txt;done
在这里插入图片描述
5.删除文件恢复
rm -rf /data/*

案例:恢复EXT类型的文件

  • extundelete是一个开源的Linux数据恢复工具,支持ext3、ext4文件系统。(ext4只能在centos6版本恢复)本人安装的是centos7所以以下试验为ext3
  • 实验恢复ext类型文件
    1.使用fdisk创建分区,格式化成ext3文件系统并挂载
    fdisk /dev/sdb
    mkfs.ext3 /dev/sdb1
    mkdir /data
    mount /dev/sdb1 /data
    在这里插入图片描述
    2.安装环境依赖包
    yum -y install e2fsprogs-devel e2fsprogs-libs
    cd /opt
    tar jxvf extundelete-0.2.4.tar.bz2
    cd extundelete-0.2.4/
    ./configure --prefix=/usr/local/extundelete
    make
    make install
    cd /usr/local/extundelete/bin
    ln -s /usr/local/extundelete/bin/extundelete /usr/bin
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    3.创建文件
    cd /data
    echo a > a
    echo b > b
    echo c > c
    echo d> d
    extundelete /dev/sdb1 --inode 2
    在这里插入图片描述
    4.删除创建的文件并解挂载来模拟故障
    rm -rf a b
    cd
    umount /data在这里插入图片描述
    5.恢复
    extundelete /dev/sdb1 --inode 2
    extundelete /dev/sdb1 --restore-all
    cd RECOVERED_FILES/
    ls此时恢复的文件就在里面文件内容也在
    在这里插入图片描述

xfs类型文件备份和恢复

  • CentOS 7 系统默认采用 xfs类型的文件,xfs 类型的文件可使用 xfsdump 与 xfsrestore 工具进行备份恢复
  • xfsdump的备份级别有两种
  • 0表示完全备份(默认为0)
  • 1-9表示增量备份(增量备份不会备份之前已经备份的内容只备份增加的内容)
  • xfsdump 的命令格式为
  • xfsdump -f 备份存放位置 要备份的路径或设备文件
  • xfsdump 命令常用的选项
  • -f:指定备份文件目录
  • -L:指定标签 session label
  • -M :指定设备标签 media label
  • -s:备份单个文件,-s 后面不能直接跟路径
  • xfsdump使用限制
  • 只能备份已挂载的文件系统
  • 必须使用root的权限才能操作
  • 只能备份 XFS 文件系统
  • 备份后的数据只能让 xfsrestore 解析
  • 不能备份两个具有相同 UUID 的文件系统(可用 blkid命令查看)
  • 操作步骤
    1.使用fdisk创建分区,格式化xfs文件系统创建一些文件目录
    在这里插入图片描述在这里插入图片描述

2.使用xfsdump 命令备份整个分区
xfsdump -f /opt/dump_sdb1 /dev/sdb1 -L dump_sdb1 -M sdb1
cd /opt
ls

在这里插入图片描述

3.模拟数据丢失并使用xfsrestore命令恢复
cd /data
rm -rf *
xfsrestore -f /opt/dump_xfs /data
在这里插入图片描述
ls -R查看最后被恢复的文件
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_53496398/article/details/113620973
今日推荐