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

inode与block

block的作用:用来存真正的数据内容的

我们每个扇区(sector)的大小规定是512B,系统在读取硬盘数据时,并不会一个个扇区去读,而是一次性连续读取多个扇区,即一次性读取一个块(block),这种由多个扇区组成的块,是文件存取中最小单位。快的大小,最常见的是4KB,即连续8个sector组成一个block。

inode的作用:用来存数据的元信息,所谓元信息指的就是该数据的一些属性,特性。

那我们的inode可以记录的信息有哪些呢?可以是文件权限(rwx)的记录,文件的属主、属组,文件大小,时间戳等。这种存储文件元信息的区域就叫做indoe,中文译名为“索引节点”,也叫i节点。因此,一个文件必须占用一个inode,但至少占用一个block。
注:inode中并不包括文件名,其实文件名是存放目录当中的。Linux系统中一切皆文件,因此目录也是一种文件,即查看目录的文件,cd转目录后通过ls列目录可以查看文件名,而我们每个inode都有一个号码,系统用inode号码识别不同的文件,系统内部不使用文件名,而使用inode号码来识别文件。

inode时间戳中改变(change)和更改(modify)的区别

Change 改变(状态或属性)
对一个文件或者目录作mv、chown、chgrp操作后,它的Change时间记录被更新,change时间会受到modify行为的影响。用ls -lc看到的文件时间是最近一次change的时间。

Modify 意思是“更改(内容)“,或者“写入”。
当更改了一个文件的内容的时候,此文件的modify的时间记录会被更新。用ls -l看到的文件时间是最近一次modify的时间。
modify的行为是三个行为中最有影响力的行为,它发生以后,会使文件的access记录与change记录也同时得到更新。对于目录也是如此。

inode和block概述

文件数据包括元信息与实际数据
文件存储在硬盘上,硬盘最小的存储单位是“扇区”,每个扇区存储512个字节
block(块)

连续的八个扇区组成一个block 
是文件存取的最小单位

inode(索引节点)

中文译名为“索引节点”,也叫i节点
用于存储文件元信息

在这里插入图片描述
indoe的内容
inode包含文件的元信息

文件的字节数
文件拥有者的User ID(属主) (不包含文件名)
文件的Group ID(属组)
文件的读、写、执行权限
文件的时间戳

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

查看存储信息
在opt目录下创建一个目录,并在该目录下创建文件
[root@server2 ~]# cd /opt/
[root@server2 opt]# ls
rh
[root@server2 opt]# mkdir abc
[root@server2 opt]# touch aaa.txt
[root@server2 opt]# ls -lh   //此时查看到aaa.txt的index节点只有一个,abc目录是有两个节点,
总用量 0
-rw-r--r--. 1 root root 0 1214 22:06 aaa.txt
drwxr-xr-x. 2 root root 6 1214 22:06 abc
drwxr-xr-x. 2 root root 6 326 2015 rh

abc目录的两个节点
[root@server2 opt]# cd abc/
[root@server2 abc]# ls
[root@server2 abc]# ls -a
.  ..

[root@server2 abc]# cd ../
[root@server2 opt]# ls -i   //查看indoe节点号(如:842433等)
  842433 aaa.txt  36066986 abc  36017101 rh

 [root@server2 opt]# stat aaa.txt     //查看详细信息
  文件:"aaa.txt"
  大小:0         	块:0          IO 块:4096   普通空文件
设备:803h/2051d	Inode:842433      硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:usr_t:s0
最近访问:2020-12-14 22:06:15.298009656 +0800
最近更改:2020-12-14 22:06:15.298009656 +0800
最近改动:2020-12-14 22:06:15.298009656 +0800
创建时间:-

[root@server2 opt]# ln aaa.txt a01.txt  //将aaa.txt文件建成a01.txt文件
[root@server2 opt]# ls -lh
总用量 0
-rw-r--r--. 2 root root 0 1214 22:06 a01.txt
-rw-r--r--. 2 root root 0 1214 22:06 aaa.txt
drwxr-xr-x. 2 root root 6 1214 22:06 abc
drwxr-xr-x. 2 root root 6 326 2015 rh
[root@server2 opt]# ls -i  //查看a01.aaa两个文件共用一个元信息位置
  842433 a01.txt    842433 aaa.txt  36066986 abc  36017101 rh

[root@server2 opt]# stat aaa.txt   //此时查看的硬链接块有2个
  文件:"aaa.txt"
  大小:0         	块:0          IO 块:4096   普通空文件
设备:803h/2051d	Inode:842433      硬链接:2
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:usr_t:s0
最近访问:2020-12-14 22:06:15.298009656 +0800
最近更改:2020-12-14 22:06:15.298009656 +0800
最近改动:2020-12-14 22:14:02.196983830 +0800
创建时间:-

linux系统文件三个主要的时间属性(查看和修改时,所有的时间戳会相应发生变化)

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

验证:

[root@www ~]# vi a.txt
[root@www ~]# stat a.txt 
  文件:"a.txt"
  大小:18        	块:8          IO 块:4096   普通文件
设备:803h/2051d	Inode:100665079   硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-09-03 14:33:40.955817510 +0800
最近更改:2020-09-03 14:33:40.955817510 +0800
最近改动:2020-09-03 14:33:40.955817510 +0800
创建时间:-

[root@www ~]# cat a.txt 
enfknkl
s

sdcsvc
[root@www ~]# stat a.txt 
  文件:"a.txt"
  大小:18        	块:8          IO 块:4096   普通文件
设备:803h/2051d	Inode:100665079   硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-09-03 14:34:04.803816149 +0800
最近更改:2020-09-03 14:33:40.955817510 +0800
最近改动:2020-09-03 14:33:40.955817510 +0800
创建时间:-

[root@www ~]# vi a.txt
[root@www ~]# stat a.txt 
  文件:"a.txt"
  大小:22        	块:8          IO 块:4096   普通文件
设备:803h/2051d	Inode:101835360   硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-09-03 14:34:51.931813460 +0800
最近更改:2020-09-03 14:34:51.931813460 +0800
最近改动:2020-09-03 14:34:51.939813460 +0800
创建时间:-

[root@www ~]# chown xwy a.txt 
[root@www ~]# stat a.txt 
  文件:"a.txt"
  大小:22        	块:8          IO 块:4096   普通文件
设备:803h/2051d	Inode:101835360   硬链接:1
权限:(0644/-rw-r--r--)  Uid:( 1000/     xwy)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-09-03 14:34:51.931813460 +0800
最近更改:2020-09-03 14:34:51.931813460 +0800
最近改动:2020-09-03 14:35:44.877810439 +0800
创建时间:-

目录文件的结构

目录也是一种文件
目录文件的结构

在这里插入图片描述

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

inode的号码

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

查看inode号码的方法

ls -i命令:查看文件名对应的inode号码
[root@www ~]# ls -i a.txt 
101835360 a.txt
stat命令:查看文件inode信息中的inode号码
stat aa.txt

附加
在这里插入图片描述
结论:数据存储时候是按区块存储,删除文件时这个inode号码被回收,被下一个文件适用,在做实验过程中发现这个inode号码随着新建删除,删除后再新建,如此反复三次后,新建新文件居然还是这个inode号码。

查看文件类型:

一:
[root@server2 opt]# file aaa.txt   //查看文件类型
aaa.txt: empty  //此时为空
[root@server2 opt]# echo "this is aaa" > aaa.txt //重定向将内容添加到aaa文件中
[root@server2 opt]# file aaa.txt  //再次查看文件类型
aaa.txt: ASCII text   //表示属于text文件,内容为ASCII码形式

[root@server2 opt]# file abc/  //查看文件类型,显示为目录
abc/: directory

二:
[root@server2 opt]# ls -l
总用量 8
-rw-r--r--. 2 root root 12 1214 22:20 a01.txt
-rw-r--r--. 2 root root 12 1214 22:20 aaa.txt
drwxr-xr-x. 2 root root  6 1214 22:06 abc
drwxr-xr-x. 2 root root  6 326 2015 rh
前面-:代表普通的数据文件  d:代表目录

文件存储小结
硬盘分区后的结构(后者是存储前者的位置)
在这里插入图片描述
访问文件的简单流程
在这里插入图片描述
inode也会消耗硬盘空间
每个inode的大小
一般是128字节或256字节
格式化文件系统时确定inode的总数
使用df -i命令可以查看每个硬盘分区的indoe总数和已经使用的数量
关于inode节点耗尽的实验
磁盘空间设小,inode数据小
1.正常对一块磁盘分区、格式化、挂载。

[root@serverl ~]# fdisk -l
[root@serverl ~]# fdisk /dev/sdb
命令(输入 m 获取帮助):n
Select (default p): p
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039)+1M
分区 1 已设置为 Linux 类型,大小设为 1 MiB
命令(输入 m 获取帮助):p
设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048        4095        1024   83  Linux
命令(输入 m 获取帮助):wq
[root@serverl ~]# mkfs.ext4 /dev/sdb1
[root@serverl ~]# mkdir /data
[root@serverl ~]# mount /dev/sdb1 /data/

2.df -i /挂载点 查看该挂载点的inode点的可用数量 (inode节点是用来创建文件的)

[root@serverl ~]# df -i
最后一行/dev/sdb1           128      11      117       9% /data
[root@serverl ~]# df -Th    查看磁盘空间
/dev/sdb1      ext4     1003K   21K  911K    3% /data

3.vi 一个shell文件,具体内容如下:(le表示小于等于,i指变量 while循环)

[root@serverl ~]# vi kill.sh
#!/bin/bash
i=1
while [ $i -le 117 ]
do
touch /data/file$i
let i++
done
赋予kill.sh文件执行权限[root@serverl ~]# vi kill.sh
[root@serverl ~]# ./kill.sh
[root@serverl ~]# cd /data
[root@serverl data]# ls -lh
发现data目录下创建了许多新文件

4.然后再df -i查询下inode可用数量还有没有

[root@serverl ~]# df -i
/dev/sdb1           128     128        0     100% /data
发现inode数量以用尽

5.确认inode数量没有后,我们再touch一个新文件,看看会是什么结果
因为一个文件必须占用一个inode,所有当inode耗尽时,无法创建新文件

[root@serverl ~]# cd /data/
[root@serverl data]# touch a 
touch: 无法创建"a": 设备上没有空间
[root@serverl data]# df -Th  (发现还有空间,实际上是inode节点耗尽了,才导致无法创建文件)
/dev/sdb1      ext4     1003K   24K  908K    3% /data

解决办法

[root@serverl data]# rm -rf file*
[root@serverl data]# ls -lh
总用量 12K
drwx------. 2 root root 12K 93 15:34 lost+found
[root@serverl data]# df -i
/dev/sdb1           128      11      117       9% /data

inode的特殊作用
由于inode号码与文件名分离,导致一些Unix/Linux系统具有以下的现象
当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件
移动或重命名文件时,只改变文件名,不影响inode号码
打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名

删除乱码文件

方法一:
[root@server1~]#touch a.txt
[root@server1~]#ls -i a.txt
100663364 a.txt
[root@server1~]#find .-inum 100663364 -exec rm -i {}\;
这条命令的意思是find找到的内容作为后面rm删除的对象
语法结构分析
-exec参数后面跟的是命令,它的终止是以;为结束标志的,{}代表前面find找出来的文件名,\代表换行符,是立即执行的意思。
rm:是否删除普通文件“./a.txt”?y
[root@server1~]ls -lh
总用量8.0k
-rw------.1 root root 2.1k 87 14:08 anaconda-ks.cfg
举例
[root@serverl ~]# ls -lh
-rwxr-xr-x. 1 root root   72 93 16:04 kill.sh
[root@serverl ~]# find . -inum 100663411 -exec rm -f {} \;
[root@serverl ~]# ls -lh
发现已经删除

这条命令的意思是find找到的内容作为后面rm删除的对象,语法结构分析:

   -exec参数后面跟的是命令,它的终止是以;为结束标志的,{}代表前面find找出来的文件名,\代表换行的是立即执行的意思
方法二:
[root@server1~]#ls -i at.txt
100663364 at.txt
[root@server1~]#find . -inum 100663364 | xargs rm -f ( . 代表当前目录 xargs 这个参数就是强力的意思,如果前面的输出结果包含空格或制表符也会被强力执行 )
举例:
[root@serverl ~]# touch a.txt
[root@serverl ~]# ls -i
100663362 anaconda-ks.cfg       102640155 模板   67184431 下载
100663411 a.txt                    805846 视频   67184432 音乐
100665063 initial-setup-ks.cfg  102640156 图片   36066299 桌面
   805845 公共                   36066301 文档
[root@serverl ~]# find . -inum 100663411 | xargs rm -f
[root@serverl ~]# ls -i
100663362 anaconda-ks.cfg          805846 视频   67184432 音乐
100665063 initial-setup-ks.cfg  102640156 图片   36066299 桌面
   805845 公共                   36066301 文档
102640155 模板                   67184431 下载
使用[root@serverl ~]# ls -lh | grep a.txt 命令查找改文件发现没有
   Xargs这个参数就是强力的意思,如果前面的输出结果包含空格或制表符也会被强力执行

链接文件

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

在这里插入图片描述

恢复xfs类型的文件

xfsdump命令格式
xfsdump -f 备份存放位置 要备份的路径或设备文件
xfsdump备份级别 (默认为0)
0:完全备份
1-9:增量备份
xfsdump常用选项:-f、-L、-M、-s
xfsrestore命令格式
xfsrestore -f 恢复文件的位置 存放恢复后文件的位置
模拟删除并执行恢复操作
ectundelete 工具仅可以恢复EXT类型的文件,无法恢复CentOS 7 系统默认采用xfs类型的文件。针对xfs文件系统目前也没有比较成熟的文件恢复工具,所以建议提前做好数据备份,以避免数据丢失。
xfs类型的文件可使用xfsdump与xfsrestore工具进行备份恢复。若系统中未安装xfsdump与xfsrestore工具,可以通过yum install-y xfsdump命令安装。xfsdump按照inode顺序备份一个xfs文件系统。xfsdump的备份级别有两种:0表示完全备份;1-9表示增量,要备份路径或设备文件。常用的备份参数包括以下几种:

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

验证

针对centos7系统xfs进行备份与恢复
查看内部是否有xfs备份和恢复的命令 (默认自带)(无法补全则yum -y install下载)
 [root@server2 ~]# xfsdump(tab键是否补全) [root@server2 ~]# xfsrestore

添加一块硬盘,重启,查看,分区,格式化挂载,新建挂载点,挂载
[root@server2 ~]# fdisk -l
[root@server2 ~]# fdisk /dev/sdb 
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0xd7a0c49a 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@server2 ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=1310656 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5242624, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@server2 ~]# mkdir /data
[root@server2 ~]# mount /dev/sdb1 /data
[root@server2 ~]# df -TH

在新磁盘中添加文件,备份,并删除,做验证
[root@server2 ~]# cd /data
[root@server2 data]# ls   //查看,此时为空
[root@server2 data]# cp /etc/passwd ./   //复制etc/passwd下的文件至当前目录
[root@server2 data]# ls
passwd
[root@server2 data]# mkdir test    //创建test目录,并创建空文件a01
[root@server2 data]# ls
passwd  test
[root@server2 data]# touch test/a01.txt
[root@server2 data]# ls
passwd  test

查看结构关系信息
[root@server2 data]# yum -y install tree
[root@server2 data]# cd
[root@server2 ~]# tree /data/
/data/
├── passwd
└── test
    └── a01.txt

1 directory, 2 files

文件进行备份
[root@server2 ~]# xfsdump -f /opt/xfs_dump /dev/sdb1
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.4 (dump format 3.0) - type ^C for status and control

 ============================= dump label dialog ==============================

please enter label for this dump session (timeout in 300 sec)
 -> xfs_dump  //备份文件位置
session label entered: "xfs_dump"

 --------------------------------- end dialog ---------------------------------

xfsdump: level 0 dump of server2:/data
xfsdump: dump date: Wed Dec 16 19:51:29 2020
xfsdump: session id: 049d33bc-02f6-4cb3-851a-db93beaef20a
xfsdump: session label: "xfs_dump"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 25856 bytes
xfsdump: /var/lib/xfsdump/inventory created

 ============================= media label dialog =============================

please enter label for media in drive 0 (timeout in 300 sec)
 -> sdb1  //需要备份的设备名
media label entered: "sdb1"

 --------------------------------- end dialog ---------------------------------

xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 25560 bytes
xfsdump: dump size (non-dir files) : 2592 bytes
xfsdump: dump complete: 66 seconds elapsed
xfsdump: Dump Summary:
xfsdump:   stream 0 /opt/xfs_dump OK (success)
xfsdump: Dump Status: SUCCESS

再进行模拟删除
[root@server2 ~]# rm -rf /data/*
[root@server2 ~]# ls /data/
[root@server2 ~]# 


恢复过程
[root@server2 ~]# xfsrestore -f /opt/xfs_dump /data/
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.4 (dump format 3.0) - type ^C for status and control
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description: 
xfsrestore: hostname: server2
xfsrestore: mount point: /data
xfsrestore: volume: /dev/sdb1
xfsrestore: session time: Wed Dec 16 19:51:29 2020
xfsrestore: level: 0
xfsrestore: session label: "xfs_dump"
xfsrestore: media label: "sdb1"
xfsrestore: file system id: 907abcbc-7b41-49c3-9bbb-e30019390746
xfsrestore: session id: 049d33bc-02f6-4cb3-851a-db93beaef20a
xfsrestore: media id: 7c687c19-dbee-48be-8a95-46704855f274
xfsrestore: using online session inventory
xfsrestore: searching media for directory dump
xfsrestore: reading directories
xfsrestore: 2 directories and 3 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: restore complete: 0 seconds elapsed
xfsrestore: Restore Summary:
xfsrestore:   stream 0 /opt/xfs_dump OK (success)
xfsrestore: Restore Status: SUCCESS
[root@server2 ~]# ls /data/
passwd  test


总结:xfs需要一直保持在挂载状态,只有root用户有权限使用以下两条备份命令 [root@server2 ~]# xfsdump(tab键是否补全) [root@server2 ~]# xfsrestore

恢复EXT类型的文件

必须在centos6上面做
验证

1.修改ip  [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 
ONBOOT=yes 修改这一项 :wq
对网卡进行重启systemctl restart network
[root@localhost ~]# service network restart
正在关闭接口 eth0: 设备状态:3 (断开连接)
                                                           [确定]
关闭环回接口:                                             [确定]
弹出环回接口:                                             [确定]
弹出界面 eth0: 活跃连接状态:激活中
活跃连接路径:/org/freedesktop/NetworkManager/ActiveConnection/6
状态:激活的
连接被激活
                                                           [确定]
查看地址  [root@localhost ~]# ifconfig 
 eth0      Link encap:Ethernet  HWaddr 00:0C:29:72:C8:E8  
          inet addr:20.0.0.5  Bcast:20.0.0.255  Mask:255.255.255.0
 连接xshell
先把光盘挂载 (首先手动设置光盘的连接)
df -Th 查看光盘挂载情况 
卸载目前的挂载  [root@localhost ~]#umount /dev/sr0
重新挂载  [root@localhost ~]#mount /dev/cdrom /mnt
df -Th 查看挂载结果
[root@localhost ~]# cd /etc/yum.repos.d//yum.repos.d/ 目录下
[root@localhost yum.repos.d]# mkdir backup 在该目录下新建一个目录
[root@localhost yum.repos.d]#mv C* backup/ 将所有目录复制到backup目录下,防止误删除
[root@localhost yum.repos.d]#ls -lh 查看生成文件
[root@localhost yum.repos.d]#cp backup/CentOS-Base.repo local.repo  拷贝一下,作为本地模板
[root@localhost yum.repos.d]# vi local.repo 编辑ip源文件
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=file:///mnt
gpgcheck=0
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
enable=1  :wq   编辑完成现象
[root@localhost yum.repos.d]]# cd
yum clean all  清空yum仓库
[root@localhost ~]# yum makecache  建立yum仓库缓存
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: ftp.sjtu.edu.cn
base                                           | 3.7 kB     00:00     
Metadata Cache Created
[root@localhost ~]# yum -y install e2fsprogs-libs e2fsprogs-devel 安装yum
在xfs里面传extundelete软件包
[root@localhost ~]# ls -lh
-rw-r--r--. 1 root root 106K 94 11:49 extundelete-0.2.4.tar.bz2  发现该安装包已经安装
[root@localhost ~]#yum -y install make gcc gcc-c++ 安装编译环境
对安装包进行解压缩 [root@localhost ~]]# tar jxvf extundelete-0.2.4.tar.bz2
[root@localhost ~]# cd extundelete-0.2.4
[root@localhost extundelete-0.2.4]# ./configure 对安装包进行配置
[root@localhost extundelete-0.2.4]# make && make install 进行make编译
2.添加一块磁盘 进行查看  分区 格式化 挂载
安装安装之后进行重启
[root@localhost ~]# fdisk -l 
[root@localhost ~]# fdisk /dev/sdb (n)(p) 回车 p 查看是否有新的分区产生
[root@localhost ~]# mkfs.ext4 /dev/sdb1 格式化  (注意是ext4格式化)
[root@localhost ~]# mkdir /data 新建一个data目录
[root@localhost ~]# mount /dev/sdb1 /data/ 挂载
[root@localhost ~]# cd /data
[root@localhost data]# makdr a 新建文件
[root@localhost data]# echo a>a1
[root@localhost data]# echo a>b1
[root@localhost data]# echo a>c1
[root@localhost data]# echo a>d1
[root@localhost data]# ls -lh  查看目录
[root@localhost data]# cd
[root@localhost data]# yum -y install tree 安装树
[root@localhost data]# tree /data/
/data/
├── a
├── a1
├── b
├── c
├── d
└── lost+found
在xftp安装extundelete-0.2.4.tar.bz2安装包
[root@localhost ~]# ls -lh
-rw-r--r--. 1 root root 106K 94 11:49 extundelete-0.2.4.tar.bz2
[root@localhost ~]# cd /
[root@localhost /]# ls -lh  查看data目录
drwxr-xr-x.   4 root root 4.0K 94 20:17 data
[root@localhost /]# cd
[root@localhost ~]# extundelete /dev/sdb1 对/dev/sdb1进行备份 y extundelete /dev/sdb1 -o /opt/back
[root@localhost ~]# extundelete /dev/sdb1 --inode 2  y  查看是否备份
a                                                 12             Deleted
b                                                 13             Delet

[root@localhost ~]# cd /data
[root@localhost data]# ls -lh
总用量 36K
-rw-r--r--. 1 root root    3 94 20:17 a
drwxr-xr-x. 2 root root 4.0K 94 20:16 a1
-rw-r--r--. 1 root root    3 94 20:17 b
-rw-r--r--. 1 root root    3 94 20:17 c
-rw-r--r--. 1 root root    3 94 20:17 d
drwx------. 2 root root  16K 94 20:14 lost+found
[root@localhost data]# rm a b
rm:是否删除普通文件 "a"?y
rm:是否删除普通文件 "b"?y
[root@localhost data]# cd
[root@localhost ~]# cd /data/
[root@localhost data]# ls -lh
总用量 28K
drwxr-xr-x. 2 root root 4.0K 94 20:16 a1
-rw-r--r--. 1 root root    3 94 20:17 c
-rw-r--r--. 1 root root    3 94 20:17 d
drwx------. 2 root root  16K 94 20:14 lost+found
[root@localhost data]# cd
[root@localhost ~]# umount /data 卸载光盘
[root@localhost ~]# cd /data/
[root@localhost data]# ls -lh
总用量 28K
                                   a
drwxr-xr-x. 2 root root 4.0K 94 20:16 a1
                                   b
-rw-r--r--. 1 root root    3 94 20:17 c
-rw-r--r--. 1 root root    3 94 20:17 d
drwx------. 2 root root  16K 94 20:14 lost+found
[root@localhost data]# rm -rf c d
[root@localhost data]# ls -lh
总用量 20K
drwxr-xr-x. 2 root root 4.0K 94 20:16 a1
drwx------. 2 root root  16K 94 20:14 lost+found
[root@localhost data]# cd
[root@localhost ~]# umount /data/ 
[root@localhost ~]# extundelete /dev/sdb1 --restore-all  恢复
extundelete: Bad magic number in super-block when trying to open filesystem /dev/sdb
[root@localhost ~]# extundelete /dev/sdb --restore-all
extundelete: Bad magic number in super-block when trying to open filesystem /dev/sdb
[root@localhost ~]# extundelete /dev/sdb1 --restore-all
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 160 groups loaded.
Loading journal descriptors ... 46 descriptors loaded.
Searching for recoverable inodes in directory / ... 
4 recoverable inodes found.
Looking through the directory structure for deleted files ... 
0 recoverable inodes still lost.
[root@localhost ~]# ls -lh  查看发现多了一个如下的目录
drwxr-xr-x. 2 root root 4.0K 95 22:35 RECOVERED_FILES
[root@localhost ~]# cd RECOVERED_FILES/  
[root@localhost RECOVERED_FILES]# ls -lh  查看到删除的文件
总用量 8.0K
-rw-r--r--. 1 root root 3 95 22:35 a
-rw-r--r--. 1 root root 3 95 22:35 b
                               c
                               d
[root@localhost RECOVERED_FILES]# cd 
[root@localhost ~]# mount /dev/sdb1 /data/
[root@localhost ~]# cp /root/RECOVERED_FILES/{a,b,c,d} /data/
[root@localhost ~]# cd /data/
[root@localhost data]# ls -lh
总用量 36K
-rw-r--r--. 1 root root    3 95 23:40 a
drwxr-xr-x. 2 root root 4.0K 94 20:16 a1
-rw-r--r--. 1 root root    3 95 23:40 b
-rw-r--r--. 1 root root    3 95 23:40 c
-rw-r--r--. 1 root root    3 95 23:40 d
drwx------. 2 root root  16K 94 20:14 lost+found


关于extundelete数据恢复不能恢复空文件夹目录的问题。原因是extundelete只能恢复block数据块里面有内容的数据,而空文件没有在block数据块里面写过东西,因此,恢复不了

xfsdump和extundelete区别:

1、extundelete需要额外去安装,而xfsdump默认系统自带
2、extundelete恢复时需要解挂载,而xfsdump需要挂载点在线时使用
3、xfsdump使用时必须是root账户才能用
4、extundelate只能恢复ext4的文件系统格式(必须是CentOS6系统),xfsdump只能恢复xfs的文件系统格式(CentOS7中默认是xfs文件系统格式)、

日志文件

日志的功能

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

日志文件的分类

内核及系统日志
由系统服务rsysolg统一进行管理,日志格式基本相似
用户日志
记录系统用户登录及退出系统的相关信息
程序日志
 由各种应用程序独立管理的日志文件,记录格式不统一

日志保存位置

默认位于:/var/log 目录下
主要日志文件介绍
在这里插入图片描述
日志文件的分类

/var/log/message 记录linux内核消息及各种应用程序的公共日志信息
/var/log/cron 记录crond计划任务产生的事件消息
/var/log/dmesg 记录linux系统在引导过程中的各种事件信息
/var/log/maillog 记录进入或发出系统的电子邮件活动
/var/log/lastlog 记录每个用户最近的登录事件
/var/log/secure 记录用户认证相关的安全事件信息
/var/log/wtmp 记录每个用户登录、注销及系统启动和停机事件
/var/log/btmp 记录失败的、错误的登录尝试及验证事件

内核及系统日志

由系统服务rsyslog统一管理
软件包:rsyslog-7.4.7-16.el7.x86_64
主要程序:/sbin/rsyslogd
配置文件:/etc/resylog.conf

日志消息的级别
在这里插入图片描述
查询用户登录失败的用户记录

last:查看成功登录到系统的用户记录
lastb:查看登录失败的用户记录

日志记录的一般格式
在这里插入图片描述
用户日志分析

保存了用户登录、退出系统等相关信息
/var/log/lastlog 记录每个用户最近的登录事件
/var/log/secure 记录用户认证相关的安全事件信息
/var/log/wtmp 记录每个用户登录、注销及系统启动和停机事件
/var/log/secure:与用户验证相关的安全性事件

分析工具

users、who、w、last、lastb
last:查看成功登录到系统的用户记录
lastb:查看登录失败的用户记录

last  查看成功登录到系统的用户记录
lastb 查看登录失败的用户记录

程序日志分析

由相应的应用程序独立进行管理
Web服务:/var/log/httpd/
 access_log、error_log
代理服务:/var/log/squid/
 access.log、 cache.log、
FTP服务:/var/log/xferlog

分析工具

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

日志管理策略

及时作好备份和归档
延长日志保存期限
控制日志访问权限
 日志中可能会包含各类敏感信息,如账户、口令等

集中管理日志

将服务器的日志文件发送到统一的日志文件服务器
便于日志信息的统一收集、整理和分析
杜绝日志信息的意外丢失、恶意篡改或删除

验证:

日志文件配置文件位置(系统配置文件):[root@server2 ~]# vim /etc/rsyslog.conf
26 $WorkDirectory /var/lib/rsyslog(记录了工作目录)
36 $IncludeConfig /etc/rsyslog.d/*.conf(记录了子配置文件)
 64 cron.*                                                  /var/log/cron(计划性任务的配置文件)
57 authpriv.*                                              /var/log/secure(安全性的配置文件)
54 *.info;mail.none;authpriv.none;cron.none                /var/log/messages(内核的配置文件)


日志文件产生位置(只要有服务生成,就一定有该服务的日志文件)
[root@server2 ~]# cd /var/log
[root@server2 log]# ls
amanda             cron           grubby_prune_debug  pluto            speech-dispatcher       vmware-vmusr.log
anaconda           cron-20201216  lastlog             ppp              spooler                 wpa_supplicant.log
audit              cups           libvirt             qemu-ga          spooler-20201216        wtmp(用户的日志文件信息)
boot.log           dmesg          maillog             rhsm             sssd                    Xorg.0.log
boot.log-20201216  dmesg.old      maillog-20201216    sa               tallylog                Xorg.0.log.old
btmp               firewalld      messages(系统内核日志文件)           samba            tuned                   Xorg.9.log
btmp-20201216      gdm            messages-20201216   secure           vmware-vgauthsvc.log.0  yum.log
chrony             glusterfs      ntpstats            secure-20201216  vmware-vmsvc.log

查看用户(vim wtmp)时发现内容看不懂,那么利用以下工具来进行查看

[root@server2 log]# users //查看那些用户进行登录
root
[root@server2 log]# w
 20:12:59 up 29 min,  1 user,  load average: 0.00, 0.01, 0.03
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    20.0.0.1         19:43    3.00s  0.41s  0.02s w
[root@server2 log]# who  //查看在线
root     pts/0        2020-12-16 19:43 (20.0.0.1)

[root@server2 log]# last  //查看之前登录的用户
root     pts/0        20.0.0.1         Wed Dec 16 19:43   still logged in   
reboot   system boot  3.10.0-693.el7.x Wed Dec 16 19:43 - 20:13  (00:30)    
root     pts/0        20.0.0.1         Wed Dec 16 17:42 - crash  (02:01)    
reboot   system boot  3.10.0-693.el7.x Wed Dec 16 16:45 - 20:13  (03:28)    
root     pts/2        20.0.0.1         Mon Dec 14 23:13 - crash (1+17:31)   
root     pts/1        20.0.0.1         Fri Nov 27 21:52 - crash (18+18:52)  
root     pts/0        :0               Fri Nov 27 21:51 - crash (18+18:53)  
root     :0           :0               Fri Nov 27 21:51 - crash (18+18:53)  
reboot   system boot  3.10.0-693.el7.x Fri Nov 27 21:50 - 20:13 (18+22:23)  
root     pts/0        :0               Tue Aug 11 22:59 - crash (107+22:51) 
root     :0           :0               Tue Aug 11 22:58 - crash (107+22:52) 
reboot   system boot  3.10.0-693.el7.x Tue Aug 11 22:57 - 20:13 (126+21:16) 

wtmp begins Tue Aug 11 22:57:14 2020

[root@server2 log]# lastb //查看用户尝试登录的次数(即输入密码错误的次数,辨别安全隐患)

btmp begins Wed Dec 16 19:43:20 2020

安装外部的应用程序
[root@server2 log]# rpm -q httpd  //查看安装包是否已安装
未安装软件包 httpd 
[root@server2 log]# yum install httpd -y 
开启httpd服务,并关闭防火墙,核心防护
[root@server2 log]# systemctl start httpd.service 
[root@server2 log]# setenforce 0
[root@server2 log]# systemctl stop firewalld.service 

查看httpd的日志文件是否生成
[root@server2 log]# cd /var/log/
[root@server2 log]# ls (发先存在,即httpd)
amanda             cron           grubby_prune_debug  ntpstats  secure-20201216         vmware-vmsvc.log
anaconda           cron-20201216  httpd   
[root@server2 log]# cd httpd/   进入该目录下,发现生成两个日志文件
[root@server2 httpd]# ls
access_log(访问网站时就会产生)  error_log(错误日志)








评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值