Linux——文件系统及恢复实验

inode 和block概述

  • 文件数据包括元信息与实际数据

  • 文件存储在硬盘上,硬盘存储最小单位是“扇区”,每个扇区存储512字节

    逻辑层面最小存储是单元格/簇

    物理层面最小存储是扇区

  • block(块)4k

    • 连续的八个扇区组成一个block
    • 是文件存取的最小单位
  • inode(索引节点)

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

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

在这里插入图片描述

inode的内容

inode包含文件的元信息
  • 文件的字节数
  • 文件拥有者的User ID
  • 文件的Group ID
  • 文件的读、写、执行权限
  • 文件的时间戳
  • …………

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

  • 示例:stat aa.txt
Linux系统文件三个主要的时间属性
  • ctime(change time)最后一次改变文件或目录(属性)的时间
  • atime(access time)最后一次访问文件或目录的时间
  • mtime(modify time)最有一次修改文件或目录(内容)的时间
目录文件的结构
  • 目录也是一种文件
  • 目录文件的结构

在这里插入图片描述

创建一个空的abc目录就是创建一个内容为0的文件

  • 每个inode都有一个号码,操作系统用于inode号码来识别不同的文件

  • Linux系统内部不适用文件名,而使用inode号码来识别文件

  • 对于用户来说,文件名只是inode号码便于识别的别称

inode的号码

用户通过文件名打开文件时,系统内部的过程
  1. 系统找到这个文件名对应的inode号码
  2. 通过indoe号码,获取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号码来识别该文件,不再考虑文件名

连接文件

为文件或目录建立链接文件
文件类型
  • 硬链接

    ln 源文件 目标位置
    
  • 软链接

    ln -s 源文件或目录…  链接文件或目标位置
    

硬链接相当于创建别名

软链接相当于快捷方式

在这里插入图片描述

恢复EXT类型的文件

编译安装extundelete软件包(只能使用6版本,7无法使用)

  • 安装依赖包

    • e2fsprogs-libs-1.41.12-18.el6.x86_64.rpm
  • e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm

  • 配置、编译及安装

    • extundelete-0.2.4.tar.bz2

模拟删除名执行恢复操作

先检查挂载信息,然后安装环境包

实验:

[root@localhost ~]#cd /mnt/Packages
[root@localhost Packages]# df -h		      //查看镜像文件是否挂载
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        20G  3.1G   16G  17% /
tmpfs           932M   76K  932M   1% /dev/shm
/dev/sda1       5.8G  168M  5.4G   3% /boot
/dev/sda3       9.7G  150M  9.0G   2% /home
/dev/sr0        3.6G  3.6G     0 100% /mnt		    //挂载在/mnt目录
[root@localhost ~]# cd /mnt/Packages/
[root@localhost Packages]# ls		'发现有很多软件包可以安装'
...省略部分内容
zip-3.0-1.el6.x86_64.rpm
zlib-1.2.3-29.el6.i686.rpm
zlib-1.2.3-29.el6.x86_64.rpm
zlib-devel-1.2.3-29.el6.i686.rpm
zlib-devel-1.2.3-29.el6.x86_64.rpm
zsh-4.3.10-7.el6.x86_64.rpm
[root@localhost Packages]# rpm -ivh e2fsprogs-libs-1.41.12-18.el6.x86_64.rpm       //安装
[root@localhost Packages]# rpm -ivh e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm 	 //安装
	…………省略
	pkgconfig(com_err) is needed by e2fsprogs-devel-1.41.12-18.el6.x86_64	(报错,发现要先安装依赖包)
[root@localhost Packages]# rpm -ivh libcom_err-devel-1.41.12-18.el6.x86_64.rpm 		(安装依赖包)
[root@localhost Packages]# rpm -ivh e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm    //安装成功

进行编译安装

[root@localhost Packages]# mount.cifs //192.168.10.124/linux /aaa
Password: 
[root@localhost Packages]# ls /aaa		   //发现extundelete-0.2.4.tar.bz2存在
extundelete-0.2.4.tar.bz2  john-1.8.0.tar.gz
[root@localhost Packages]# cd /aaa		(进入111目录)
[root@localhost aaa]# tar jxvf extundelete-0.2.4.tar.bz2 -C /opt		 //将压缩包解压到opt目录中
..........省略部分信息
[root@localhost aaa]# ls /opt		//查看是否解压成功
extundelete-0.2.4  rh
(进行编译安装)
[root@localhost 111]# cd /opt/extundelete-0.2.4/		//进入件文件中查看
[root@localhost extundelete-0.2.4]# ls
acinclude.m4  autogen.sh   configure     depcomp     LICENSE      Makefile.in  README
aclocal.m4    config.h.in  configure.ac  install-sh  Makefile.am  missing      src
[root@localhost extundelete-0.2.4]# yum install gcc gcc-c++ -y		   //安装编译器
[root@localhost extundelete-0.2.4]# ./configure 		  //开始配置
Configuring extundelete 0.2.4
Writing generated files to disk
[root@localhost extundelete-0.2.4]# make		 //make编译
make -s all-recursive
Making all in src
extundelete.cc:571: 警告:未使用的参数‘flags’
[root@localhost extundelete-0.2.4]# make install		//make install 安装
Making install in src
  /usr/bin/install -c extundelete '/usr/local/bin'

新添加磁盘,建立分区、格式化并挂载分区,最后查看信息

[root@localhost extundelete-0.2.4]# df -hT	      //挂载分区
Filesystem     Type     Size  Used Avail Use% Mounted on
/dev/sda2      ext4      20G  3.2G   16G  18% /
tmpfs          tmpfs    932M   76K  932M   1% /dev/shm
/dev/sda1      ext4     5.8G  168M  5.4G   3% /boot
/dev/sda3      ext4     9.7G  150M  9.0G   2% /home		
/dev/sr0       iso9660  3.6G  3.6G     0 100% /media/RHEL_6.5 x86_64 Disc 1 
/dev/sr0       iso9660  3.6G  3.6G     0 100% /mnt
/dev/sdb1      ext4      20G  172M   19G   1% /aaa

在挂载点创建文件,然后删除文件,同时解挂载,最后尝试恢复

[root@localhost extundelete-0.2.4]# cd /bbb		    //进入挂载点
[root@localhost 222]# ls	
lost+found
[root@localhost 222]# echo a>a		     //创建文件
[root@localhost 222]# echo a>c
[root@localhost 222]# ls	       //创建成功
a   c  lost+found
[root@localhost 222]# cd ~		       //返回家目录
[root@localhost ~]# umount /bbb     //解挂载
[root@localhost ~]# rm -rf /bbb/a /bbb/c
[root@localhost ~]# umount /bbb		(解挂载/bbb)
[root@localhost ~]# extundelete /dev/sdb1 --restore-all		//恢复数据
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 160 groups loaded.
Loading journal descriptors ... 29 descriptors loaded.
Searching for recoverable inodes in directory / ... 
2 recoverable inodes found.		//找到两个文件
Looking through the directory structure for deleted files ... 
0 recoverable inodes still lost.
[root@localhost ~]# cd RECOVERED_FILES/	      //进入恢复的文件中查找
[root@localhost RECOVERED_FILES]# ls		    //误删的文件恢复成功
a  c
[root@localhost RECOVERED_FILES]# cp a /opt 		//将文件复制到目标位置
[root@localhost RECOVERED_FILES]# ls /opt
a  extundelete-0.2.4  rh
成功恢复

恢复XFS类型的文件

xfsdump命令格式

xfsdump -f  指定创建备份存放的位置  备份存放的路径或设备文件

例如:xfsdump -f /opt/xfs_dump /dev/sdb1

xfsdump备份级别(默认为0)

  • 0:完全备份
  • 1~9:增量备份9看,

xfsdump常用选项:-f、-L、-M、-s

xfsrestore命令格式:

xfsrestore -f 备份的文件位置 指定恢复文件的位置

例如: xfsrestore -f /opt/xfs_dump /abc

模拟删除并执行恢复操作

实验:

[root@localhost ~]# fdisk /dev/sdb                       //添加新磁盘并创建分区
…………省略内容

[root@localhost ~]# mkfs.xfs /dev/sdb1                    //格式化
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=1310656 blks
…………省略内容
[root@localhost ~]# mkdir /abc                       //创建目录
[root@localhost ~]# vim /etc/fstab                       //将sdb1挂载到/abc
[root@localhost ~]# mount -a
[root@localhost ~]# df -hT
文件系统       类型      容量  已用  可用 已用% 挂载点
/dev/sda2      xfs        20G  3.5G   17G   18% /
devtmpfs       devtmpfs  898M     0  898M    0% /dev
tmpfs          tmpfs     912M     0  912M    0% /dev/shm
tmpfs          tmpfs     912M  9.0M  903M    1% /run
tmpfs          tmpfs     912M     0  912M    0% /sys/fs/cgroup
/dev/sda5      xfs        10G   37M   10G    1% /home
/dev/sda1      xfs       6.0G  174M  5.9G    3% /boot
tmpfs          tmpfs     183M  4.0K  183M    1% /run/user/42
tmpfs          tmpfs     183M   24K  183M    1% /run/user/0
/dev/sr0       iso9660   4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64
/dev/sdb1      xfs        20G   33M   20G    1% /abc                     //挂载成功
[root@localhost ~]# echo "this is test" > /abc/demo1   //在/abc下创建demo1并输入this is test
[root@localhost ~]# echo "this is test" > /abc/demo2   //在/abc下创建demo2并输入this is test
[root@localhost ~]# cd /abc
[root@localhost abc]# ls
demo1  demo2
[root@localhost abc]# cat demo2
this is test
[root@localhost abc]# mkdir test
[root@localhost abc]# ls
demo1  demo2  test
[root@localhost abc]# echo "1,2,3,4,5,6" > ./test/test1.txt   // 在当前目录下的test目录中创建test1.txt并写入内容
[root@localhost abc]# cd test
[root@localhost test]# ls
test1.txt
[root@localhost test]# cat test1.txt 
1,2,3,4,5,6
[root@localhost test]# tree /abc/                   //查看树
/abc/
├── demo1
├── demo2
└── test
    └── test1.txt

1 directory, 3 files
[root@localhost ~]# xfsdump -f /opt/xfs_dump /dev/sdb1       //备份,指定存放在sdb1,/opt/xfs_dump下
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)
-> label
media label entered: "label"

 --------------------------------- end dialog ---------------------------------

…………省略部分内容
[root@localhost ~]# cd /opt                     //切换至/opt查看备份成功
[root@localhost opt]# ls
rh  xfs_dump
[root@localhost opt]# ls -a xfs_dump 
xfs_dump
[root@localhost opt]# cd /abc
[root@localhost abc]# ls
demo1  demo2  test
[root@localhost abc]# rm -rf *          //删除/abc下的所有文件及目录
[root@localhost abc]# ls
[root@localhost abc]# xfsrestore -f /opt/xfs_dump /abc      //将/opt/xfs_dump的备份内容恢复至/abc中
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.4 (dump format 3.0) - type ^C for status and control
…………省略中间部分内容
xfsrestore: Restore Status: SUCCESS
[root@localhost abc]# ls                      //查看内容已恢复
demo1  demo2  test
[root@localhost abc]# cat demo2
this is test
[root@localhost abc]# 

xfsdunp使用限制

  • 只能备份已挂载的文件系统
  • 必须使用root的权限才能操作
  • 只能备份XFS文件系统
  • 备份后的数据只能让xfsrestore解析
  • 不能备份两个具有相同UUID的文件系统

日志文件

日志的功能
  • 用于记录系统、程序运行中发生的各种事件
  • 通过阅读日志,有助于诊断和解决系统故障
日志文件的分类
  • 内核及系统日志

    • 由系统服务syslog统一进行管理,日志格式基本相似
  • 用户日志

    • 记录系统用户登录及退出系统的相关信息
  • 程序日志

    • 由各种应用程序独立管理的日志文件,记录格式不统一

日志需要服务启动之后才会进行有

访问之后才会有记录,才能看到日志记录

日志保存位置
  • 默认位于:/var/log目录下
主要日志文件介绍

在这里插入图片描述

内核及系统日志

由系统服务rsyslogd统一管理
  • 软件包:rsyslog-7.4.7-16.el7.x86_64

  • 主要程序:/sbin/rsyslogd

  • 配置文件:/etc/rsyslog.conf

日志消息的级别
级别 影响
0 EMERG(紧急) 会导致主机系统不可用的情况
1 ALERT(警告) 必须马上采取措施解决的问题
2 CRIT(严重) 比较严重的情况
3 ERR(错误) 运行出现错误
4 WARNING(提醒) 可能会影响系统功能的事件
5 NOTICE(注意) 不会影响系统但值得注意
6 INFO(信息) 一般信息
7 DEBUG(调试) 程序或系统调试信息等
日志记录的一般格式

在这里插入图片描述

用户日志分析

保存了用户登录、退出系统等相关信息

  • /var/log/lastlog:最近的用户登录事件
  • /var/log/wtmp:用户登录、注销及系统开、关机事件
  • /var/run/utmp:当前登录的每个用户的详细信息
  • /var/log/secure:与用户验证相关的安全性事件
分析工具
  • users、who、w、last、lastb

last 之前登陆的用户

lastb 哪些用户用户尝试登陆但未登录成功(登录失败)
在这里插入图片描述

程序日志分析

由相应的应用程序独立进行管理

  • Web服务:/var/log/httpd/

    • access_log、error_log
  • 代理服务:access.log、cache.log

  • FTB服务:/var/log/xferlog

分析工具

  • 文本查看、grep过滤检索、Webmnin管理套件中查看
  • awk、sed等文本过滤、格式化编辑工具
  • Webalizer、Awstats等专用日志分析工具

日志管理策略

  • 及时做好备份和归档
  • 延长日志爆粗期限
  • 控制日志访问权限
    • 日志中可能会包含各类敏感信息,如账户、口令等
  • 集中管理日志
    • 将服务器的日志文件发到统一的日志文件服务器
    • 便于日志信息的统一手机、整理和分析
    • 杜绝日志信息的意外丢失、恶意篡改或删除
内容总结
  • block与inode
  • 硬链接与软链接
  • 恢复误删除的文件
  • Linux主要包含的日志文件
  • Linux系统的日志消息级别
  • Linux系统中用户日志的查询命令
    • who、w、users、last、lastb
发布了72 篇原创文章 · 获赞 44 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ML908/article/details/103374494