文章目录
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 12月 14 22:06 aaa.txt
drwxr-xr-x. 2 root root 6 12月 14 22:06 abc
drwxr-xr-x. 2 root root 6 3月 26 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 12月 14 22:06 a01.txt
-rw-r--r--. 2 root root 0 12月 14 22:06 aaa.txt
drwxr-xr-x. 2 root root 6 12月 14 22:06 abc
drwxr-xr-x. 2 root root 6 3月 26 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 12月 14 22:20 a01.txt
-rw-r--r--. 2 root root 12 12月 14 22:20 aaa.txt
drwxr-xr-x. 2 root root 6 12月 14 22:06 abc
drwxr-xr-x. 2 root root 6 3月 26 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 9月 3 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 8月 7 14:08 anaconda-ks.cfg
举例
[root@serverl ~]# ls -lh
-rwxr-xr-x. 1 root root 72 9月 3 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 9月 4 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 9月 4 11:49 extundelete-0.2.4.tar.bz2
[root@localhost ~]# cd /
[root@localhost /]# ls -lh 查看data目录
drwxr-xr-x. 4 root root 4.0K 9月 4 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 9月 4 20:17 a
drwxr-xr-x. 2 root root 4.0K 9月 4 20:16 a1
-rw-r--r--. 1 root root 3 9月 4 20:17 b
-rw-r--r--. 1 root root 3 9月 4 20:17 c
-rw-r--r--. 1 root root 3 9月 4 20:17 d
drwx------. 2 root root 16K 9月 4 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 9月 4 20:16 a1
-rw-r--r--. 1 root root 3 9月 4 20:17 c
-rw-r--r--. 1 root root 3 9月 4 20:17 d
drwx------. 2 root root 16K 9月 4 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 9月 4 20:16 a1
b
-rw-r--r--. 1 root root 3 9月 4 20:17 c
-rw-r--r--. 1 root root 3 9月 4 20:17 d
drwx------. 2 root root 16K 9月 4 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 9月 4 20:16 a1
drwx------. 2 root root 16K 9月 4 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 9月 5 22:35 RECOVERED_FILES
[root@localhost ~]# cd RECOVERED_FILES/
[root@localhost RECOVERED_FILES]# ls -lh 查看到删除的文件
总用量 8.0K
-rw-r--r--. 1 root root 3 9月 5 22:35 a
-rw-r--r--. 1 root root 3 9月 5 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 9月 5 23:40 a
drwxr-xr-x. 2 root root 4.0K 9月 4 20:16 a1
-rw-r--r--. 1 root root 3 9月 5 23:40 b
-rw-r--r--. 1 root root 3 9月 5 23:40 c
-rw-r--r--. 1 root root 3 9月 5 23:40 d
drwx------. 2 root root 16K 9月 4 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(错误日志)