深入理解linux文件系统

目录

一、indoe和block详解

二、文件恢复extundelete

2.1使用 extundelete 工具如何恢复误删除的文件

2.2模拟删除并恢复

三、xfs类型备份和恢复

四、日志

4.1常见的一些日志文件:

4.2 内核和公共日志

4.2用户日志


 

一、indoe和block详解

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

block(块)

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

inode(索引节点)

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

 inode--------元信息

每个文件的属性信息,比如:文件的大小,时间,类型,权限等,称为文件的元数据(meta data)

元数据是存放在inode(index node)表中。inode 表中有很多条记录组成,第一条记录对应的存放了一个

文件的元数据信息。

inode包含文件的元信息:

  •   文件的字节数
  • 文件拥有者的user   ID
  • 文件的Group ID
  • 文件的读、写、执行权限
  • 文件的时间戳
  • ...................                                 

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

  •     示例:stat   aa.txt 

linux系统文件三个主要的时间属性 :

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

目录文件的结构:

  •    目录是个特殊文件,目录文件的内容保存了此目录中文件的列表及inode number对应关系
  •     文件引用一个是 inode号
  •     是通过文件名来引用一个文件
  •    一个目录是目录下的文件名和文件inode号之间的映射 

inode作用:

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

 用户通过文件名打开文件时,系统内部的过程:

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

 

 

查看inode号码的方法

ls   -i    文件名       //查看文件名对应的inode号码

ls  -i   aa.txt

stat      文件名        //查看文件inode信息中的inode号码

stat  aa.txt 

       inode的大小:

  • inode也会消耗硬盘空间
  • 每个inode的大小一般是128字节或256字节
  • 在格式化文件系统时确定inode的总数

    df   -i      分区名       //查看硬盘分区的inode总数和已经使用的数量                 

inode的特殊作用:

由于inode号码与文件名分离,导致一些unix/linux系统具有以下现象:

  •   当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件
  • 移动或重命名文件时,只改变文件名,不影响inode号码
  • 打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名

cp和inode

cp 命令:

  • 分配一个空闲的inode号,在inode表中生成新条目

  • 在目录中创建一个目录项,将名称与inode编号关联

  • 拷贝数据生成新的文件

rm 命令:

  • 硬链接数递减,从而释放的inode号可以被重用

  • 把数据块放在空闲列表中

  • 删除目录项

  • 数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖

mv和inode

  • 如果mv命令的目标和源在同一设备,

    不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!

    删除旧的目录对应关系新建目录对应关系 

[root@localhost a]#find -inum 69 -exec rm {} \;
#通过find命令查找indoe号来删除指定的文件
[root@localhost a]#find -inum 69 -delete 

block----------数据

一个文件必须占用一个inode,且至少占用一个block

二、文件恢复extundelete

删除一个文件,实际上并不清除 inode 节点和 block 的数据,只是在这个文件的父目录

里面的 block 中,删除这个文件的名字。Linux 是通过 Link 的数量来控制文件删除的,只有

当一个文件不存在任何 Link 的时候,这个文件才会被删除。

在 Linux 系统运维工作中,经常会遇到因操作不慎、操作错误等导致文件数据丢失的情

况,尤其对于客户企业中一些新手。当然,这里所指的是彻底删除,即已经不能通过“回收

站”找回的情况,比如使用“rm -rf”来删除数据。针对 Linux 下的 EXT 文件系统,可用的恢复

工具有 debugfs、ext3grep、extundelete 等。 其中 extundelete 是一个开源的 Linux 数据

恢复工具,支持 ext3 文件系统。

2.1使用 extundelete 工具如何恢复误删除的文件

在编译安装 extundelete 之前需要先安装两个依赖包 e2fsprogs-libs 和 e2fsprogs-devel,

这两个包在系统安装光盘的/Package 目录下就有,使用 rpm 或 yum 命令将其安装。

e2fsprogs-devel 安装依赖于 libcom_err-devel 包

[root@localhost ~]#yum -y install e2fsprogs-devel e2fsprogs-libs
#安装依赖软件
[root@localhost ~]# tar -jxvf extundelete-0.2.4.tar.bz2 -C /opt
#解压软件
[root@localhost ~]# cd /opt/extundelete-0.2.4
#切换到目录下
[root@localhost extundelete-0.2.4]# ./configure
#编译安装
[root@localhost extundelete-0.2.4]#make
[root@localhost extundelete-0.2.4]#make install


#验证恢复,目前使用版本只对ext3 有效,分区略
[root@localhost ~]# mkfs.ext3 /dev/sdb1
[root@localhost ~]# mkdir /test/ 
[root@localhost ~]# mount /dev/sdb1 /test/ 
[root@localhost ~]# cd /test/
[root@localhost test]# echo a>a 
[root@localhost test]# echo a>b 
[root@localhost test]# echo a>c 
[root@localhost test]# echo a>d

2.2模拟删除并恢复

可以使用extundelete /dev/sdb1 --inode 2

查看文件系统/dev/sdb1 下存在哪些文件,

具体的使用情况。其中--inode 2 代表从 i 节点为 2 的文件开始查看,一般文件系统格式化挂

载之后,i 节点是从 2 开始的,2 代表该文件系统最开始的目录。

在恢复前需要先解挂载

[root@localhost test]# rm -rf a b
#模拟删除
[root@localhost test]# ls c d lost+foun
[root@localhost test]# cd 
[root@localhost ~]# umount /test/
#解挂载
[root@localhost ~]#extundelete /dev/sdb1 --inode 2
#                  命令          查看的分区   从2节点开始
#查看该分区下的存在哪些文件

[root@localhost ~]# extundelete /dev/sdb1 --restore-all
#                     命令      需要恢复的分区设备    恢复选项,全都要
#使用恢复

 

执行完恢复的命令后,在当前目录下会出现一个/RECOVERED_FILES/目录,里面保

存了已经恢复的文件

[root@localhost ~]# ls
anaconda-ks.cfg extundelete-0.2.4 extundelete-0.2.4.tar.bz2 RECOVERED_FILES 
[root@localhost ~]# cd RECOVERED_FILES/
[root@localhost RECOVERED_FILES]# ls
a b 

三、xfs类型备份和恢复

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 后面不能直接跟路径

使用 xfsdump 时,需要注意以下的几个限制:

  • 不支持没有挂载的文件系统备份,所以只能备份已挂载的;

  • 必须使用 root 的权限才能操作;

  • 只能备份 XFS 文件系统;

  • 备份下来的数据只能让 xfsrestore 解析;

  • 不能备份两个具有相同 UUID 的文件系统(可使用blkid查看)。

具体过程:

[root@localhost opt]#mkfs.xfs -f /dev/sdb1
#强制格式化
[root@localhost ~]# fdisk /dev/sdb
#分区略
[root@localhost data]#partprobe /dev/sdb
#刷新分区
[root@localhost ~]# mkfs.xfs /dev/sdb1
#格式化
[root@localhost ~]# mkdir /date 
[root@localhost ~]# mount /dev/sdb1 /date/
#挂载
[root@localhost ~]# cd /date 
[root@localhost date]# cp /etc/passwd ./ 
#将passwd文件拷入
[root@localhost date]# mkdir test 
[root@localhost date]# touch test/a


[root@localhost data]#rpm -qa |grep xfsdump
#查看是否已安装
xfsdump-3.1.4-1.el7.x86_64
[root@localhost data]#yum install xfsdump -y
#未安装可以使用yum安装

[root@localhost ~]# xfsdump -f /opt/dump_sdb1 /dev/sdb1  -L dump_sdb1 -M sdb1
#使用 xfsdump 命令备份整个分区  并打上标记

 模拟数据丢失后恢复

[root@localhost data]#cd /data/
[root@localhost data]#rm -rf /*
[root@localhost data]#ls
[root@localhost ~]# xfsrestore -f /opt/dump_sdb1 /date/
...... 
xfsrestore: Restore Status: SUCCESS
[root@localhost ~]# ls /date/ 
passwd test

[root@localhost ~]#xfsdump -f /opt/dump_sdb1 /dev/sdb1 
# 备份 路径下的文件位置为 /opt/dump_sdb1    备份的位置为/dev/sdb1 
please enter label for this dump session (timeout in 300 sec)
 -> dump_sdb1 
 #打上标记便于确认
session label entered: "dump_sdb1"
-> sdb1
media label entered: "sdb1"

-> sdb1
#指定设备标签
media label entered: "sdb1"
xfsdump: Dump Status: SUCCESS


#恢复
[root@localhost opt]#xfsrestore -f dump_sdb1 /data/
# 使用 bak文件 将数据恢复到 /data 下
[root@localhost opt]#ls /data/
passwd  test

[root@localhost opt]#xfsdump -l 1 -f /backup/dump_sdb1_level_1 /sdb1 -L dump_sdb1_level_1 -M sdb1
#设定级别

四、日志

内核及系统日志由系统服务 rsyslog 统一管理,根据其主配置文件 /etc/rsyslog.conf

Linux 操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/log/下

4.1常见的一些日志文件:

日志文件位置日志文件说明
/var/log/messages内核和公共日志它是核心系统日志文件,其中包含了系统启动时的引导信息,以及系统运行时的其他状态消息。I/O 错误、网络错误和其他系统错误都会记录到此文件中。其他信息,比如某个人的身份切换为 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 列:

  • 事件产生的时间。

  • 产生事件的服务器的主机名。

  • 产生事件的服务名或程序名。

  • 事件的具体信息。

 #我们查看一下 /var/log/secure 日志,这个日志中主要记录的是用户验证和授权方面的信息,更加容易理解。命令如下:
[root@localhost ~]#vim /var/log/secure
Sep 22 22:43:31 localhost sshd[17254]: Accepted password for root from 192.168.91.1 port 54264 ssh2
Sep 22 22:43:31 localhost sshd[17254]: pam_unix(sshd:session): session opened for user root by (uid=0)
Sep 22 22:56:11 localhost sshd[13323]: pam_unix(sshd:session): session closed for user root
Sep 22 22:57:42 localhost sshd[13887]: pam_unix(sshd:session): session closed for user root
Sep 22 22:59:14 localhost sshd[14472]: pam_unix(sshd:session): session closed for user root
Sep 22 23:01:35 localhost sshd[14992]: pam_unix(sshd:session): session closed for user root
Sep 22 23:02:51 localhost sshd[15543]: pam_unix(sshd:session): session closed for user root

4.2 内核和公共日志

日志的配置文件 位置在 /etc/rsyslog.conf

[root@localhost ~]#vim /etc/rsyslog.conf
#查看rsyslog.conf 配置文件
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
#表示所有info等级以上的所有等级的信息都写到对应的日志文件里
mail.none
#表示某事件的信息不写到日志文件里(这里比如是邮件) 

信息的优先级别重要程度

在 Linux 内核中,根据日志消息的重要程度不同,将其分为不同 的优先级别(数字等级越小,优先级越高,消息越重要)。

0 EMERG(紧急):会导致主机系统不可用的情况。

1 ALERT(警告):必须马上采取措施解决的问题。

2 CRIT(严重):比较严重的情况。

3 ERR(错误):运行出现错误。

4 WARNING(提醒):可能影响系统功能,需要提醒用户的重要事件。

5 NOTICE(注意):不会影响正常功能,但是需要注意的事件。

6 INFO(信息):一般信息。

7 DEBUG(调试):程序或系统调试信息等

内核和公共消息日志存储位置

内核及大多数系统消息被记录到公共日志文件/var/log/messages 中,而其他一些程序

消息被记录到各自独立的日志文件中,此外日志消息还能够记录到特定的存储设备中,或者

直接发送给指定用户。

对于 rsyslog 服务统一管理的大部分日志文件,使用的日志记录格式基本上是相同的。

以公共日志/var/log/messages 文件的记录格式为例,其中每一行表示一条日志消息,每

一条消息均包括以下四个字段。

  • 时间标签:消息发出的日期和时间。

  • 主机名:生成消息的计算机的名称。

  • 子系统名称:发出消息的应用程序的名称。

  • 消息:消息的具体内容。

4.2用户日志

在 wtmp、btmp、

lastlog 等日志文件中,保存了系统用户登录、退出等相关的事件消息。

但是这些文件都是二进制的数据文件,不能直接使用 tail、less 等文本查看工具进行浏览,

需要使用 who、w、users、last 和 lastb 等用户查询命令来获取日志信息

4.2.1查询当前登录的用户情况

users

users 命令只是简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。 如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数

who

who命令用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可

以查看当前系统存在哪些不合法用户,从而对其进行审计和处理。who 的默认输出包括用

户名、终端类型、登录日期及远程主机

w

w 命令用于显示当前系统中的每个用户及其所运行的进程信息,比 users、who 命令的 输出内容要丰富一些。 ​ 

4.2.2查询用户登录的历史记录

last

last 命令用于查询成功登录到系统的用户记录,

最近的登录情况将显示在最前面。通过 last 命令可以及时掌握 Linux 主机的登录情况,若发现未经授权的用户登录过,则表示当前 主机可能已被入侵。

lastb

lastb 命令用于查询登录失败的用户记录,

如登录的用户名错误、密码不正确等情况都 将记录在案。登录失败的情况属于安全事件,因为这表示可能有人在尝试猜解你的密码。除 了使用 lastb 命令查看以外,也可以直接从安全日志文件/var/log/secure 中获得相关信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值