首页 > 系统相关 >Linux 文件系统与日志分析

Linux 文件系统与日志分析

时间:2022-10-16 00:12:32浏览次数:56  
标签:文件 root 文件系统 extundelete Linux 日志 txt inode localhost

导图

1.inode表结构

每个文件的属性信息,比如:文件的大小,时间,类型,权限等,称为文件的元数据(meta data)

元数据是存放在inode(index node)表中。inode 表中有很多条记录组成,第一条记录对应的存放了一个

文件的元数据信息。

1.1硬链接和软连接

硬连接 同一个文件取不同的名或者叫多个名字(比如 苏轼 字子瞻 号东坡居士 苏二 谥号文忠 )不支持文件夹,创建一个连接数加一,多路径访问。

软连接 类似于windows里快捷方式,软连接,符号连接

1.2inode表中存放的对应数据

  • inode number 节点号
  • 文件的类型
  • 文件的权限
  • UID
  • GID
  • 链接数(指向这个文件名路径名称个数)
  • 该文件的大小和不同的时间戳
  • 指向磁盘上文件的数据块指针
  • 有关文件的其他数据
查看inode号
[root@localhost data]# ls
123  1.txt  2.txt  3.txt  4.txt  5.txt  data1  data2

[root@localhost data]# ls -i     //方法1
35802872 123  35802838 1.txt  35802839 2.txt  35802840 3.txt  35802841 4.txt  35802842 5.txt   2420054 data1  35802875 data2

[root@localhost data]# stat /data/1.txt  //方法2
  文件:"/data/1.txt"
  大小:0               块:0          IO 块:4096   普通空文件
设备:fd00h/64768d      Inode:35802838    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:default_t:s0
最近访问:2022-10-12 18:52:31.654822781 +0800
最近更改:2022-10-12 18:52:31.654822781 +0800
最近改动:2022-10-12 18:52:31.654822781 +0800
创建时间:-

3个时间戳:
最近访问atime:最后一次差看文件
最近更改mtime:最近更改文件内容的时间,注意:更改完内容之后,ctime也会改变
最近改动ctime:最近更改文件元信息的时间,比如改变权限等

1.3用户访问文件的原理/过程:

  • 用户访问文件时 先去查找 自己 文件夹中的目录项 ,
  • 文件名和inode之间对应的关系,
  • 通过 inode号利用指针(直接指针/间接指针)去指向 实际数据

直接指针:直接指向数据块

间接指针:不直接指向数据块,要经过中间数据块,最后指向数据块

图解:

 

1.4补充:文件相关

  • 文件是存储在硬盘上的,硬盘的最小存储单位叫做“扇区”(sector),每个扇区存储512字节。

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

  • 文件数据包括实际数据与元信息(类似文件属性)。文件数据存储在“块"中,存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域就叫做inode表。 因此,一个文件必须占用一个inode,并且至少占用一个block。

  • inode不包含文件名。文件名是存放在目录文件夹当中的。Linux 系统中一切皆文件,因此目录也是一种文件。

  • 每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称,文件名和inode号码是一一对应关系,每个inode号码对应一个或多个文件名。

    唯一 同一文件系统() 不同的文件

  • 所以,当用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它对应的inode号码:通过inode号码,获取inode信息;根据inode信息,看该用户是否具有访问这个文件的权限;如果有,就指向相对应的数据block,并读取数据。

tops:

硬盘上最小的存储单位为扇区(512字节)

文件存储的最小单位为块8个扇区组成为4k

图解:

  • mode:权限

  • owner info:所有者

  • size:大小

  • timestamps:三个时间戳

inode号与命令cp,rm,mv的关系:

cp 命令:

  • 分配一个空闲的inode号,在inode表中生成新条目

  • 在目录中创建一个目录项,将名称与inode编号关联

  • 拷贝数据生成新的文件

rm 命令:

  • 硬链接数递减,从而释放的inode号可以被重用

  • 把数据块放在空闲列表中

  • 删除目录项

  • 数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖

mv 命令:

 

  • 如果mv命令的目标和源在同一设备,不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!
  • 删除旧的目录对应关系新建目录对应关系

 

 

#可以通过inode号来删除指定文件
[root@localhost data]# ls -i
35802872 123  35802838 1.txt  35802839 2.txt  35802840 3.txt  35802841 4.txt  35802842 5.txt   2420054 data1  35802875 data2

[root@localhost data]# find -inum 35802872 -delete           //命令1
[root@localhost data]# find -inum 35802872 -exec rm {}  /;  //命令2

[root@localhost data]# ls
1.txt  2.txt  3.txt  4.txt  5.txt  data1  data2

 

删除文件空间不释放,解决方法

[root@localhost opt]#lsof |grep delete   //列出文件  过滤已删除

[root@localhost opt]#echo " " > /boot/bigfile   //写空字符导给文件

 

2.文件恢复extundelete

删除一个文件,实际上并不清除 inode 节点和 block 的数据,只是在这个文件的父目录 里面的 block 中,删除这个文件的名字。

Linux 是通过 Link 的数量来控制文件删除的,只有 当一个文件不存在任何 Link 的时候,这个文件才会被删除。

 

在 Linux 系统运维工作中,经常会遇到因操作不慎、操作错误等导致文件数据丢失的情 况,尤其对于客户企业中一些新手。

当然,这里所指的是彻底删除,即已经不能通过“回收 站”找回的情况,比如使用“rm -rf”来删除数据。

针对 Linux 下的 EXT 文件系统,可用的恢复 工具有 debugfs、ext3grep、extundelete 等。

其中 extundelete 是一个开源的 Linux 数据 恢复工具,支持 ext3 文件系统。

2.1使用extundelete工具如何恢复误删文件

在编译安装 extundelete 之前需要先安装两个依赖包 e2fsprogs-libs 和 e2fsprogs-devel;

这两个包在系统安装光盘的/Package 目录下就有,使用 rpm 或 yum 命令将其安装;

e2fsprogs-devel 安装依赖于 libcom_err-devel 包。

[root@localhost ~]#yum -y install e2fsprogs-devel e2fsprogs-libs
#安装依赖软件
[root@localhost ~]# tar -jxvf extundelete-0.2.4.tar.bz2 -C /opt
#解压软件
[root@localhost ~]# cd /opt/extundelete-0.2.4
#切换到目录下
[root@localhost extundelete-0.2.4]# ./configure    //定义模块和路径
#编译安装 
[root@localhost extundelete-0.2.4]#make           //编译
[root@localhost extundelete-0.2.4]#make install   //写入硬盘
[root@localhost extundelete-0.2.4]#cd /usr/local/bin/
[root@localhost bin]#ls
extundelete  you-get


#验证恢复,目前使用版本只对ext3 有效,分区略
[root@localhost ~]# mkfs.ext3 /dev/sdb1
[root@localhost ~]# mkdir /test/ 
[root@localhost ~]# mount /dev/sdb1 /test/ 
[root@localhost ~]# cd /test/
[root@localhost test]# echo a>a 
[root@localhost test]# echo a>b 
[root@localhost test]# echo a>c 
[root@localhost test]# echo a>d

 

2.2模拟误删并恢复

可以使用extundelete /dev/sdb1 --inode 2   //查看文件系统/dev/sdb1 下存在哪些文件

具体的使用情况:

其中--inode 2 代表从 i 节点为 2 的文件开始查看,一般文件系统格式化挂载之后,i 节点是从 2 开始的,2 代表该文件系统最开始的目录。

在恢复前需要先解挂载

 

[root@localhost test]# rm -rf a b   //模拟误删除

[root@localhost test]# ls c d lost+foun
[root@localhost test]# cd 

[root@localhost ~]# umount /test/
#解挂载
[root@localhost ~]#extundelete /dev/sdb1 --inode 2  //查看该分区下的存在哪些文件
#                  命令          查看的分区   从2节点开始

[root@localhost ~]# extundelete  /dev/sdb1          --restore-all    //使用恢复
#                   命令          需要恢复的分区设备    恢复选项,全都要

[root@localhost ~]# ls    
anaconda-ks.cfg extundelete-0.2.4 extundelete-0.2.4.tar.bz2 RECOVERED_FILES
[root@localhost ~]# cd RECOVERED_FILES/    //进入恢复目录
[root@localhost RECOVERED_FILES]# ls   //查看
a b      //恢复成功

 

 

 

 

 

 

3.xfs类型备份和恢复

CentOS 7 系统默认采用 xfs 类型的文件。针对 xfs 文件系统目前也没有比较成熟的文件恢复工具,所以建议提前做好数据备份,以避免数据丢失。

 

xfs 类型的文件可使用 xfsdump 与 xfsrestore 工具进行备份恢复。

若系统中未安装 xfsdump与xfsrestore工具,可以通过yum install -y xfsdump命令安装。

 

xfsdump 按照inode 顺序备份一个 xfs 文件系统。

3.1xfsdump 的备份级别

  • 0 表示完全备份

  • 1-9 表示增量 备份

  • xfsdump 的备份级别默认为 0

xfsdump 的命令格式为:

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

选项:

选项 作用
-f 指定备份文件目录
-L 指定标签 session label
-M 指定设备标签 media label
-s 备份单个文件,-s 后面不能直接跟路径

3.2使用 xfsdump 时,需要注意以下的几个限制:

  • 不支持没有挂载的文件系统备份,所以只能备份已挂载的;

  • 必须使用 root 的权限才能操作;

  • 只能备份 XFS 文件系统;

  • 备份下来的数据只能让 xfsrestore 解析;

  • 不能备份两个具有相同 UUID 的文件系统(可使用blkid查看)。

 

 

4.日志

4.1常见的日志文件

4.2内核和公共日志

4.3用户日志

4.4查询当前登陆的用户情况

4.5查询用户登陆的历史情况

5.总结

标签:文件,root,文件系统,extundelete,Linux,日志,txt,inode,localhost
From: https://www.cnblogs.com/suoluo212/p/16776656.html

相关文章

  • Sentinel安装教程【Linux+windows】
    一、Sentinel的简介Sentinel是阿里巴巴出品的一款流控组件,它以流量为切入点,在流量控制、断路、负载保护等多个领域开展工作,保障服务可靠性。如果你学过netflix公司旗下......
  • Linux的日志文件简介
    一、日志文件1.1、日志文件介绍日志文件是用于记录系统操作事件的记录文件或文件集合,操作系统有操作系统日志文件,数据库系统有数据库系统日志文件,等等。日志文件内容包......
  • Linux系统安全和应用
    一、账号的安全控制1.1、账号的优化账号的优化一般分为下面几个步骤将一些用户设置无法登录,防止其破坏系统锁定无用账号删除长期不登录的闲置账号锁定用户和账号密......
  • Linux 引导及服务
    导图   一.引导过程1.开机自检BIOS服务器主机开机以后,将根据主板BIOS中的设置对CPU、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移......
  • 大学生视角下的Linux学习之路
    如今的软件开发行业可谓是众星云集,要在这个行业干出一番大事业是比较艰难的。回看如今的服务器端市场,没有以前那些服务器一哥的存在了,更多的变成了Linux系统的身影。移动端......
  • RockyLinux清空buff/cache脚本
    一、脚本#!/bin/bash#开始清理缓存echo"开始清除缓存"#写入硬盘,防止数据丢失sync;sync;sync#延迟10秒sleep10#清理缓存echo1>/proc/sys/vm/drop_caches......
  • Linux之Docker-01
    一、镜像基础命令1、dockerversion[root@DY-Ubuntu-01~]#dockerversion#查看Docker版本2、dockerinfo[root@DY-Ubuntu-01~]#dockerinfoClient:Con......
  • django + gunicorn部署,日志丢失解决方法
    近期部署了一个项目,使用的是django开发,服务器是centos7,宝塔+python项目管理器使用项目管理器新建项目,会自动配置虚拟环境,安装库,启动项目,非常不错方便项目采用gunicorn方......
  • Linux学习笔记 | Shell脚本创建与执行
    一、输出命令echo格式:echo[选项][输出内容]说明:选项  -e  表示的是支持反斜线控制的字符转换注意:如果输出的内容中含有空格,使用双引号,如果内容中含有“!”,使用单引......
  • Linux环境变量
    环境变量定义存储有关Shell会话和工作环境信息的变量作用为脚本和程序提供获取环境信息,存储临时数据和配置信息分类全局环境变量Shell与子Shell都适用局......