千家信息网

Linux/Centos7系统管理之深入理解Linux文件系统与日志分析

发表于:2024-11-28 作者:千家信息网编辑
千家信息网最后更新 2024年11月28日,前言:inode(文件节点)与block(数据块)硬链接与软连接恢复误删除的文件 (即rm-rf 的操作,可以先进行备份的操作,然后可以进行恢复ext4和xfs文件系统皆可)日志文件的分类用户日志与程
千家信息网最后更新 2024年11月28日Linux/Centos7系统管理之深入理解Linux文件系统与日志分析

前言:

  • inode(文件节点)与block(数据块)
  • 硬链接与软连接
  • 恢复误删除的文件 (即rm-rf 的操作,可以先进行备份的操作,然后可以进行恢复ext4和xfs文件系统皆可)
  • 日志文件的分类
  • 用户日志与程序日志

一 :inode和block概述

1.1 概述

  • 文件数据包括元信息与实际数据
  • 文件存储在硬盘上,硬盘最小存储单位是"扇区",每个扇区储存512字节
  • block(块)
    • 连续的八个扇区组成一个block,一个block单位是4k
    • 是文件存取的最小单位
  • inode(索引节点)
    • 中文译名"索引节点",也叫i节点
    • 用于存储文件元信息

元信息>>>>>>>inode

数据>>>>>>>>>block

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

对于磁盘而言,物理层面一个单元的表示形式是扇区

​ 逻辑层面一个单元的表示形式是单元格

删除文件删的是文件名,而不是block和inode,一个文件名对应一个inode;当一个新文件的重新写入磁盘,覆盖到被删除文件的block时,才意味着文件的实际删除,所以当误删文件时,第一件事就是不要再在磁盘写入文件,通过数据恢复有可能找回到误删文件

1.2 inode的内容

  • inode包含文件的元信息

    • 文件的字节数
    • 文件拥有者(属主)的UID
    • 文件的GID
    • 文件的读写执行权限
    • 文件的时间戳
    • 备注:不包含文件名
  • 用stat命令可以查看某个文件的inode信息;ls -i也可以查看inode号码
  • 示例:stat aa.txt
  • linux系统文件时间戳的三个主要的时间属性

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

    • 目录也是一种文件
    • 目录文件的结构
    • 一个文件名对应一个inode号码,两个字段成为一行,一行称为一个目录项
  • 每个inode都有一个号码,操作系统用inode号码来识别不同的文件

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

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

    1.3用户通过文件名打开文件,系统内部执行过程

  • 用户通过文件名打开文件时,系统内部的过程步骤(这个过程比较重要):

    • 1.系统找到这个文件对应的inode号码
    • 2.通过inode号码,获取inode信息,即元信息
    • 3.根据inode信息,找到文件数据所在的block,读出数据
  • 查看inode号码的方法
    • ls -i命令:查看文件名对应的inode号码
    • ls -i AA.txt
    • stat命令:查看文件inode信息,信息中包含inode号码
    • stat AA.txt
[root@localhost ~]# cd /opt [root@localhost opt]# lsrh[root@localhost opt]# touch abc.txt[root@localhost opt]# vim abc.txt [root@localhost opt]# ls -i '查看元信息'35889299 abc.txt   1420654 rh[root@localhost opt]# stat abc.txt  ''查看文件详细元信息  文件:"abc.txt"  大小:13         块:8          IO 块:4096   普通文件设备:fd00h/64768d Inode:35889299    硬链接:1权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)环境:unconfined_u:object_r:usr_t:s0最近访问:2019-11-16 17:57:53.373111661 +0800最近更改:2019-11-16 17:57:53.373111661 +0800最近改动:2019-11-16 17:57:53.375111659 +0800创建时间:-[root@localhost opt]# df -i '查看挂载点元信息'文件系统                   Inode 已用(I)  可用(I) 已用(I)% 挂载点/dev/mapper/centos-root 10485760  125297 10360463       2% /devtmpfs                  250006     386   249620       1% /devtmpfs                     253986       1   253985       1% /dev/shmtmpfs                     253986     620   253366       1% /runtmpfs                     253986      16   253970       1% /sys/fs/cgroup/dev/sda1                3145728     328  3145400       1% /boot/dev/mapper/centos-home  5242880     286  5242594       1% /hometmpfs                     253986       9   253977       1% /run/user/42tmpfs                     253986      16   253970       1% /run/user/0/dev/sr0                       0       0        0        - /run/media/root/CentOS 7 x86_64tmpfs                     253986      16   253970       1% /run/user/1000//192.168.254.10/linuxs        0       0        0        - /aaa

innode 从一定意义上可以代表有多少个文件

全盘恢复数据原理:即在文件名误删的情况下,去直接扫描inode和block信息

1.4 inode的大小

  • inode也会消耗硬盘空间,每个inode的大小,一般是128字节或256字节
  • 格式化文件系统时确定inode的总数
  • 使用df -i命令可以查看每个硬盘分区的inode总数和已经使用的数量

1.5 inode的特殊作用

  • 由于inode号码与文件名分离,导致一些Unix/Linux系统具有以下的现象
    • 当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件
    • 移动或重命名文件时,只改变文件名,不影响inode号码
    • 打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名

1.6 链接文件

  • 为文件或目录建立链接文件
  • 文件类型
软连接(符号链接)硬链接
删除原始文件(即文件名)后失效仍旧可用
适用范围适用于文件或目录只可用于文件
保存位置与原始文件可以位于不同的文件系统中必须与原始文件在同一个文件系统(xfs系统,或者ext4等)中,如一个Linux分区内
  • 硬链接命令
    • ln 源文件 目标位置
  • 软连接命令
    • ln -s 源文件或目录.. 链接文件或目标位置 -s 即soft

二、文件恢复

2.1恢复EXT类型的文件

  • 编译安装extundelete软件包
    • 安装依赖包
    • 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
  • 模拟删除并执行恢复操作

extundelete软件包只能在centos-6或者centos-5使用,因为centos-6的默认文件系统类型是ext4,centos-5的默认文件类型是ext3

2.2 恢复XFS类型的文件

  • xfsdump命令格式
    • xfsdump -f 备份存放位置 要备份的路径或者设备文件
  • xfsdump备份级别(默认为0)
    • 0:完全备份
    • 1-9:增量备份
  • xfsdump常用选项:
xfsdump --helpxfsdump--帮助xfsdump: version 3.1.4 (dump format 3.0)xfsdump:版本3.1.4(转储格式3.0)xfsdump: usage: xfsdump [ -a (dump DMF dualstate files as offline) ]xfsdump:用法:xfsdump[-(转储DMF双状态文件为离线)][ -b  ][-b <块大小>][ -c  ][-c <媒体变更警报程序>][ -d  ][-d <转储媒体文件大小>][ -e (allow files to be excluded) ][-e(允许文件被排除)][ -f  ...[-f <目的>…]]][ -h (help) ][-h(帮助)][ -l  ][-l ][ -m (force usage of minimal rmt) ][-m(最低rmt的武力使用)][ -o (overwrite tape) ][-o(覆写带)][ -p  ][-p < >进度报告之间的秒数][ -q  ][-q <使用QIC磁带设置>][ -s  ...[-s <子树>…]]][ -t  (use file mtime for dump time ][-t <文件>(使用文件mtime作为转储时间)][ -v  ][-v ][ -z  ][-z <最大文件大小>][ -A (don't dump extended file attributes) ][-(不要转储扩展文件属性)][ -B  ][-B <基本转储会话id>][ -D (skip unchanged directories) ][-D(跳过未更改的目录)][ -E (pre-erase media) ][-E(预删除媒体)][ -F (don't prompt) ][-F(不要提示)][ -I (display dump inventory) ][-I(显示转储库存)][ -J (inhibit inventory update) ][-J(禁止存货更新)][ -K (generate format 2 dump) ][-K(生成格式2转储)][ -L  ][-L <会话标签>][ -M  ...[-M <媒体标签>…]]][ -O  ][-O <选项文件>][ -R (resume) ][-R(简历)][ -T (don't timeout dialogs) ][-T(不要超时对话框)][ -Y  ][-Y ][ - (stdout) ][-(标准版)][  ][<源(mntpnt|设备)>]
  • xfsrestore命令格式(恢复命令):
    • xfsrestore -f 恢复文件的位置 存放恢复后文件的位置
  • 模拟删除并执行恢复操作
  • 备注:必须要先使用xfsdump先备份,才能再用xfsrestore去恢复文件

2.3 xfsdump使用限制

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

三、日志文件

3.1 日志的功能

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

3.2 日志文件的分类

  • 内核及系统日志(服务日志,放在/var/log)

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

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

    • 由各种应用程序独立管理的日志文件,记录格式不统一
    • 程序日志只在程序第一次运行的时候才会产生
    [root@localhost opt]# cd /var/log '切换到日志文件目录'[root@localhost log]# lsanaconda           dmesg               messages  speech-dispatcher       wpa_supplicant.logaudit              dmesg.old           ntpstats  spooler                 wtmpboot.log           firewalld           pluto     sssd                    Xorg.0.logboot.log-20191115  gdm                 ppp       sudo                    Xorg.0.log.oldboot.log-20191116  glusterfs           qemu-ga   tallylog                Xorg.1.logbtmp               grubby_prune_debug  rhsm      tuned                   Xorg.1.log.oldchrony             lastlog             sa        vmware-vgauthsvc.log.0  Xorg.2.logcron               libvirt             samba     vmware-vmsvc.log        Xorg.9.logcups               maillog             secure    vmware-vmusr.log        yum.log[root@localhost log]# rpm -q httpd    '查看程序是否安装'未安装软件包 httpd [root@localhost log]# yum install httpd -y已安装:httpd.x86_64 0:2.4.6-90.el7.centos                                                                      作为依赖被安装:apr.x86_64 0:1.4.8-5.el7       apr-util.x86_64 0:1.5.2-6.el7  httpd-tools.x86_64 0:2.4.6-90.el7.centos mailcap.noarch 0:2.1.41-2.el7 完毕![root@localhost log]# lsanaconda           dmesg.old           ntpstats           sssd                    Xorg.0.log.oldaudit              firewalld           pluto              sudo                    Xorg.1.logboot.log           gdm                 ppp                tallylog                Xorg.1.log.oldboot.log-20191115  glusterfs           qemu-ga            tuned                   Xorg.2.logboot.log-20191116  grubby_prune_debug  rhsm               vmware-vgauthsvc.log.0  Xorg.9.logbtmp               'httpd'               sa                 vmware-vmsvc.log        yum.logchrony             lastlog             samba              vmware-vmusr.logcron               libvirt             secure             wpa_supplicant.logcups               maillog             speech-dispatcher  wtmpdmesg              messages            spooler            Xorg.0.log[root@localhost log]# cd httpd/[root@localhost httpd]# ls    '此时httpd没有日志文件'[root@localhost httpd]# [root@localhost httpd]# systemctl start httpd.service     '开启httpd'[root@localhost httpd]# lsaccess_log  error_log '出现日志文件'[root@localhost httpd]# [root@localhost httpd]# cat access_log    '查看访问日志'[root@localhost httpd]#[root@localhost httpd]# cat error_log     '查看错误日志'[Sat Nov 16 20:43:17.040961 2019] [core:notice] [pid 14701] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0[Sat Nov 16 20:43:17.041673 2019] [suexec:notice] [pid 14701] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message[Sat Nov 16 20:43:17.049635 2019] [lbmethod_heartbeat:notice] [pid 14701] AH02282: No slotmem from mod_heartmonitor[Sat Nov 16 20:43:17.071383 2019] [mpm_prefork:notice] [pid 14701] AH00163: Apache/2.4.6 (CentOS) configured -- resuming normal operations[Sat Nov 16 20:43:17.071420 2019] [core:notice] [pid 14701] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'[root@localhost httpd]# systemctl stop firewalld.service  '关闭防火墙'[root@localhost httpd]# setenforce 0  [root@localhost httpd]# [root@localhost httpd]# ifconfigens33: flags=4163  mtu 1500      inet 192.168.139.153  netmask 255.255.255.0  broadcast 192.168.139.255      inet6 fe80::413b:c9ad:e0e:1afc  prefixlen 64  scopeid 0x20      ether 00:0c:29:d6:c0:8a  txqueuelen 1000  (Ethernet)      RX packets 291080  bytes 77990464 (74.3 MiB)      RX errors 0  dropped 0  overruns 0  frame 0      TX packets 327629  bytes 19778549 (18.8 MiB)      TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@localhost httpd]# cat access_log '再次查看访问日志,有记录了'192.168.139.1 - - [16/Nov/2019:20:49:35 +0800] "GET / HTTP/1.1" 403 4897 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"192.168.139.1 - - [16/Nov/2019:20:49:35 +0800] "GET /noindex/css/bootstrap.min.css HTTP/1.1" 200 19341 "http://192.168.139.153/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"192.168.139.1 - - [16/Nov/2019:20:49:35 +0800] "GET /noindex/css/open-sans.css HTTP/1.1" 200 5081 "http://192.168.139.153/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"192.168.139.1 - - [16/Nov/2019:20:49:35 +0800] "GET /images/apache_pb.gif HTTP/1.1" 200 2326 "http://192.168.139.153/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"192.168.139.1 - - [16/Nov/2019:20:49:35 +0800] "GET /images/poweredby.png HTTP/1.1" 200 3956 "http://192.168.139.153/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"192.168.139.1 - - [16/Nov/2019:20:49:35 +0800] "GET /noindex/css/fonts/Bold/OpenSans-Bold.woff HTTP/1.1" 404 239 "http://192.168.139.153/noindex/css/open-sans.css" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"192.168.139.1 - - [16/Nov/2019:20:49:35 +0800] "GET /noindex/css/fonts/Light/OpenSans-Light.woff HTTP/1.1" 404 241 "http://192.168.139.153/noindex/css/open-sans.css" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"192.168.139.1 - - [16/Nov/2019:20:49:35 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "http://192.168.139.153/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"192.168.139.1 - - [16/Nov/2019:20:49:35 +0800] "GET /noindex/css/fonts/Light/OpenSans-Light.ttf HTTP/1.1" 404 240 "http://192.168.139.153/noindex/css/open-sans.css" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"192.168.139.1 - - [16/Nov/2019:20:49:35 +0800] "GET /noindex/css/fonts/Bold/OpenSans-Bold.ttf HTTP/1.1" 404 238 "http://192.168.139.153/noindex/css/open-sans.css" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"::1 - - [16/Nov/2019:20:49:43 +0800] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.4.6 (CentOS) (internal dummy connection)"::1 - - [16/Nov/2019:20:49:44 +0800] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.4.6 (CentOS) (internal dummy connection)"

3.3 日志保存位置

  • 默认位于:/var/log 目录下
  • 除非使用手动编译安装,可以去指定路径

3.4 主要日志文件介绍

内核及公共消息日志/var/log/messages
计划任务日志/var/long/cron
系统引导日志/var/log/dmesg
邮件系统日志/var/log/maillog
用户登录日志/var/log中的lastlog|secure|wtmp|btmp

四、内核及系统日志

4.1 由系统服务 rsyslogd 统一管理

  • 软件包: rsyslog-7.4.7-16.el7.x86_64
  • 主要程序: /sbin/rsyslogd
  • 配置文件: /etc/rsyslog.conf

4.2 日志消息的级别

级别严重程度解释
0EMERG(紧急)会导致主机系统不可用的情况(基本上已经没得救了,开机都开不了,服务器瘫痪这样的严重程度)
1ALERT(警告)必须马上采取措施解决的问题(兵临城下,需要立刻解决的)
2CRIT(严重)比较严重的情况(严重的错误,比如需要重新安装服务)
3ERR(错误)运行出现错误(一般级别都设置在这个位置)
4WARNING(提醒)可能会影响系统功能的事件(勤快的都设置在这)
5NOTICE(注意)不会影响系统但值得注意
6INFO(信息)一般信息
7DEBUG(调试)程序或系统调试信息等(做测试使用这个级别)

五、 用户日志分析

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

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

5.2 分析的工具

  • users: users [选项]... [文件]

    根据文件判断输出当前有谁正登录在系统上

​ 如果文件未予指定,则使用/var/run/utmp,/var/log/wtmp 是通用的相关文件。

  • who: who [选项]... [ 文件 | 参数1 参数2 ]
    显示当前已登录的用户信息

​ -a, --all 等于-b -d --login -p -r -t -T -u 选项的组合
​ -b, --boot 上次系统启动时间
​ -d, --dead 显示已死的进程
​ -H, --heading 输出头部的标题列
​ -l,--login 显示系统登录进程
​ --lookup 尝试通过 DNS 查验主机名
​ -m 只面对和标准输入有直接交互的主机和用户
​ -p, --process 显示由 init 进程衍生的活动进程
​ -q, --count 列出所有已登录用户的登录名与用户数量
​ -r, --runlevel 显示当前的运行级别
​ -s, --short 只显示名称、线路和时间(默认)
​ -T, -w, --mesg 用+,- 或 ? 标注用户消息状态
​ -u, --users 列出已登录的用户
​ --message 等于-T
​ --writable 等于-T
​ --help 显示此帮助信息并退出
​ --version 显示版本信息并退出

  • w: 显示已经登录的用户以及他们在做什么

  • last:显示最近登录的用户列表

  • lastb:显示最近尝试登陆但未登陆上的用户列表
[root@localhost httpd]# lastroot     pts/0        :0               Sat Nov 16 17:57   still logged in   gsy      :1           :1               Fri Nov 15 09:45   still logged in   root     pts/0        :0               Fri Nov 15 09:30 - 17:56 (1+08:26)   root     :0           :0               Fri Nov 15 09:29   still logged in   reboot   system boot  3.10.0-693.el7.x Fri Nov 15 09:20 - 20:58 (1+11:38)   root     pts/0        :0               Fri Nov 15 08:50 - 09:19  (00:28)    root     :0           :0               Fri Nov 15 08:50 - down   (00:29)    reboot   system boot  3.10.0-693.el7.x Fri Nov 15 08:49 - 09:19  (00:29)    root     pts/0        :0               Fri Nov 15 08:32 - 08:47  (00:14)    root     :0           :0               Fri Nov 15 08:32 - crash  (00:16)    reboot   system boot  3.10.0-693.el7.x Fri Nov 15 08:31 - 09:19  (00:47)    reboot   system boot  3.10.0-693.el7.x Thu Nov 14 20:18 - 08:24  (12:06)    root     pts/0        :0               Thu Nov 14 19:46 - 20:17  (00:31)    root     :0           :0               Thu Nov 14 19:46 - down   (00:31)    reboot   system boot  3.10.0-693.el7.x Thu Nov 14 19:45 - 20:17  (00:32)    root     pts/1        :1               Thu Nov 14 19:11 - 19:42  (00:31)    root     :1           :1               Thu Nov 14 19:10 - crash  (00:34)    gsy      pts/1        :0               Thu Nov 14 17:33 - 17:33  (00:00)    gsy      pts/0        :0               Thu Nov 14 17:26 - 19:42  (02:15)    gsy      pts/0        :0               Fri Nov  1 08:58 - 08:59  (00:00)    gsy      pts/0        :0               Wed Oct 23 13:46 - 13:46  (00:00)    gsy      :0           :0               Wed Oct 23 13:44 - crash (22+06:00)  reboot   system boot  3.10.0-693.el7.x Wed Oct 23 13:42 - 20:17 (22+06:35)  wtmp begins Wed Oct 23 13:42:11 2019

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

  • Web服务:/var/log/httpd/
    • access_log、error_log
  • 代理服务:/var/log/squid/
    • access/log、cacge.log
  • FTP服务:/var/log/xferlog

5.5 分析的工具

  • 文本查看、grep过滤检测、Webmin管理套件中查看
  • awk、swd等文本过滤、格式化编辑工具
  • Webalizer、Awstats(图形化)等专用日志分析的工具

5.6 日志管理策略

  • 及时做好备份和归档
  • 延长日志保存期限
  • 控制日志访问权限
    • 日志中可能会包含各类敏感信息,如账户、口令等
  • 集中管理日志
    • 将服务器的日志文件发送到统一的日志文件服务器
    • 便于日志信息的统一收集、整理和分析
    • 杜绝日志信息的意外丢失、恶意篡改或删除
    • 集中管理日志使用分布式存储的话会使用GFS或MFS

日志文件的作用:可以用来判断服务器是否故障、用于备份的作用

小结:

  • block与iinode
  • 硬链接与软连接
  • 恢复误删除的文件
  • Linux主要包含的日志文件
  • Linux系统的日志消息级别
  • Linux系统中用户日志的查询命令
    • who、w、users、last、lastb

六、实验验证磁盘数据恢复

6.1:xfs 恢复

新加一块磁盘


[root@localhost ~]# init 6  '关机重启'
[root@localhost ~]# fdisk /dev/sdb  '给磁盘分区'[root@localhost ~]# mkfs.xfs /dev/sdb1  '格式化磁盘'meta-data=/dev/sdb1              isize=512    agcount=4, agsize=1310656 blks         =                       sectsz=512   attr=2, projid32bit=1         =                       crc=1        finobt=0, sparse=0data     =                       bsize=4096   blocks=5242624, imaxpct=25         =                       sunit=0      swidth=0 blksnaming   =version 2              bsize=4096   ascii-ci=0 ftype=1log      =internal log           bsize=4096   blocks=2560, version=2         =                       sectsz=512   sunit=0 blks, lazy-count=1realtime =none                   extsz=4096   blocks=0, rtextents=0[root@localhost ~]# mkdir /ceshi    '创建测试挂载点'[root@localhost ~]# vim /etc/fstab  '编辑挂载点配置文件'/dev/mapper/centos-swap swap                    swap    defaults        0 0/dev/sdb1       /ceshi  xfs     defaults        0       0:wq[root@localhost ~]# mount -a    '重新挂载'[root@localhost ~]# df -Th  '查看'文件系统                类型      容量  已用  可用 已用% 挂载点/dev/mapper/centos-root xfs        20G  4.5G   16G   23% /devtmpfs                devtmpfs  977M     0  977M    0% /devtmpfs                   tmpfs     993M     0  993M    0% /dev/shmtmpfs                   tmpfs     993M  9.0M  984M    1% /runtmpfs                   tmpfs     993M     0  993M    0% /sys/fs/cgroup/dev/sda1               xfs       6.0G  161M  5.9G    3% /boot/dev/mapper/centos-home xfs        10G   57M   10G    1% /hometmpfs                   tmpfs     199M  4.0K  199M    1% /run/user/42tmpfs                   tmpfs     199M   20K  199M    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% /ceshi '已挂载上'[root@localhost ~]# cd /ceshi   '切换到测试挂载点'[root@localhost ceshi]# cp /etc/passwd /etc/shadow ./   '复制账号文件到/ceshi下'[root@localhost ceshi]# lspasswd  shadow[root@localhost ceshi]# mkdir test  '创建一个test目录'[root@localhost ceshi]# mv sh* test '把shadow移动到test内'[root@localhost ceshi]# lspasswd  test[root@localhost ceshi]# ls testshadow[root@localhost ceshi]# xfsdump -f /opt/xfs_dump /ceshi '备份文件到/opt/下,名为xfs_dump'xfsdump: using file dump (drive_simple) strategyxfsdump: 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) -> xfs_dumpsession label entered: "xfs_dump"   '输入会话标签为xfs_dump' --------------------------------- end dialog ---------------------------------xfsdump: level 0 dump of localhost.localdomain:/ceshixfsdump: dump date: Sat Nov 16 21:50:26 2019xfsdump: session id: c175a633-fd65-433f-ac2e-a1a18ae5f686xfsdump: session label: "xfs_dump"xfsdump: ino map phase 1: constructing initial dump listxfsdump: ino map phase 2: skipping (no pruning necessary)xfsdump: ino map phase 3: skipping (only one dump stream)xfsdump: ino map construction completexfsdump: estimated dump size: 29952 bytesxfsdump: /var/lib/xfsdump/inventory created ============================= media label dialog =============================please enter label for media in drive 0 (timeout in 300 sec) -> /ceshimedia label entered: "/ceshi"   '输入媒体标签' --------------------------------- end dialog ---------------------------------xfsdump: creating dump session media file 0 (media 0, file 0)xfsdump: dumping ino mapxfsdump: dumping directoriesxfsdump: dumping non-directory filesxfsdump: ending media filexfsdump: media file size 27128 bytesxfsdump: dump size (non-dir files) : 4160 bytesxfsdump: dump complete: 62 seconds elapsedxfsdump: Dump Summary:xfsdump:   stream 0 /opt/xfs_dump OK (success)xfsdump: Dump Status: SUCCESS   '反馈成功'[root@localhost ceshi]# ls /opt/abc.txt  rh  xfs_dump   '备份文件已做好'[root@localhost ceshi]# rm -fr *    '删掉源文件'[root@localhost ceshi]# ls[root@localhost ceshi]# xfsrestore -f /opt/xfs_dump /ceshi  '把在/opt/下面的备份文件xfs_dump还原'xfsrestore: using file dump (drive_simple) strategyxfsrestore: version 3.1.4 (dump format 3.0) - type ^C for status and controlxfsrestore: searching media for dumpxfsrestore: examining media file 0xfsrestore: dump description: xfsrestore: hostname: localhost.localdomainxfsrestore: mount point: /ceshixfsrestore: volume: /dev/sdb1xfsrestore: session time: Sat Nov 16 21:50:26 2019xfsrestore: level: 0xfsrestore: session label: "xfs_dump"xfsrestore: media label: "/ceshi"xfsrestore: file system id: 30939ae0-e0df-4561-b8bc-fc4ebe99c7f2xfsrestore: session id: c175a633-fd65-433f-ac2e-a1a18ae5f686xfsrestore: media id: c4244361-30d3-4df5-9197-e6712eb8d8bdxfsrestore: using online session inventoryxfsrestore: searching media for directory dumpxfsrestore: reading directoriesxfsrestore: 2 directories and 3 entries processedxfsrestore: directory post-processingxfsrestore: restoring non-directory filesxfsrestore: restore complete: 0 seconds elapsedxfsrestore: Restore Summary:xfsrestore:   stream 0 /opt/xfs_dump OK (success)xfsrestore: Restore Status: SUCCESS     '反馈成功'[root@localhost ceshi]# lspasswd  test        '查看发现存在'[root@localhost ceshi]# 

6.2 EXT4 文件恢复

新加一块磁盘


[root@gsy ~]# df -Th    '查看yum私有仓库是否挂载'Filesystem              Type     Size  Used Avail Use% Mounted on/dev/sda2               ext4      20G  3.2G   16G  18% /tmpfs                   tmpfs    996M  224K  996M   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//192.168.254.10/linuxs cifs     455G   90G  366G  20% /linuxs/dev/sr0                iso9660  3.6G  3.6G     0 100% /yumcangku[root@gsy Packages]# rpm -ivh e2fsprogs-libs-1.41.12-18.el6.x86_64.rpm  '安装环境包'warning: e2fsprogs-libs-1.41.12-18.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEYPreparing...                ########################################### [100%]    package e2fsprogs-libs-1.41.12-18.el6.x86_64 is already installed[root@gsy Packages]# rpm -ivh libcom_err-devel-1.41.12-18.el6.x86_64.rpm warning: libcom_err-devel-1.41.12-18.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEYPreparing...                ########################################### [100%]    package libcom_err-devel-1.41.12-18.el6.x86_64 is already installed[root@gsy Packages]# rpm -ivh e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm warning: e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEYPreparing...                ########################################### [100%]    package e2fsprogs-devel-1.41.12-18.el6.x86_64 is already installed[root@gsy Packages]# mkdir /linuxs  '创建挂载点'[root@gsy Packages]# mount //192.168.254.10/linuxs /linuxs  '源地址是我的共享文件夹,想知道如何配置共享文件夹可以去看我的博客,我会在评论中附上对应博客地址'[root@gsy Packages]# cd /linuxs[root@gsy linuxs]# lsapr-1.4.6.tar.gz       extundelete-0.2.4.tar.bz2  john-1.8.0.tar.gzapr-util-1.4.1.tar.gz  httpd-2.4.2.tar.gz[root@gsy linuxs]# tar xjvf extundelete-0.2.4.tar.bz2  -C /mnt  '解压extundelete'[root@gsy linuxs]# cd /mnt[root@gsy mnt]# lsextundelete-0.2.4[root@gsy mnt]# cd extundelete-0.2.4/   '切换到解压包内'[root@gsy extundelete-0.2.4]# lsacinclude.m4  config.h     config.status  depcomp     Makefile     missing  stamp-h2aclocal.m4    config.h.in  configure      install-sh  Makefile.am  READMEautogen.sh    config.log   configure.ac   LICENSE     Makefile.in  src[root@gsy extundelete-0.2.4]# yum install gcc gcc-c++ -y    '安装手工编译安装工具'[root@gsy extundelete-0.2.4]# ./configure   '配置'Configuring extundelete 0.2.4Writing generated files to disk[root@gsy extundelete-0.2.4]# make  make -s all-recursiveMaking all in src[root@gsy extundelete-0.2.4]# make install  '编译'Making install in src  /usr/bin/install -c extundelete '/usr/local/bin'[root@gsy extundelete-0.2.4]# fdisk /dev/sdb    '创建磁盘分区,默认即可'[root@gsy extundelete-0.2.4]# mkfs -t ext4 /dev/sdb1    '格式化,磁盘格式为ext4'mke2fs 1.41.12 (17-May-2010)文件系统标签=操作系统:Linux块大小=4096 (log=2)分块大小=4096 (log=2)Stride=0 blocks, Stripe width=0 blocks1310720 inodes, 5241198 blocks262059 blocks (5.00%) reserved for the super user第一个数据块=0Maximum filesystem blocks=4294967296160 block groups32768 blocks per group, 32768 fragments per group8192 inodes per groupSuperblock backups stored on blocks:     32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,     4096000正在写入inode表: 完成                            Creating journal (32768 blocks): 完成Writing superblocks and filesystem accounting information: 完成This filesystem will be automatically checked every 29 mounts or180 days, whichever comes first.  Use tune2fs -c or -i to override.[root@gsy extundelete-0.2.4]# mkdir /data   '创建磁盘挂载点'[root@gsy extundelete-0.2.4]# mount /dev/sdb1 /data[root@gsy extundelete-0.2.4]# df -ThFilesystem              Type     Size  Used Avail Use% Mounted on/dev/sda2               ext4      20G  3.2G   16G  18% /tmpfs                   tmpfs    996M  224K  996M   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//192.168.254.10/linuxs cifs     455G   90G  366G  20% /linuxs/dev/sr0                iso9660  3.6G  3.6G     0 100% /yumcangku/dev/sdb1               ext4      20G  172M   19G   1% /data[root@gsy extundelete-0.2.4]# cd /data[root@gsy data]# lslost+found[root@gsy data]# echo a>a[root@gsy data]# echo a>b   '创建测试文件'[root@gsy data]# echo c>c[root@gsy data]# lsa  b  c  lost+found[root@gsy data]# rm -rf b   '删掉一个'[root@gsy data]# ls a  c  lost+found[root@gsy data]# cd ../[root@gsy /]# umount /data  '先取消挂载,不要再再里面写东西,以免覆盖'[root@gsy /]# 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 / ... 0 recoverable inodes found.Looking through the directory structure for deleted files ... 0 recoverable inodes still lost.    No files were undeleted.    ''没有恢复成功[root@gsy /]# cd[root@gsy ~]# mount /dev/sdb1 /data '再次挂载'[root@gsy ~]# lsanaconda-ks.cfg  install.log.syslog  模板  图片  下载  桌面install.log      公共的              视频  文档  音乐[root@gsy ~]# ls /dataa  c  lost+found[root@gsy ~]# rm -rf /data/a /data/c    '再次删除测试'[root@gsy ~]# ls /datalost+found[root@gsy ~]# umount /data[root@gsy ~]# extundelete /dev/sdb1 --restore-allNOTICE: Extended attributes are not restored.Loading filesystem metadata ... 160 groups loaded.Loading journal descriptors ... 30 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@gsy ~]# ls    '查看家目录'anaconda-ks.cfg  install.log.syslog  公共的  视频  文档  音乐install.log      RECOVERED_FILES     模板    图片  下载  桌面[root@gsy ~]# ls RECOVERED_FILES/   '切换到恢复文件目录中'a  c[root@gsy ~]# cd RECOVERED_FILES/[root@gsy RECOVERED_FILES]# cp a c /mnt '把文件拷贝到/mnt'[root@gsy RECOVERED_FILES]# ls /mnta  c  extundelete-0.2.4 '成功,回复数据也是有几率,不是百分百成功的'[root@gsy RECOVERED_FILES]# 

七、总结

​ 本文主要是介绍了Linux文件系统的相关知识,对于想对应的常见故障进行检测和排障最为关键。这就需要我们对Linux系统中的常见日志文件熟悉掌握,及时解决各种问题。

0