深入理解Linux文件系统和日志分析

目录

一、inode于block

1)inode于block概述

2)inode的内容

inode包含文件的元信息

 用stat命令可以查看某个文件的inode信息

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

目录文件的结构

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

查看inode号码的方法 

硬盘分区后的结构

3)inode的大小

indoe号的数量是文件数量的限制

4)inode的特殊作用

5)执行文件命令对indoe号的影响

cp命令

rm命令

mv命令

vim编辑器 

利用echo命令往文件中加内容 

6)通过indoe号删除rm常规方法删除不掉的文件

总结 

二、硬链接和软连接

1)链接文件

链接文件分类

三、恢复误删除的文件

1)恢复EXT类型的文件

编译安装extundelete软件包

模拟删除并执行恢复操作

2)xfs类型文件备份和恢复

xfsdump命令格式 

xfsdump备份级别(默认为0)

xfsdump常用选项

xfsdump使用限制

xfsrestore命令格式

模拟删除并执行恢复操作

3)示例extundelete

环境列举 

①安装extundelete 以及涉及到的工具

②删除ext3文件系统中的文件

③恢复删除ext3文件系统中的文件

④查看结果

4)xfs 类型文件备份和恢复

①创建xfs系统文件环境

②备份整个分区

③模拟数据丢失 

④恢复操作 

实验总结

总结

四、分析日志文件

1)日志的功能

2)日志文件的分类及其说明

日志分类表

3)日志主要配置文件

设备字段说明

Linux系统内核日志消息 

4)日志分析工具的引入

5)程序日志分析:由相应的应用程序独立进行管理 

Web服务:/var/log/httpd/

代理服务:/var/log/squid/

6)journalctl日志管理工具

①查看所有日志

②查看某个服务的日志

③查看指定进程的日志

④查看指定用户的日志

⑤journalctl其他选项的作用

总结


一、inode于block

1)inode于block概述

在Linux 系统中一切皆文件,因此目录也是一种文件。一个文件的文件名是放在目录中的,文件数据存储在block(块)中,存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域就叫做inode。因此,一个文件必须占用一个 inode,并且至少占用一个 block

  • 文件数据包元信息与实际数据
  • 文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节
  • block(块)
  1. 连续的八个扇区组成一个block(4K)
  2. 是文件存取的最小单位
  • inode(索引节点)
  1. 中文译名为“索引节点”,也叫i节点
  2. 用于存储文件元信息

用户访问一个文件的简单流程:

  1. 用户访问文件时
  2. 通过文件名找到对应的inode号
  3. 通过Inode号获取inode信息,
  4. 根据inode信息判断用户是否有权限访问文件
  5. 有则指向对于的数据block并读取数据,无则拒绝访问

用户在创建一个文件后,这个文件就会生成一个相对应的inode号,文件中的文件名和文件数据是分开存放的,系统根据inode号来寻找真实数据

2)inode的内容

inode包含文件的元信息

  • inode number 节点号
  • 文件类型
  • 文件的读、写、执行权限
  • 文件属主的UID
  • 文件属组的GID
  • 链接数(指向这个文件名路径名称个数)
  • 该文件的大小和不同的时间戳
  • 指向磁盘上文件的数据块指针
  • 有关文件的其他数据

 用stat命令可以查看某个文件的inode信息

ls  -i    
 
stat  文件路径

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

  • atime(access time):最近访问

    最后一次访问文件的时间

  • mtime(modify):最近更改

    最后一次更改文件内容的时间

  • ctime(change time):最近改动

    最后一次改变文件元信息的时间

ps:

  • 不打开文件的话,atime不变。例如使用echo追加内容,atime不会变,因为文件没有被打开访问
  • 修改文件内容的话,mtime会变,ctime也会变
  • 如果只修改文件的权限,ctime变,mtime不变

目录文件的结构

  • 目录也是一种文件
  • 目录文件的结构
文件名1inode号码1
文件名2inode号码2
…………

ps:每一行称为一个目录项 

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

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

  1. 系统找到这个文件名对应的inode号码
  2. 通过inode号码,获取inode信息
  3. 根据inode信息,找到文件数据所在的block,读出数据

查看inode号码的方法 

ls -i命令:查看文件名对应的inode号码

ls -i aa.txt

stat命令:查看文件inode信息中的inode号码

stat aa.txt

硬盘分区后的结构

3)inode的大小

inode也会消耗硬盘空间

  • 每个inode的大小
  • 一般时128字节或256字节

格式化文件系统时确认inode的总数

使用df -i命令可以查看每个硬盘分区的inode总数和已使用的数量

indoe号的数量是文件数量的限制

mount /dev/sdb1 /shiyan   //创建一个分区,文件系统类型为ext4  ,挂载到新创文件夹
cd  /shiyan               //切换到挂载的文件夹
df -i                     //查看空余的indoe号
 
for ((i=1;i<=1270;i++))
do 
touch file$i
done
                          //脚本创建1270个文件,占满所有的indoe号

 
df -i     //再次查看可用indoe号
touch a   //尝试创建一个新文件
df -h     //查看可用空间

结论:一个分区能够创建多少个空文件,除了取决于它的容量之外,还和它所拥有的indoe号息息相关,indoe号的数量决定文件的最大数量上限

4)inode的特殊作用

由于inode号码与文件名分离,导致一些Unix/Linux系统具有以下的现象

  • 当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件
  • 移动或重命名文件时,只改变文件名,不影响inode号码
  • 打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名 

5)执行文件命令对indoe号的影响

cp命令

分配一个空闲的inode号,在inode表中生成新条目在目录中创建一个目录项,将名称与inode编号关联拷贝数据生成新的文件

rm命令

硬链接数递减,从而释放的inode号可以被重用,块放在空闲列表中,删除目录项

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

mv命令

如果mv命令的目标和源在同一设备,不影响inode表(除时间戳)或磁盘上的数据位置;系统会删除旧的目录对应关系,新建目录对应关系。

vim编辑器 

vim编辑器改变文件内容,是先创建一个新的swp文件,编辑的内容也是在swp文件中进行,当用户保存时,swp文件就会替换当前文件,因此indoe号会发生改变 

利用echo命令往文件中加内容 

对原文件进行操作,只改变原文件的内容,其他没有任何影响,indoe号不发生改变 

6)通过indoe号删除rm常规方法删除不掉的文件

 find /opt  -inum 67320322 -delete
 find /opt  -inum 67320322 -exec rm -rf {} \;
                                                
 find /opt  -inum 67320322| xargs rm -rf

 

总结 

扇区:硬盘的最小存储单位 512B

块block 文件存取的最小单位 通常由连续8个扇区组成 4069B

文件 —>文件名 —> 目录 —>文件名 与 inode号的对应关系

元信息 —> inode —>除了文件名以外的属性

实际数据 —> 块block —>文件内容

访问文件 —>通过文件名找到inode号 —>通过inode号获取inode信息 —>根据inode信息判断用户是否具有访问权限 —>获取文件数据所在的block,读取数据(如果没有权限,则拒绝访问)

文件的时间

atime mtime ctime

查看inode号

stat 文件

ls -i 文件


二、硬链接和软连接

1)链接文件

为文件或目录建立链接文件

链接文件分类

软连接(符号链接)硬链接
删除原文件后失效仍旧可用
使用范围适用于文件或目录只可用于文件
保存位置与原始文件可以位于不同的文件系统中必须与原始文件在同一个文件系统(如一个Linux分区)内

硬链接

ln 源文件 目标位置

软链接

ln [-s] 源文件或目录…… 链接文件或目标文件位置

三、恢复误删除的文件

1)恢复EXT类型的文件

编译安装extundelete软件包

  • 安装依赖包

  • 配置、编译及安装

模拟删除并执行恢复操作

2)xfs类型文件备份和恢复

xfsdump命令格式 

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

xfsdump备份级别(默认为0)

0:完全备份

1-9:增量备份

xfsdump常用选项

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

xfsdump使用限制

  1. 只能备份已挂载的文件系统
  2. 必须使用root的权限才能操作
  3. 只能备份XFS文件系统
  4. 备份后的数据只能让xfsrestore解析
  5. 不能备份两个具有相同UUID的文件系统(可用blkid命令查看)

xfsrestore命令格式

xfsrestore -f 恢复文件的位置 存放恢复后文件的位置

模拟删除并执行恢复操作

3)示例extundelete

extundelete 是一个开源的 Linux 数据恢复工具,支持 ext3、ext4文件系统。(ext4只能在centos6版本恢复),本示例模拟ext3文件系统损坏,借助extundelete,修复文件数据

环境列举 

wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2  

所需依赖包: yum -y install e2fsprogs-devel e2fsprogs-libs

该软件涉及到c++,所以安装一个c++编译工具: yum install -y gcc gcc-c++ make

准备一台centos 的虚拟机,新添加一块硬盘,开辟出一块主分区,建立ext3文件系统。(本次实验是要centos7运行)

fdisk /dev/sdb
mkfs.ext3 /dev/sdb1
mkdir /test
mount /dev/sdb1  /test
lsblk

安装extundelete 以及涉及到的工具

yum -y install e2fsprogs-devel e2fsprogs-libs

 

cd /test
wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2

 

tar xf extundelete-0.2.4.tar.bz2 
cd extundelete-0.2.4/
yum install -y gcc gcc-c++ make

./configure --prefix=/usr/local/extundelete && make && make install
ln -s /usr/local/extundelete/bin/* /usr/bin/

②删除ext3文件系统中的文件

echo 123>a.txt
echo 123>b.txt   //创建两个文件 ab  ,写入数据

extundelete /dev/sdb1 --inode 2
//查看文件系统/dev/sdb1下存在哪些文件,i 节点是从 2 开始的,2 代表该文件系统最开始的目录。

rm -rf a.txt
rm -rf b.txt        //将两个ext3文件删除

③恢复删除ext3文件系统中的文件

umount /test
extundelete /dev/sdb1 --restore-all
 

④查看结果

ls
ls RECOVERED_FILES/

实验结论: 以上实验来看,文件最后并没有恢复成功,这个工具也连续用了几次,都是概率性的恢复文件,无法确保文件的百分百恢复。所以对文件做备份,一定是最优的选择

4)xfs 类型文件备份和恢复

CentOS 7 系统默认采用 xfs类型的文件,xfs 类型的文件可使用 xfsdump 与 xfsrestore 工具进行备份恢复,目前市面上并没有开源的xfs文件恢复工具,但是利用备份恢复依旧是最优的选择方案。本次实验就是模拟对重要的xfs文件进行备份,在误删后,进行恢复

①创建xfs系统文件环境

#使用fdisk创建分区/dev/sdb1,格式化xfs文件系统
fdisk /dev/sdb
partprobe /dev/sdb
mkfs.xfs [-f] /dev/sdb1
mkdir /date
mount /dev/sdb1 /date/
cd /data
cp /etc/passwd ./
mkdir test
touch test/a

②备份整个分区

#使用 xfsdump 命令备份整个分区
 
xfsdump -f /opt/dump_sdb1 /dev/sdb1 [-L dump_sdb1 -M sdb1]
 
#如果没有xfsdump 
rpm -qa | grep xfsdump
yum install -y xfsdump

③模拟数据丢失 

#模拟数据丢失并使用 xfsrestore 命令恢复文件
cd /data/
rm -rf ./*
ls

④恢复操作 

xfsrestore -f /opt/dump_sdb1 /date/

实验总结

对创建好的文件系统进行一整个分区的备份,存放在足够的空间中。当该分区中的重要文件被误删后,可以利用备份分区,进行数据还原。

总结

两个实验都展示了重要数据丢失后的恢复手段,但是第二个实验比第一个完成的更加顺利,数据保存的更加完整。在运维环境中,一定要本着数据无价的态度来进行工作,对重要的数据文件进行好备份处理 

误删恢复

extundelete

lsof

备份恢复

tar

xfsdump xfsrestore

cpio find ……|cpio -ocvB>……

cpio -idvcu <


四、分析日志文件

1)日志的功能

  • 用于记录系统、程序运行中发生的各种事件
  • 通过阅读日志,有助于诊断和解决系统故障

2)日志文件的分类及其说明

Linux 操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/log/下

内核及系统日志

  • 由系统服务rsyslog统一进行管理,日志格式基本相似
  • 主配置文件/etc/rsyslog.conf

用户日志

  • 记录系统用户登录及退出系统的相关信息

程序日志

  • 由各种应用程序独立管理的日志文件,记录格式不统一

日志分类表

日志种类位置功能描述
内核及公共消息日志/var/log/messages

记录Linux内核消息及各种应用程序的公共日志信息,包括启动、Io错误、网络错误、程序故障等

对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息

计划任务日志/var/log/cron记录与系统定时任务相关的曰志
系统引导日志/var/log/dmesg记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息
邮件系统日志/var/log/maillog记录邮件信息的曰志
用户登录日志/var/log/lastlog记录系统中所有用户最后一次的登录时间的曰志。这个文件是二进制文件.不能直接用 vi 查看,而要使用 lastlog 命令查看
用户验证授权日志/var/log/secure记录验证和授权方面的倍息,只要涉及账户和密码的程序都会记录。比如系统的登录、ssh的登录、su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中
用户登录注销和系统开机相关日志/var/log/wtmp永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样,这个文件也是二进制文件,不能直接用 vi 查看,而要使用 last 命令查看
当前登录用户信息日志/var/run/utmp记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。同样,这个文件不能直接用 vi 查看,而要使用w、who、users等命令查看
more  /var/log/messages    //以查看message目录为例子

内核及系统日志文件中的每一行表示一条信息,每个信息由4个字段的固定格式组成:

时间标签:消息发出的日期和时间

主机名:生成消息的计算机的名称

子系统名称:发出消息的应用程序的名称

消息:消息的具体内容

3)日志主要配置文件

内核及系统日志由系统服务 rsyslog 统一管理,主配置文件为/etc/rsyslog.conf 

vim /etc/rsyslog.conf                   #查看rsyslog.conf配置文件

规则配置格式:【设备.级别 动作】

设备字段说明

auth用户认证时产生的日志
authprivssh、ftp等登录信息的验证信息
daemon一些守护进程产生的日志
ftpFTP产生的日志
lpr打印相关活动
markrsyslog服务内部的信息,时间标识
news网络新闻传输协议(nntp)产生的消息
syslog系统日志
uucpUnix-to-Unix Copy 两个unix之间的相关通信
console针对系统控制台的消息
cron系统执行定时任务产生的日志
kern系统内核日志
local0~local7自定义程序使用
mail邮件日志
user用户进程

Linux系统内核日志消息 

优先级信息名称解释
0EMERG(紧急)会导致主机系统不可用的情况。如系统崩溃
1ALERT(警告)必须马上采取措施解决的问题。如数据库被破坏
2CRIT(严重)比较严重的情况。如硬盘错误,可能会阻碍程序的部分功能
3ERR(错误)运行出现错误。不是非常紧急,尽快修复的
4WARNING(提醒)可能影响系统功能,需要提醒用户的重要事件。不是错误,如磁盘用了85%等
5NOTICE(注意)不会影响正常功能,但是需要注意的事件。无需处理
6INFO(信息)一般信息。正常的系统信息
7DEBUG(调试)程序或系统调试信息等。包含详细开发的信息,调试程序时使用
none没有优先级,不记录任何日志消息

注意:数字等级越小,优先级越高,消息越重要

举例

mail.info /var/log/maillog

//比指定级别更高的日志级别,包括指定级别自身,保存到/var/log/maillog中

mail.=info /var/log/maillog

//明确指定日志级别为info,保存至/var/log/maillog

mail.!info /var/log/maillog

//除了指定的日志级别(info)所有日志级别信息,保存至/var/log/maillog

.info /var/log/maillog

//所有facility的info级别,保存至/var/log/maillog mail. /var/log/maillog :mail的所有日志级别信息,都保存至/var/log/maillog

mail.notice;news.info /var/log/maillog

//mail的notice以上记得日志级别和news的info以上的级别保存至/var/log/maillog

mail,news.crit -/var/log/maillog

//mail和news的crit以上的日志级别保存/var/log/maillog中;“-”代表异步模式

4)日志分析工具的引入

  • users   查看当前用户名称
  • who     查看当前登录的用户、终端、登录时间、IP地址。
  •  W       查看当前登录的用户、终端、IP地址、登录时间、占用CPU的情况、进程等。
  • last      命令用于查询成功登录到系统的用户记录
  • lastb    命令用于查询登录失败的用户记录

5)程序日志分析:由相应的应用程序独立进行管理 

Web服务:/var/log/httpd/

  • access_log ——记录客户访问事件
  • error_log ——记录错误事件

代理服务:/var/log/squid/

  • access.log、cache.log

6)journalctl日志管理工具

journalctl 日志管理工具的简介

日志管理工具journalctl是centos7上专有的日志管理工具,该工具是从messages这个文件里读取信息。 Systemd统一管理所有Unit的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。 日志的配置文件是/etc/systemd/journald.conf

①查看所有日志

#查看所有日志(默认情况下,只保存本次启动的日志)
journalctl
journalctl -r				#-r表示倒序,从尾部看(推荐),可以看最新的

②查看某个服务的日志

#查看某个服务的日志
journalctl -u firewalld.service   

③查看指定进程的日志

#查看指定进程的日志
journalctl _PID=1

④查看指定用户的日志

#查看指定用户的日志
journalctl _UID=0  --since today
 
journalctl -xe  //         -x 是目录(catalog)的意思,在报错的信息下会,附加解决问题的网址
 
                           -e  pager-end 从末尾开始看	

⑤journalctl其他选项的作用

#查看系统本次启动的日志  
journalctl -b [-0]
 
#查看上一次启动的日志(需更改设置,如上次系统崩溃,需要查看日志时,就要看上一次的启动日志)  
journalctl -b -1
 
#显示尾部指定行数的日志 查看的是/var/log/messages的日志,但是格式上有所调整,如主机名格式不一样而已  
journalctl -n 20 [-f]    // -f 实时动态追踪
 
#日志默认分页输出,--no-pager 改为正常的标准输出
  journalctl --no-pager
  
#以 JSON 格式(单行)输出
  journalctl -b -u nginx.service -o json
  
#以 JSON 格式(多行)输出,可读性更好
  journalctl -b -u nginx.serviceqq -o json-pretty
  
#显示日志占据的硬盘空间
  journalctl --disk-usage
  
#指定日志文件占据的最大空间
  journalctl --vacuum-size=1G
  
#指定日志文件保存多久
  journalctl --vacuum-time=1years

总结

1. 能够区分处block和indoe的区别,准确说出它们在文件系统中的身份作用

2. 掌握日志分析中内核日志信息中优先级的意思,以及对应名称(遵循数字越小优先级越大的规则)

3.系统日志 /var/log/messages ,由rsyslog服务来管理,主配置文件 /etc/rsyslog.conf 用户登录日志 /var/log/secure

4.journalctl 可以直接查看 /var/log/messages 日志内容,掌握常用选项  -r  -u   -f

5.日志收集的方案服务器数量较少的: rsyslog shell/python脚本 服务器数量众多: ELK  


  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值