一个新的操作系统的文件数据除了内容外,往往还有着非常多的属性,文件系统通常会将这两部分分开存放,分别存放在inode和block中。
那么什么是inode?什么是block呢?
要理解inode与block,我们首先得从文件的存储讲起。
我们可以使用stat命令查看某个文件的inode信息。
从上可以看出,inode包括很多的文件元信息,比如文件的字节数、i节点号、文件拥有者的userid、文件的groupid,文件的权限、时间戳等等,但是不包含文件的文件名。
Linux系统文件有三个主要的时间属性,分别是ctime(change time),atime(access time), mtime(modify time)
因为文件名是存放在目录当中的,在Linux系统中一切皆文件,所以目录也是一种文件,下面的表格就是目录文件的结构,每一列就是一个目录项。
文件名1 | 文件名2 |
---|---|
inode号码1 | inode号码2 |
操作系统用inode号码来识别不同的文件,每个文件都有一个inode号码,Linux系统内部不使用文件名来识别文件,用的就是inode号码来识别文件,对于操作系统来说,文件名就是inode号码。
一个文件被打开,在系统内部的过程大致分以下三步:
除了stat命令查看inode号码,还可以通过ls -i命令查看文件的inode号码
当用户在linux系统中视图访问一个文件时候,系统会根据文件名去查找对应的inode,看该用户是否具有访问这个文件的权限,如果有,就指向对应的数据block,如果没有,就返回 permission deied ,而一块硬盘分区后的结构则如下:
文件-------目录项--------目录
元信息-----inode-------inode表区块
数据------block-------block数据块
inode也会消耗硬盘空间,每个inode的大小一般是128字节或者256字节。inode的总数在格式化的时候就会给定。执行命令“df -i”就可以查看每个硬盘分区的inode总数和已经使用的数量。
因为文件名与inode是分离的,所以可能会出现以下现象:
因为每一个文件都必须占用一个inode号码,且inode号码是有限的,就可能会出现一种状况,就是我们磁盘空间仍然存在,但是我们无法在硬盘上创建新文件。这种情况的发生就是由于我们的inode号码用光导致的。往往是因为我们文件中产生了很多字节小,数量多的缓存文件,一些人也会利用这个进行攻击。
解决方法就是我们找到这些文件的存储位置,对这些小文件进行转移或删除。如果是很多用户公用的文件系统,我们可以用磁盘配额来解决这个问题。
一般我们所说的软链接类似于微软的快捷方式,硬链接相当于对原文件进行了复制,这种说法在我们刚刚了解了inode与block以后,我们会发现这样的说法不正确。
通过文件系统的inode链接来产生新的文件名,而不是产生新文件,这就是硬链接。inode信息中的链接数会加1。
下图简单的说明了硬链接的特点
文件名1--------node节点(abc)--------数据
|
文件名2--------node节点(abc)---------
软连接就是再创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件名称。例如,文件A和B的inode号码虽然不一样,但是文件A的内容是文件B的路径,读取文件A时系统会自动访问者导向文件B,这时,文件A就称为文件B的‘软链接’或者符号连接。这里的链接数不会发生变化。
文件名1--------node节点(abc)--------数据
|
文件名2--------node节点(cde)
软链接特点
我们删除一个文件,只是在这个文件的父目录里面的block中删除了这个文件的额名字,并不会清除inode节点和block数据。Linux是通过link的数量来控制文件删除的,只有当一个文件不存在link时,这个文件才会被删除。
在 Linux 系统运维工作中,经常会遇到因操作不慎、操作错误等导致文件数据丢失的情况,尤其对于客户企业中一些新手。当然,这里所指的是彻底删除,即已经不能通过“回收站”找回的情况,比如使用“rm -rf”来删除数据。
接下来我们以extundelete软件恢复误删数据来演示。
extundelete 是一个开源的 Linux 数据恢复工具,支持 ext3、ext4 文件系统。
在数据被误删除后,第一时间要做的就是卸载被删除数据所在的分区,如果是根分区的数据遭到误删,就需要将系统进入单用户模式,并且将根分区以只读模式挂载。这样做的原因很简单,因为将文件删除后,仅仅是将文件的 inode节点中的扇区指针清零,实际文件还存储在磁盘上,如果磁盘继续以读写模式挂载,这些已删除的文件的数据块就可能被操作系统重新分配出去,在这些数据库被新的数据覆盖后,这些数据就真的丢失了,恢复工具也无力回天。所以以只读模式挂载磁盘可以尽量降低数据库中数据被覆盖的风险,以提高恢复数据成功的比例。
使用extundelete软件恢复误删文件步骤:
1.编译安装 extundelete
[root@localhost opt]# yum -y install e2fsprogs-devel e2fsprogs-libs //安装 extundelete软件的两个依赖包
[root@localhost ~]# yum -y install wget //安装wget
[root@localhost opt]# wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2 //用wget下载extundelete软件
[root@localhost opt]# yum -y install bzip2 //下载解压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 //指定安装目录
cd /usr/local/extundelete/bin //到这个目录下
ln -s /usr/local/extundelete/bin/* /usr/sbin/ //创建软链接,方便管理
yum -y install gcc automake autoconf libtool make //安装编译器
yum install gcc gcc-c++ //安装c++
2、模拟删除并执行恢复操作
虚拟机添加新硬盘,使用 fdisk 命令创建新分区,将其挂载到/data目录下,往该目录下新建一些文件或目录
我们去/root/RECOVERED_FILES/目录下就可以查看恢复文件。
extundelete 工具仅可以恢复 EXT 类型的文件,无法恢复 CentOS 7 系统默认采用 xfs 类型的文件。
针对 xfs 文件系统目前也没有比较成熟的文件恢复工具,所以建议提前做好数 据备份,以避免数据丢失。
xfs 类型的文件可使用 xfsdump 与 xfsrestore 工具进行备份恢复。若系统中未安装 xfsdump与xfsrestore工具,
可以通过yum install -y xfsdump命令安装。xfsdump 按照inode 顺序备份一个 xfs 文件系统。xfsdump 的备份级别
有两种:0 表示完全备份;1-9 表示增量 备份。
xfsdump 的备份级别默认为 0。
xfsdump 命令
格式xfsdump -f 备份存放位置 要备份路径或设备文件。
常用的备份参数包括以下几种:
-f:指定备份文件目录;
-L:指定标签 session label;
-M:指定设备标签 media label;
-s:备份单个文件,-s 后面不能直接跟路径。
日志文件是用于记录 Linux 操作系统中各种运行消息的文件,相当于 Linux 主机的“日记”。不同的日志文件记载了不同类型的信息,如 Linux 内核消息、用户登录事件、程序错误等。
在 Linux 操作系统中,日志数据主要包括以下三种类型
常见的一些日志文件如下:
/var/log/messages:记录 Linux 内核消息及各种应用程序的公共日志信息,包括启动、I/0 错误、网络错误、程序故障等。
对于未使用独立日志文件的应用程序或服 务,一般都可以从该日志文件中获得相关的事件记录信息
内核及系统日志功能主要由默认安装的 rsyslog-7.4.7-16.el7.x86_64.rpm 软件包提供。
从配置文件/etc/rsyslog.conf 中可以看到,受 rsyslogd 服务管理的日志文件都是 Linux 操作系统中主要的日志文件,它们记录了 Linux 操作系统中内核、用户认证、电子邮件、计 划任务等基本的系统消息。在 Linux 内核中,根据日志消息的重要程度不同,将其分为不同 的优先级别(数字等级越小,优先级越高,消息越重要)
内核及大多数系统消息被记录到公共日志文件/var/log/messages 中,而其他一些程序 消息被记录到各自独立的日志文件中,此外日志消息还能够记录到特定的存储设备中,或者直接发送给指定用户。
对于 rsyslog 服务统一管理的大部分日志文件,使用的日志记录格式基本上是相同的。 以公共日志/var/log/messages 文件的记录格式为例,其中每一行表示一条日志消息,每 一条消息均包括以下四个字段。
在 wtmp、btmp、lastlog 等日志文件中,保存了系统用户登录、退出等相关的事件消息。
但是这些文件都是二进制的数据文件,不能直接使用 tail、less 等文本查看工具进行浏览,需要使用 who、w、users、last 和 lastb 等用户查询命令来获取日志信息
(1)查询当前登录的用户情况——users、who、w 命令
在 Linux 操作系统中,还有相当一部分应用程序没有使用 rsyslog 服务来管理日志,而是由程序自己维护日志记录。不同应用程序的日志记录格式差别较大,且没有严格使用统一的格式,
管理人员应该定期并随机检查各种系统日志文件,包括一般信息日志、网络连接日志、文件传输日志及用户登录日志记录等。在检查这些日志时,要注意是否有不合常理的时间或操作记录。例如,出现以下现象就应多加注意。
●用户在非常规的时间登录,或者用户登录系统的 IP 地址和以往的不一样。
●用户登录失败的日志记录,尤其是那些一再连续尝试进入失败的日志记录。
●非法使用或不正当使用超级用户权限。
●无故或者非法重新启动各项网络服务的记录。
●不正常的日志记录,如日志残缺不全,或者是诸如 wtmp 这样的日志文件无故缺少 了中间的记录文件。
另外,需要提醒管理人员注意的是,日志并不是完全可靠的,高明的黑客在入侵系统后 经常会打扫现场。
所以管理人员需要综合运用以上的系统命令,全面、综合地进行审查和检 测,切忌断章取义,否则将可能做出错误的判断。