一、inode和block
1.1:inode和block概述
- 文件数据包括原信息与实际数据
- 文件是存储在硬盘上的,硬盘最小存储叫做扇区,每个扇区512字节
- 操作系统读取硬盘信息,不会一个一个扇区读取。实际情况一下连续读取
- 多个扇区,一次性读取多个扇区,叫做块(Block),这种多个扇区组成的“块”是文件存取的最小单位,最常见的4K,就是8个扇区组成的一个Block块
- block(块):是文件存取的最小单位,连续的八个扇区组成一个block
- inode(索引节点):也叫i节点。用于存储文件元信息
- 文件的数据包括二部分:1、元信息(inode) 2、实际数据(block)
1.2:inode内容
1.2.1:inode包含文件的元信息
- 文件的字节数
- 文件拥有者UserID
- 文件的GroupID
- 文件的rwx权限(读、写、执行)
- 文件时间戳
1.2.2:查看inode信息
- 使用stat命令可以查看文件inode信息
示例:stat 1.txt
- Linux系统文件的三个主要的时间属性
ctime(change time) :是最后一次改变文件或目录(属性)的时间,例如执行 chmod, chown 等命令;
atime(access time):是最后一次访问文件或目录的时间;
mtime(modify time):是最后一次修改文件或目录(内容)的时间
inode中并不包括文件名,其实文件名是放在目录中的,linux系统中一切皆文件,因此目录也是文件。
文件名1-------inode号码1
文件名2-------inode号码2
每个inode都有一个号码,操作系统用inode号码来识别不同的文件
对于用户,文件名只是inode号码便于识别的别称
1.3:inode号码
- 用户通过文件名打开文件时,系统内部过程
1、系统找到文件名的inode号码
2、通过inode号码,获取inode信息
3、根据inode信息,找到文件所在的block,并读取数据 - 查看inode号码的方法
li -i命令:直接查看当前目录文件名的所对应的inode信息
ls-ai命令:直接查看当面目录的文件及隐藏文件的所对应的inode信息
stat命令:通过查看文件inode信息而查看到inode号码 - 当用户在linux系统中视图访问一个文件时候,系统会根据文件名去查找对应的inode,看该用户是否具有访问这个文件的权限,如果有,就指向对应的数据block,如果没有,就返回 permission deied
而一块硬盘分区后的结构则如下:
文件-------目录项--------目录块
元信息-----inode-------inode表区块
数据------block-------block数据块
1.4:inode大小
- inode也会消耗硬盘空间,所以格式化的时候,操作系统自动将硬盘分区成二个区域,一个数据区、存储文件数据,一个是inode区,存放所有的inode信息。每个inode大小
- 一般为128字节或者256字节,通常情况下不需要关注单个inode的大小,而是需要重点关注inode总数,inode的总数在格式化就给定了
- 执行df -i 命令就可以查看。
每个分区的对应inode总数和已经使用的inode数量。
1.5:inode特殊作用
- 当文件名包含特殊字符,可能无法正常删除。这时直接删除 inode,能够起到删除文 件的作用
- 移动文件或重命名文件,只是改变文件名,不影响 inode 号码;
- 打开一个文件以后,系统就以 inode 号码来识别这个文件,不再考虑文件名。
1.6:文件存储
1.7:4k对齐
1.7.1:为什么说要固态盘要4k对齐
绝大多数机械硬盘默认为512字节扇区,SSD扇区为4K。
为了确保与操作系统的兼容性,硬盘制造商还将扇区模拟为512字节扇区。
存在4K扇区和4K簇未对齐的情况。因此,有必要通过4K对齐将硬盘模拟扇区对准到4k扇区。
4K对齐的作用是将硬盘扇区与8的整数模拟扇区对齐,即512Bit×8 = 4096Bit,4096字节是4K。
严格来说,只要它是8的倍数,就可以实现4K对齐。
二、硬链接与软链接
- 在linux系统下的软件文件有2种,一种类似Windows的快捷方式功能的文件,可以快速连接到文件或者目录,称之为软连接
- 另外一种是通过inode连接产生新的文件名,二部是产生新的文件,称之为硬连接
2.1:硬连接
- 一般情况下,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名。但是linux系统允许多个文件名指向同一个inode号码,这意味着,可以不同的文件名访问同样的内容
- ln命令可以创建硬连接
命令格式为:ln 源文件 目标文件 - 建立硬链接后,源文件与目标文件的inode号码相同,都是指向同一个inode,inode信息中的连接数这时就会增加1
2.2:软链接
- 软连接就是创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件名称
列如,文件A和B的inode号码虽然不一样,但是文件A的内容是文件B的路径,读取文件A时系统会自动访问者导向文件B,这时,文件A就称为文件B的‘软连接’或者符号连接
三、恢复误删除的文件
3.1:EXT 类型文件恢复( extundelete 工具)
- 删除一个文件,实际上并不清除 inode 节点和 block 的数据,只是在这个文件的父目录 里面的 block 中,删除这个文件的名字。
- Linux 是通过 Link 的数量来控制文件删除的,只有 当一个文件不存在任何 Link 的时候,这个文件才会被删除。
- 当使用“rm -rf”来删除数据时。针对 Linux 下的 EXT 文件系统,可用的恢复工具有 debugfs、ext3grep、extundelete 等。 其中extundelete 是一个开源的 Linux 数据 恢复工具,支持 ext3、ext4 文件系统。
- 在数据被误删除后,第一时间要做的就是卸载被删除数据所在的分区,如果是根分区的 数据遭到误删,就需要将系统进入单用户模式,并且将根分区以只读模式挂载。这样做的原 因很简单,因为将文件删除后,仅仅是将文件的 inode 节点中的扇区指针清零,实际文件还 存储在磁盘上,如果磁盘继续以读写模式挂载,这些已删除的文件的数据块就可能被操作系统重新分配出去,在这些数据库被新的数据覆盖后,这些数据就真的丢失了,恢复工具也回 天无力。所以以只读模式挂载磁盘可以尽量降低数据库中数据被覆盖的风险,以提高恢复数 据成功的比例。
3.1.1:编译安装 extundelete
- 编译安装 extundelete 之前需要先安装两个依赖包 e2fsprogs-libs 和 e2fsprogs-devel, 这两个包在系统安装光盘的/Package 目录下就有,使用 rpm 或 yum 命令将其安装。 e2fsprogs-devel 安装依赖于 libcom_err-devel 包。 安装完依赖包之后,即可将提前上传的 extundelete 软件包解压、配置、编译、安装
[root@localhost opt]# yum -y install e2fsprogs-devel e2fsprogs-libs
[root@localhost ~]# yum -y install wget
[root@localhost opt]# wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
[root@localhost opt]# yum -y install bzip2
[root@localhost opt]# tar xvf extundelete-0.2.4.tar.bz2
[root@localhost opt]# cd extundelete-0.2.4/
[root@localhost extundelete-0.2.4]# ./configure --prefix=/usr/local/extundelete && make && make install
[root@localhost extundelete-0.2.4]# cd /usr/local/extundelete/bin
[root@localhost bin]# ln -s /usr/local/extundelete/bin/* /usr/sbin/
3.1.2:安装make(没有的话,要安装)
- 安装:
yum -y install gcc automake autoconf libtool make - 2、安装g++:
yum install gcc gcc-c++
3.1.3:模拟删除并执行恢复操作
虚拟机添加新硬盘,使用 fdisk 命令创建新分区,将其挂载到/data目录下,往该目录下新建一些文件或目录
使用“extundelete /dev/sdb1 --inode 2”查看文件系统/dev/sdb1 下存在哪些文件, 具体的使用情况。其中–inode 2 代表从 i 节点为 2 的文件开始查看,一般文件系统格式化挂 载之后,i 节点是从 2 开始的,2 代表该文件系统最开始的目录。
使用"rm -rf a b"命令删除/tmp/下的 a 文件和 b 文件,当出现误操作时,立刻卸载该文 件系统,然后使用“extundelete /dev/sdb1 --restore-all"恢复/dev/sdb1 文件系统下的所有内容。
3.2:xfs文件恢复
1.创建一块磁盘并进行挂载做实验
2、放文件和目录进去
3、备份,删除,恢复
四、分析日志文件
4.1:日志的功能
- 用于记录系统,程序运行中发生的各种事件
- 通过日志文件,有助于诊断和解决系统故障
4.2:日志文件的分类
- 内核及系统日志:由系统服务 rsyslog 统一管理,这些程序使 用的日志记录具有相似的格式
- 用户日志:用于记录 Linux 操作系统用户登录及退出系统的相关信息, 包括用户名、登录的终端、登录时间、来源主机、正在使用的进程操作等。
- 程序日志:有些应用程序会选择由自己独立管理一份日志文件(而不是交给 rsyslog 服务管理),用于记录本程序运行过程中的各种事件信息。由于这些程序只负责管 理自己的日志文件,因此不同程序所使用的日志记录格式可能会存在较大的差异。
4.2:主要日志文件的介绍
-
日志文件都默认放在目录/var/log/下
-
计划任务日志/var/log/cron:记录 crond 计划任务产生的事件信息
-
系统引导日志/var/log/dmesg:记录 Linux 操作系统在引导过程中的各种事件信息
-
邮件系统日志/var/log/maillog:记录进入或发出系统的电子邮件活动。
-
用户登录日志
/var/log/lastlog:记录每个用户最近的登录事件。
/var/log/secure:记录用户认证相关的安全事件信息
/var/log/wtmp:记录每个用户登录、注销及系统启动和停机事件
/var/log/btmp:记录失败的、错误的登录尝试及验证事件
4.3:日志文件分析
- 目的在于通过浏览日志查找关键信息、对系统服务进行调试,以及判断发生故障的原因 等
- 对于大多数文本格式的日志文件(如内核及系统日志、大多数的程序日志),只要使用 tail、more、less、cat 等文本处理工具就可以查看日志内容。而对于一些二进制格式的日志 文件(如用户日志),则需要使用特定的查询命令
4.3.1:内核及系统日志分析
- 内核及系统日志功能主要由默认安装的 rsyslog-7.4.7-16.el7.x86_64.rpm 软件包提供。
- rsyslog 服务所使用的配置文件为/etc/rsyslog.conf。通过查看/etc/rsyslog.conf 文件中的内 容,可以了解到系统默认的日志设置
- 在 Linux 内核中,根据日志消息的重要程度不同,将其分为不同 的优先级别(数字等级越小,优先级越高,消息越重要)
0 EMERG(紧急):会导致主机系统不可用的情况。
1 ALERT(警告):必须马上采取措施解决的问题。
2 CRIT(严重):比较严重的情况。
3 ERR(错误):运行出现错误
4 WARNING(提醒):可能影响系统功能,需要提醒用户的重要事件
5 NOTICE(注意):不会影响正常功能,但是需要注意的事件。
6 INFO(信息):一般信息。
7 DEBUG(调试):程序或系统调试信息等。
4.3.2:用户日志分析
- 保存了用户登录,退出系统的等相关信息
/var/log/lastlog:最近的登录事件。
/var/log/wtmp:用户登录注销及系统开关机事件
/var/log/utmp:当前登录的每个用户的详细信息
/var/log/secure:与用户验证相关的安全性事件 - 分析工具:who、w、users、last 和 lastb
1.查询当前登录的用户情况——users、who、w 命令
users 命令:简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。
who 命令:用于报告当前登录到系统中的每个用户的信息。默认输出包括用 户名、终端类型、登录日期及远程主机
2.查询用户登录的历史记录——last、lastb 命令
4.3.3:程序日志分析
- 由相应的应用程序独立进行管理
1,Web服务:/var/log/httpd/
access_log , error_log
2,代理服务:/var/log/squid/
access.log , cache.log
3,FTP服务:/var/log/xferlog - 分析工具
文本查看,grep过滤检索,webmin管理套件查看
awk,sed文本过滤,格式化编辑工具
专用日志分析工具