深入理解Linux文件系统与日志分析(包含ext和xfs文件系统误删文件具体如何恢复操作)
深入理解Linux文件系统与日志分析
一、inode与block**
1.1inode和block概述
●文件数据包括元信息与实际数据
●文件存储在硬盘上,硬盘最小存储单位是扇区,每个扇区存储512字节
512字节*8=4096字节,最常见的4k
●block(块)
连续的八个扇区组成一个block
是文件存取的最小单位
●inode(索引节点)
中文译名为“索引节点”,也叫i节点
用于存储文件元信息
1.2inode的内容
1.2.1inode包含文件的元信息
文件的字节数
文件拥有者的User ID
文件的Group ID
文件的读、写、执行权限
文件的时间戳
(不包含文件名)
……
1.2.2用stat命令可以查看某个文件的incode信息
示例:
1.2.3Linux系统文件三个主要的时间属性
ctime(change time)
最后一次改变文件或目录(属性)的时间
atime(access time)
最后一次访问文件或目录的时间
mtime(modify time)
最后一次修改文件或目录(内容)的时间
1.2.4目录文件的结构
目录文件的结构
目录也是一种文件
目录文件的结构
每个incode都有一个号码,操作系统用incode号码来识别不同的文件
Linux系统内部不使用文件名,而使用incode号码来识别文件
对于用户,文件名只是incode号码便于识别的别称
1.3inode的号码
用户通过文件名打开文件时,系统内部的过程
1.系统找到这个文件名对应的inode号码
2.通过inode号码,获取inode信息
3.根据inode信息,找到文件数据所在的block,读出数据
查看inode号码的方法
ls -i命令:查看文件名对应的inode号码
ls -i aa.txt
ls -ai 命令查看当前目录的文件及隐藏文件的所对应的inode号码
stat命令:查看某个文件的inode信息而查看到inode号码
stat aa.txt
1.4文件存储小结
硬盘分区后的结构
访问文件的简单流程
1.5inode的大小
●inode也会消耗硬盘空间
每个inode的大小
一般是128字节或256字节
●格式化文件系统时确定inode的总数
●使用df -i命令可以查看每个硬盘分区的inode总数和已经使用的数量
1.6inode的特殊作用
由于inode号码与文件名分离,导致一些Unix/Linux系统具有以下的现象
●当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件
●移动或重命名文件时,只改变文件名,不影响inode号码
●打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名
二、链接文件
●在Linux下面的链接文件有两种:
●一种类似于Windows的快捷方式功能的文件,可以快速连接到目标文件或目录,这种称为软链接
●另一种则是通过文件系统的inode链接文件来产生新的文件名,而不是产生新文件,这种称之为硬链接
2.1为文件或目录建立链接文件
2.1.1硬链接
一般情况下,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名。
但是Linux系统允许,多个文件名指向同一个inode号码。这表示可以用不同的文件名来访问同样的内容。
ln 源文件 目标位置
运行此命令后,源文件和目标文件的inode号码相同,都指向同一个inode。inode信息中的“链接数”此时就会增加1
当一个文件拥有多个硬链接时,对文件内容修改,会影响到所有文件名。但删除一个文件名,不会影响另一个文件名的访问。删除一个文件名,就会使得inode信息中的“链接数”减少1
2.1.2软链接
ln -s 源文件或目录 链接文件或目标位置
软链接就是再创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件的文件名
文件2依赖于文件1而存在,如果删除了文件1 ,打开文件2就会报错
2.2链接文件分类
三、恢复误删除的文件
删除一个文件,实际上并不清除 inode 节点和 block 的数据,只是在这个文件的父目录里面的 block 中删除这个文件的名字。Linux 是通过 Link 的数量来控制文件删除的,只有 当一个文件不存在任何 Link 的时候,这个文件才会被删除。 在 Linux 系统运维工作中,经常会遇到因操作不慎、操作错误等导致文件数据丢失的情况,尤其对于客户企业中一些新手。
3.1恢复EXT文件系统
1.编译安装extundelete
第一步,
先安装两个依赖包 e2fsprogs-libs 和 e2fsprogs-devel, 这两个包在系统安装光盘的/Package 目录下就有,安装wget,使用wget去现网下载extundelete 软件包。
yum -y install e2fsprogs-libs、e2fsprogs-devel、wget
wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
e2fsprogs-devel 安装依赖于 libcom_err-devel 包。
第二步,
安装完依赖包之后,再解压、配置、编译、安装。
tar jxf 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/* /usr/sbin/
第三步,实验验证,格式化后一个分区后挂载到目录,在目录中创建几个文件,删除两个文件
先取消挂载,防止新数据写入将误删数据覆盖掉,
使用软件恢复,extundelete /dev/sdb1 --restore-all
在/root中找到恢复的文件存放处:RECOVERED_FILES
也可以使用“extundelete /dev/sdb1 --inode 2”查看文件系统/dev/sdb1 下存在哪些文件,
具体的使用情况。其中–inode 2 代表从 i 节点为 2 的文件开始查看,一般文件系统格式化挂 载之后,
i 节点是从 2 开始的,2 代表该文件系统最开始的目录。
[[email protected] data]# extundelete /dev/sdb1 --inode 2
3.2 xfs 类型文件备份和恢复
extundelete 工具仅可以恢复 EXT 类型的文件,无法恢复 CentOS 7 系统默认采用 xfs 类型的文件。针对 xfs 文件系统目前也没有比较成熟的文件恢复工具,所以建议提前做好数 据备份,以避免数据丢失。xfs 类型的文件可使用 xfsdump 与 xfsrestore 工具进行备份恢复。若系统中未安装 xfsdump与xfsrestore工具,可以通过yum install -y xfsdump命令安装。xfsdump 按照inode 顺序备份一个 xfs 文件系统。
xfsdump 的备份级别有两种:0 表示完全备份;1-9 表示增量备份。
xfsdump 的备份级别默认为 0。
xfsdump 的命令格式为:xfsdump -f 备份存放位置要备份路径或设备文件。常用的备份参数包括以下几种:
-f:指定备份文件目录;
-L:指定标签 session label;
-M:指定设备标签 media label;
-s:备份单个文件,-s 后面不能直接跟路径
3.2.1xfsdump命令格式
xfsdump命令格式
xfsdump -f 备份存放位置 要备份的路径或者设备文件
xfsrestore命令格式
xfsrestore -f 恢复文件的位置 存放恢复后文件的位置
3.2.2xfsdump使用限制
●只能备份已挂载的文件系统
●必须使用root的权限才能操作
●只能备份xfs文件系统
●备份后的数据只能用xfsrestore解析
●不能备份两个具有相同UUID的文件系统
3.2.3备份和恢复步骤
1.先格式化一个分区 mkfs.xfs /dev/sdb1 (如果该分区已经被格式化过,需要加- f 强制格式化)
将其挂载到/1目录中,mount /dev/sdb1 /1
2.准备需要备份和恢复实验需要的文件
[[email protected] ~]# cp /etc/passwd /1
[[email protected] 1]# mkdir /1/2
[[email protected] 1]# echo “this is test”>/1/2/test.txt ###复制和创建写入些数据到/1目录中,用于恢复数据实验
[[email protected] 1]# yum -y install tree ###安装tree软件查看/1目录树
[[email protected] 1]# tree /1
/1
├── 2
│ └── test.txt
└── passwd
3.备份
[[email protected] 1]# yum -y install xfsdump ###安装所需软件
[[email protected] 1]# xfsdump -f /opt/xfs_dump /dev/sdb1 ###将/dev/sdb1分区备份到/opt/xfs_dump(会出现交互性界面让我们确认备份到的位置和需要备份的文件 -> xfs_dump和 -> /dev/sdb1)
4.恢复
[[email protected] 1]# rm -rf /1/* ###删除/1目录中的内容准备恢复
[[email protected] 1]# xfsrestore -f /opt/xfs_dump /1 ###恢复/opt/xfs_dump的数据到/1中
**四、**日志文件的分类
4.1 日志的功能
●用于记录系统,程序运行中发生的各种事件
●通过阅读日志,有助于诊断和解决系统故障
4.2 日志文件的分类
●内核及系统日志
由系统服务rsyslog统一进行管理,日志格式基本相似
●用户日志
记录系统用户登录及退出系统的相关信息
●程序日志
由各种应用程序独立管理的日志文件,记录格式不统一
4.3 日志保存位置
默认位于:/var/log目录下
4.4 主要日志文件介绍
/var/log/messages:记录Linux内核消息和各种应用程序的公共日志信息,包括启动,I/O错误,网络错误,程序故障等
对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的时间记录信息
/var/log/cron:记录crond计划任务产生的事件信息
/var/log/dmesg:记录Linux系统在引导过程中的各种事件信息
/var/log/maillog:记录进入或发出系统的电子邮件活动
/var/log/lastlog:记录每个用户最近的登录时间
/var/log/secure:记录用户认证相关的安全事件信息
/var/log/wtmp:记录每个用户登录,注销及系统启动和停机事件
/var/log/btmp:记录失败的,错误的登录尝试及验证事件
yum安装的都存放在/var/log/yum.log中;手工编译安装的都是自己指定的目录
**五、**日志文件分析
●分析日志文件的目的在于通过浏览日志查找关键信息,对系统服务进行调试,以及判断发生故障的原因等
●对于大多数文本格式的日志文件(如内核及系统日志,大多数的程序日志),只要使用tail,more,less,cat等文本处理工具就可以查看日志内容
●对于一些二进制格式的日志文件(如用户日志),需要使用特定的查询命令
5.1****内核及系统日志
5.1.1由系统服务rsyslogd统一管理
软件包:rsyslog-7.4.7-16.el7.x86_64
主要程序:/sbin/rsyslogd
配置文件:/etc/rsyslog.conf
5.1.2日志消息的级别
5.1.3日志记录的一般格式
5.3用户日志分析
5.2.1保存目录
保存了用户登录,退出系统等相关信息
/var/log/lastlog:最近的用户登录事件
/var/log/wtmp:用户登录,注销及系统开,关机事件
/var/log/utmp:当前登录的每个用户的详细信息
/var/log/secure:与用户验证相关的安全性事件
5.2.2分析工具
分析工具
users,who,w,last,lastb
查询当前登录的用户情况:users,who,w命令
users命令只简单的输出当前登录的用户名称,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数
who命令用户报告当前登录到系统中的每个用户的信息
who命令的默认输出包括用户名,终端类型,登录日期及远程主机,从而系统管理员可以查看当前系统存在哪些不合法用户
w命令用于显示当前系统中的每个用户及其所运行的进程信息,比users,who命令的输出内容要更加丰富一些
查询用户登录的历史记录:last,lastb命令
last命令用于查询成功登录到系统的用户记录,最近的登录情况将显示在最前面
通过last命令可以及时掌握Linux主机的登录情况,若发现未经授权的用户登录过,则表示当前主机可能已被入侵
lastb命令用于查询登录失败的用户记录,如登录的用户名错误,密码不正确等情况都会记录在案。
登录失败的情况属于安全事件,因为这表示可能有人在尝试猜出你的密码
除了使用lastb命令查看以外,还可以直接从安全日志文件/var/log/secure中获得相关信息
5.3 程序日志
5.3.1由相应的程序独立进行管理
web服务:/var/log/httpd/
access_log,error_log(httpd网站服务程序使用的两个日志文件access_log和error_log,分别记录客户访问事件,错误事件。)
代理服务:/var/log/squid/
access.log , cache.log
FTP服务:/var/log/xferlog
5.3.2分析工具
文本查看,grep过滤检索,webmin管理套件中查看
awk,sed等文本过滤,格式化编辑工具
webalizer,awstats等专用日志分析工具
5.3.3日志管理策略
●及时做好备份和归档
●延长日志保存期限
●控制日志访问权限
日志中可能会包含各类敏感信息,如账户,口令等
●集中管理日志
将服务器的日志文件发到统一的日志文件服务器
便于日志信息的统一收集,整理和分析