目录
一.inode和block概述
文件数据包括元信息与实际数据
文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节
1.block(块)
连续的八个扇区组成一个block
是文件存取的最小单位,文件存储的最小单位为块8个扇区组成为4k
2.inode(索引节点)
中文译名为“索引节点”,也叫节点
用干存储文件元信息
每个文件的属性信息,比如:文件的大小,时间,类型,权限等,称为文件的元数据(meta data)
元数据是存放在inode (indexnode)表中。inode表中有很多条记录组成,第一条记录对应的存放了一个文件的元数据信息。
2.1每一个inode表记录对应的保存了以下信息:
● inode number节点号
●文件类型
●权限
●UID
●GID
●链接数(指向这个文件名路径名称个数)
●该文件的大小和不同的时间戳
●指向磁盘上文件的数据块指针
●有关文件的其他数据
不包括文件名
2.2用stat命令可以查看某个文件的inode
信息示例:stat aa.txt
二.Linux系统文件三个主要的时间属性
atime(access time) 最后一次访问文件或目录的时间
mtime(modify time) 最后一次修改文件或目录权限(内容)的时间
ctime(change time) 最后一次改变文件或目录(属性)的时间
[root@localhost zhou]# touch 1.txt
[root@localhost zhou]# stat 1.txt
File: ‘1.txt’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 997329 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2021-09-22 16:32:00.382951444 +0800
Modify: 2021-09-22 16:32:00.382951444 +0800
Change: 2021-09-22 16:32:00.382951444 +0800
Birth: -
[root@localhost zhou]# vim 1.txt
[root@localhost zhou]# stat 1.txt
File: ‘1.txt’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 997329 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2021-09-22 16:32:17.604951405 +0800
Modify: 2021-09-22 16:32:00.382951444 +0800
Change: 2021-09-22 16:32:00.382951444 +0800
Birth: -
[root@localhost zhou]# echo "111" > 1.txt
[root@localhost zhou]# stat 1.txt
File: ‘1.txt’
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 997329 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2021-09-22 16:32:17.604951405 +0800
Modify: 2021-09-22 16:33:41.418951215 +0800
Change: 2021-09-22 16:33:41.418951215 +0800
Birth: -
[root@localhost zhou]#
当新创建一个文件时,这个文件的最后访问时间、最后内容修改时间、最后状态更新时间都是一致的。修改一个文件的权限状态信息,只会更新这个文件的最后状态修改时间
对比事例2,这里最后状态时间、最后内容改变时间都被更新了。当修改一个文件时,文件的Modify、Change会被更新
新建文件时,三种时间状态一样
当使用echo,没有打开文件,最后两种变
当改变权限,最后一种变
当使用VIM,只有第一种变
三.目录文件的结构
目录也是一种文件
目录文件的结构
文件名1 | inode号码1 |
---|---|
文件名2 | inode号码2 |
。。。。 | 。。。。 |
每个inode都有一个号码,操作系统用inode号码来识别不同的文件
Linux系统内部不使用文件名,而使用inode号码来识别文件
对于用户,文件名只是inode号码便于识别的别称
目录是个特殊文件,目录文件的内容保存了此目录中文件的列表及inode number对应关系文件引用一个是inode号
是通过文件名来引用一个文件
一个目录是目录下的文件名和文件inode号之间的映射
每个inode都有一个号码,操作系统用inode号码来识别不同的文件
Linux系统内部不使用文件名,而使用inode号码来识别文件
对于用户,文件名只是inode号码便于识别的别称
[root@localhost zy]# ls -i
51843566 1.txt
[root@localhost zy]# find -inum 51843566 -delete
四.文件存储小结
1.硬盘分区后的结构
2.访问文件的简单流程
3. inode的大小
inode也会消耗硬盘空间
每个inode的大小
一般是128字节或256字节
格式化文件系统时确定inode的总数
使用df-i命令可以查看每个硬盘分区的inode总数和已经使用的数量
五.inode号特殊作用
由于inode号码与文件名分离,导致一些Unix/Linux系统具有以下的现象
1.当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件
2.移动或重命名文件时,只改变文件名,不影响inode号码
3.打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名
cp命令和inode:
分配一个空闲的inode号,在inode表中生成新条目
在目录中创建一个目录项,将名称与inode编号关联
拷贝数据生成新的文件
rm命令和inode:
链接数递减,从而释放的inode号可以被重用
把数据块放在空闲列表中
删除目录项
数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖
mv和inode
如果mv命令的目标和源在同一设备,
不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!
删除旧的目录对应关系新建目录对应关系
六.文件恢复extundelete
删除一个文件,实际上并不清除inode节点和block的数据,只是在这个文件的父目录里面的block中,删除这个文件的名字。Linux是通过Link的数量来控制文件删除的,只有当一个文件不存在任何Link的时候,这个文件才会被删除。
在Linux系统运维工作中,经常会遇到因操作不慎、操作错误等导致文件数据丢失的情况,尤其对于客户企业中一些新手。当然,这里所指的是彻底删除,即已经不能通过"回收站"找回的情况,比如使用"rm -rf"来删除数据。针对Linux下的EXT文件系统,可用的恢复工具有debugfs、 ext3grep、extundelete等。其中extundelete是一个开源的Linux数据恢复工具,支持ext3文件系统。
使用extundelete工具如何恢复误删除的文件步骤:
在编译安装extundelete之前需要先安装两个依赖包e2fsprogs-libs和e2fsprogs-devel,这两个包在系统安装光盘的/Package目录下就有,使用rpm或yum命令将其安装。
[root@localhost ~]# yum install e2fsprogs-devel e2fsprogs-libs -y 先安装2个依赖包
[root@localhost ~]# cd /opt 把安装文件拖入/opt下
[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# tar jxvf extundelete-0.2.4.tar.bz2 解压缩该文件
[root@localhost extundelete-0.2.4]# ls
acinclude.m4 config.h.in depcomp Makefile.am README
aclocal.m4 configure install-sh Makefile.in src
autogen.sh configure.ac LICENSE missing
[root@localhost extundelete-0.2.4]# ./configure 编译安装
Configuring extundelete 0.2.4
Writing generated files to disk
[root@localhost extundelete-0.2.4]# make
[root@localhost extundelete-0.2.4]# make install
验证恢复,只对ext3文件有效
[root@localhost ~]# df -Th|tail -n 2 创建分区并挂载
/dev/sdb1 ext3 9.8G 23M 9.2G 1% /zy1
/dev/sdb2 ext4 9.8G 37M 9.2G 1% /zy2
[root@localhost zy1]# echo a>a 在只zy1和zy2里建立同样的内容,后证txt4确实不支持
[root@localhost zy1]# echo a>b
[root@localhost zy1]# echo a>c
[root@localhost zy1]# echo a>d
[root@localhost zy1]# ls
a b c d lost+found
[root@localhost zy1]# rm -rf a d 模拟删除a和d
[root@localhost ~]# umount /zy1 在家目录下解挂
[root@localhost ~]# extundelete /dev/sdb1 --inode 2 查看分区下存在哪些文件
File name | Inode number | Deleted status
. 2
.. 2
lost+found 11
a 12 Deleted
b 13
c 14
d 15 Deleted
[root@localhost ~]# extundelete /dev/sdb1 --restore-all 使用恢复
[root@localhost ~]# ls 使用ls查看可以看见多了一个RECOVERED_FILES文件夹
[root@localhost RECOVERED_FILES]# ls 查看文件夹里的文件可以找到已删除的文件
a d
七.xfs文件的恢复
xfsdump命令格式
xfsdump-f备份存放位置要备份的路径或设备文件
xfsdump备份级别(默认为0)
0:完全备份
1-9:增量备份
xfsdump常用选项
-f:指定备份文件目录
L:指定标签session label
-M:指定设备标签media label
-S:备份单个文件,-s后面不能直接跟路径
xfsrestore命令格式
xfsrestore -f 恢复文件的位置存放恢复后文件的位置
使用xfsdump时,需要注意以下的几个限制:
不支持没有挂载的文件系统备份,所以只能备份已挂载的;
必须使用root的权限才能操作;
只能备份XFS文件系统;
备份下来的数据只能让xfsrestore解析;
不能备份两个具有相同UUID的文件系统(可使用blkid查看)
八.日志文件
1.日志的功能
用于记录系统、程序运行中发生的各种事件
通过阅读日志,有助于诊断和解决系统故障
2.日志文件的分类
2.1内核及系统日志
由系统服务rsyslog统一进行管理,日志格式基本相似
2.2用户日志
记录系统用户登录及退出系统的相关信息
2.3程序日志
由各种应用程序独立管理的日志文件,记录格式不统一
3.日志保存位置
默认位于:/var/log目录下
日志文件位置 | 日志文件说明 |
---|---|
/var/log/messages内核和公共日志 | 它是核心系统日志文件,其中包含了系统启动时的引导信息,以及系统运行时的其他状态消息。1/0错误、网络错误和其他系统错误都会记录到此文件中。其他信息,比如某个人的身份切换为root,已及用户自定义安装软件的日志,也会在这里列出。 |
/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/tun/ulmp | 记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。同样,这个文件不能直接用Vi查看,而要使用w、who、users等命令查看 |
4.日志文件的格式:
日志文件的格式包含以下4列:
事件产生的时间。
产生事件的服务器的主机名。
产生事件的服务名或程序名。
事件的具体信息。
[root@localhost yum.repos.d]# vim /var/log/secure
Sep 17 09:51:41 localhost polkitd[770]: Loading rules from directory /etc/polkit-1/rules.d
Sep 17 09:51:41 localhost polkitd[770]: Loading rules from directory /usr/share/polkit-1/rules.d
Sep 17 09:51:41 localhost polkitd[770]: Finished loading, compiling and executing 8 rules
5.日志消息的级别
级号 | 消息 | 级别 | 说明 |
---|---|---|---|
0 | EMERG | 紧急 | 会导致主机系统不可用的情况 |
1 | ALERT | 警告 | 必须马上采取措施解决的问题 |
2 | CRIT | 严重 | 比较严重的情况 |
3 | ERR | 错误 | 运行出现错误 |
4 | WARNING | 提醒 | 可能会影响系统功能的事件 |
5 | NOTICE | 注意 | 不会影响系统但值得注意 |
6 | INFO | 信息 | 一般信息 |
7 | DEBUG | 调试 | 程序或系统调试信息等 |
6.内核和公共日志
日志的配置文件 位置在 /etc/rsyslog.conf
总结
掌握inode的作用,了解查找文件的路径,
了解日志文件的分类,解读,调取。