Linux文件系统与日志分析

一、Linux文件系统

1、  inode 与 block

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

1.1  block:(块)的概念

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

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

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

1.3 inode和block的关系

Linux文件系统与日志分析

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

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

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

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

1.4.1 实例操作

Linux文件系统与日志分析

1.5  inode包含文件的元信息(见上图中stat 123.txt展示的信息)

  • 文件的字节数
  • 文件拥有者的User ID
  • 文件的Group ID
  • 文件的读、写、执行权限
  • 文件的时间戳等 

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

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

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

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

1.8 硬盘分区后的结构

Linux文件系统与日志分析

1.9 访问文件的简单流程

Linux文件系统与日志分析

1.10.inode的大小

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

Linux文件系统与日志分析

1.11  inode特点

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

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

 1.11.1 删除inode号的方法:

find ./ -inum 68201002 -exec rm -i {} \;
find ./ inum 68201002 -delete 

  find . /-inum 68201002 | xargs rm -rf

补充知识:

find命令详解

find pathname -option [-print ] [ -exec | -ok command ] {} \;
find命令的参数;
pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为command { } ;,注意{ }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

xargs 命令

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

优点:

       将输入参数整理后,去除<newline>换行符,以一个列表形式处理
       避免参数过长引发的问题,使用xargs -n 参数适当控制,对于经常产生大量输出的命令如find、locate和grep来说非常有用

      xargs 一般是和管道一起使用: 

       XXcomand  | xargs  -x  comand initial-args

 echo "/etc/inittab" | cat   # 直接将标准输入的内容传递给cat
 echo "/etc/inittab" | xargs cat   # 将标准输入的内容经过xargs处理后传递给cat
 find /etc -maxdepth 1 -name "*.conf" -print0 | xargs -0 -i grep "hostname" -l {}  # 将搜索的文件传递给grep的参数位进行搜索,若不使用xargs,则grep将报错

1.11.2 实例操作

1.11.2.1 移动、复制或者重命名文件,看inode号是否有变化(只有复制文件时inode号会发生改变)  

Linux文件系统与日志分析

1.11.2.2 修改文件,看inode号是否会改变(修改之后inode号会改变)

Linux文件系统与日志分析

2、硬链接和软链接

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

2.1 链接文件的分类和对比

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

2.2  软硬链接的格式

        硬链接
	ln  源文件  目标位置

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

3.inode节点耗尽故障处理

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

3.1 操作步骤格式

#使用fdisk创建分区/dev/sdb1,分区大小10M即可
fdisk /dev/ sdb .
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++) ) 
>do 
>touch /test/ file$i
>done
touch {1. . 2549} . txt

df -i
df -hT

#删除文件恢复
rm -rf /data/ *
df -i
df -hT

3.2 实例操作

3.2.1  新增磁盘并分区

Linux文件系统与日志分析

Linux文件系统与日志分析  

 3.2.2 格式化并挂载

Linux文件系统与日志分析

 3.2.3 利用for循环,创建文件,将inode空间占满(模拟inode节点耗尽故障)

 Linux文件系统与日志分析

 3.2.4  删除文件恢复

Linux文件系统与日志分析

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

extundelete是一个 开源的Linux数据恢复工具, 支持ext3、 ext4文件系统。 (ext4只能在centos6版 本恢复)

1、编译安装extundelete软件包

✔ 安装依赖包
◆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

#使用fdisk创建分区/dev/sdc1,格式化ext3文件系统
fdisk /dev/sdb
partprobe /dev/sdb
mkfs.ext3 /dev/ sdb1
mkdir /data
mount /dev/sdb1 /data
df -hT

#安装依赖包
yum -y install e2fsprogs-devel e2 fsprogs-libs

#编译安装extundelete
cd /opt
wget http: //nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2

tar jxvf extundelete-0.2.4.tar.bz2
cd extundelete-0.2.4/
./configure --prefix=/usr/ local/jz/ && make && make install

ln -s /usr/ local/jz/bin/* /usr/bin/

2、模拟删除并执行恢复操作

cd /data
  echo 111 > 123.txt
  echo 222 > 234.txt
  echo 333 > 456.txt
ls
extundelete /dev/sdb1 --inode 2 
#查看文件系统/dev/sdc1下存在哪些文件,i节点是从2开始的,2代表该文件系统最开始的目录

rm-rf 123.txt  234.txt  456.txt
extundelete /dev/sdd1 -- inode 2
cd ~
umount /data/
extundelete /dev/sdb1 --restore-all
#恢复/dev/sdc1文件系统下的所有内容

#在当前目录下会出现一-个RECOVERED_ FILES/目录,里面保存了已经恢复的文件
ls RECOVERED_FILES/

3.实例操作

3.1 添加一块20G的硬盘,并进行分区

Linux文件系统与日志分析  

 Linux文件系统与日志分析

3.2 对分区进行格式化并进行挂载

Linux文件系统与日志分析

Linux文件系统与日志分析

3.3 安装两个依赖包

Linux文件系统与日志分析

3.4 extundelete的安装包的传输以及解压

Linux文件系统与日志分析

Linux文件系统与日志分析

3.5 编译安装

Linux文件系统与日志分析

3.6 在挂载目录下创建文件以及内容,并查看

Linux文件系统与日志分析

Linux文件系统与日志分析

3.7 删除新建文件,并进行查看是否已删除(模拟故障)

Linux文件系统与日志分析

3.7 解除挂载并恢复文件

Linux文件系统与日志分析

Linux文件系统与日志分析

三、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命令查看)

5.操作步骤命令:

#使用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/

6 实例操作

6.1 新增磁盘,并进行主区划分

Linux文件系统与日志分析 

Linux文件系统与日志分析

6.2 对新增磁盘分区进行格式以及挂载

Linux文件系统与日志分析

6.3 新建文件内容以便后面测试使用

Linux文件系统与日志分析

6.4 查看程序是否安装,指定备份目录和需要备份的磁盘

Linux文件系统与日志分析

6.5 删除创建的文件并进行恢复测试

Linux文件系统与日志分析

三、日志文件

1、 日志的功能

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

2、 日志文件的分类

2.1 内核及系统日志

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

2.2 用户日志.

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

2.3  程序日志

◆由各种应用程序独立管理的日志文件,记录格式不统一
(由开发人员定义)

3、 日志保存位置

默认位于: /var/log目录下

4、 主要日志文件介绍

4.1 内核及公共消息日志

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

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

4.2 计划任务日志

✔ /var/log/cron
记录crond计划任务产生的事件信息

4.3 系统引导日志

✔ /var/log/dmesg
记录Linux系统在引导过程中的各种事件信息

4.4 邮件系统日志

✔ /var/log/maillog
记录进入或发出系统的电子邮件活动

4.5 用户登录日志

✔ /var /log/lastlog
记录每个用户最近的登录事件,二进制格式

✔ /var/log/secure
记录用户认证相关的安全事件信息

✔ /var/log/wtmp
记录每个用户登录、注销及系统启动和停机事件,二进制格式

✔ /var/run/btmp
记录失败的、错误的登录尝试及验证事件,二进制格式

5、日志配置文件和日志消息等级

5.1 日志配置文件

vim /etc/rsyslog.conf					#查看rsyslog.conf配置文件
* . info;mail.none;authpriv.none;cron.none	/var/log/messages
*.info			#表示info等级及以上的所有等级的信息都写到对应的日志文件里
mail.none		#表示某事件的信息不写到日志文件里(这里比如是邮件)

5.2 Linux系统内核日志消息的优先级别(数字等级越小,优先级越高,消息越重要):

级别 消息  级别  具体描述
0 EMERG  紧急 会导致主机系统不可用的情况
1 ALERT 警告 必须马上采取措施解决的问题
2 CRIT 严重  比较严重的情况
3 ERR  错误  运行出现错误
4 WARNING  提醒  可能影响系统功能,需要提醒用户的重要事件
5 NOTICE  注意 不会影响正常功能,但是需要注意的事件
6 INFO 信息 一般信息
7 DEBUG 调试 程序或系统调试信息等

 6.日志记录的一般格式

Linux文件系统与日志分析

7.分析工具

  • users、who、 W、last、 lastb

  • last命令用于查询成功登录到系统的用户记录

  •  lastb命令用于查询登录失败的用户记录

 Linux文件系统与日志分析

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

Web服务:/var/log/httpd/

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

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

  • access.log、cache.log

分析工具

  • 文本查看、grep过来检索、Webmin管理套件中查看
  • awk、sed等文本过滤、格式化编辑工具
  • Webalizer、Awstats等专用日志分析工具

9.日志管理策略

及时做好备份和归档

延长日志保存期限

控制日志访问权限

  • 日志中可能会包含各类敏感信息,如账户和口令等

集中管理日志

  • 将服务器的日志文件发到统一-的日志文件服务器
  • 便于日志信息的统- -收集、 整理和分析
  • 杜绝日志信息的意外丢失、恶意篡改或删除
上一篇:Linux 私房菜————Linux系统基本操作命令(十四)|文件系统|inode节点|ext类型文件恢复|xfs类型文件恢复


下一篇:Dubbo 的设计思想,真优秀!