11.1深入理解Linux文件系统

在处理Liunx系统出现故障时,故障的症状是最易发现。数学LInux系统中常见的日志文件,可以帮助管理员快速定位故障点,并及时解决各种系统问题。

11.1.1 inode与block详解

文件系统通常会将这两部分内容分别存放在inode和block中

1.inode和block概述

  • 操作系统读取硬盘时,多个扇区(每个扇区512字节)组成的块,最常见的是4KB及连续8个扇区组成一个block
  • 在块中必须找到一个地方储存文件的元信息,这个区域叫inode。一个文件必须占用一个inode,但至少占用一个block。

2.inode的内容

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

[root@localhost ~]# stat anaconda-ks.cfg 
  文件:"anaconda-ks.cfg"                                                #文件名字
  大小:1592          块:8          IO 块:4096   普通文件             #文件大小
设备:fd00h/64768d    Inode:268632130   硬链接:1
权限:(0600/-rw-------)  Uid:(    0/    root)   Gid:(    0/    root)
环境:system_u:object_r:admin_home_t:s0
最近访问:2024-05-27 21:33:26.425066604 +0800                            #是最后一次改变文件或目录的时间
最近更改:2024-05-27 21:33:26.434067124 +0800                            #是最后一个访问文件或目录的时间
最近改动:2024-05-27 21:33:26.434067124 +0800                            
#是最后一个修改文件或目录的时间
创建时间:-

3.inode的号码

用户在访问文件时,表面上是用户通过文件名来打开文件,而实际系统内部的过程分成以下三步:

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

常见的查看inode号码方式有两种

    • ls -i命令:直接查看文件名所对应的inode号码
    • stat命令:通过查看文件inode信息而查看到inode号码
[root@localhost ~]# stat anaconda-ks.cfg 
  文件:"anaconda-ks.cfg"                                              
  大小:1592          块:8          IO 块:4096   普通文件             
设备:fd00h/64768d    Inode:268632130   硬链接:1                               #inode号268632130
权限:(0600/-rw-------)  Uid:(    0/    root)   Gid:(    0/    root)
环境:system_u:object_r:admin_home_t:s0
最近访问:2024-05-27 21:33:26.425066604 +0800                            
最近更改:2024-05-27 21:33:26.434067124 +0800                           
最近改动:2024-05-27 21:33:26.434067124 +0800                            
创建时间:-
[root@localhost ~]# ls -i anaconda-ks.cfg                                     #inode号268632130
268632130 anaconda-ks.cfg

硬盘分区后的结构则是如图:

11-Linux文件系统与日志分析插图

4.inode的大小

inode也会消耗硬盘空间,所以格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区,存放inode所包含的信息。inode总数在格式化时就给定了,执行“df -i”命令即可查看每个硬盘分区对应的的inode总数和已经使用的inode数量。

[root@localhost ~]# df -i
文件系统                    Inode 已用(I)   可用(I) 已用(I)% 挂载点
devtmpfs                   116635     446    116189       1% /dev
tmpfs                      120245       2    120243       1% /dev/shm
tmpfs                      120245     606    119639       1% /run
tmpfs                      120245      19    120226       1% /sys/fs/cgroup
/dev/mapper/centos-root 100661248   64569 100596679       1% /
/dev/sda2                 2097152     331   2096821       1% /boot
/dev/sr0                        0       0         0        - /media/cdrom
tmpfs                      120245       1    120244       1% /run/user/0
[root@localhost ~]# 
  • 文件名包括特殊字符,可能无法正常删除,这时直接删除inode,能够起到文件的作用
  • 移动文件或一个重名名文件,只是改变文件名,不影响inode号码
  • 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名

11.1.2 硬链接与软连接

  1. 硬链接允许多个文件指向一个同一个inode号,但不能跨分区。其命令格式为
    ln 源文件  目标

  2. 软连接是再创建一个独立文件,因此可以跨分区。其命令格式为
ln -s 源文件或目录 目标文件或目录

11.1.3 EXT类型文件恢复

EXT类型文件恢复主要涉及在Linux系统中,当使用如

rm命令误删除EXT(如EXT3)文件系统上的文件时,采取的一系列步骤和工具来尝试恢复这些文件。以下是关于EXT3类恢复误删除文件。

  1. EXT3数据恢复

    [root@localhost ~]# http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2      #下载tar包 
    [root@localhost ~]# yum -y install e2fsprogs-devel e2fsprogs-libs gcc*                                                  #下载依赖
    [root@localhost ~]# tar -xvf extundelete-0.2.4.tar.bz2                                                                  #解压下载的安装包
    [root@localhost extundelete-0.2.4]# make                                                                                #编译
    [root@localhost extundelete-0.2.4]# make
     install                                                                        #编译加载
    [root@localhost extundelete-0.2.4]# fdisk /dev/sdb                                                                      #分区                                                        
    [root@localhost ~]# mkdir aaa                                                                                           #创建挂载点
    [root@localhost ~]# mkfs.ext3 /dev/sdb1                                                                                 #初始化成ext3类型
    [root@localhost ~]# mount /dev/sdb1 aaa                                                                                 #挂载到aaa
    [root@localhost ~]# cd aaa                                                                                              #cd得到aaa文件下并创建
    [root@localhost aaa]# echo a>a
    [root@localhost aaa]# echo b>b
    [root@localhost aaa]# echo c>c
    [root@localhost aaa]# echo d>d
    [root@localhost aaa]# ls  
    a  b  c  d  lost+found
    [root@bogon ~]# extundelete /dev/sdb1
    [root@bogon ~]# cd aaa
    [root@bogon aaa]# rm -rf a b
    [root@bogon aaa]# cd 
    [root@bogon ~]# umount aaa
    [root@bogon ~]# extundelete /dev/sdb1 --restore-all
    [root@bogon ~]# cd RECOVERED_FILES/
    [root@bogon RECOVERED_FILES]# ls
    file.12  file.13
    [root@bogon RECOVERED_FILES]# 

11.2.4日志管理

在Linux中,设置和配置一个日志服务器通常涉及到多个步骤,包括安装必要的软件包、配置日志文件的传输和存储等。以下是一个简化的步骤,使用rsyslog(或syslog-ng)和logrotate来管理日志,以及(可选的)使用Elasticsearch, Logstash, Kibana (ELK Stack) 来进行日志的集中存储、分析和可视化。

1. 使用rsyslog或syslog-ng收集日志

以rsyslog为例,你可以编辑/etc/rsyslog.conf或相关的配置文件来设置日志的接收和转发。以下是一个简化的配置示例,用于接收来自其他系统的UDP日志:

# /etc/rsyslog.conf 示例   
 # 允许接收UDP日志  $ModLoad imudp  $UDPServerRun 514   
  # 允许接收TCP日志(可选)  
  #$ModLoad imtcp  #$InputTCPServerRun 514  
    
  # 设置默认的日志文件路径和模板(可选) 
   $template RemoteLogs,"/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log"  & ~ ?RemoteLogs   

 重启rsyslog服务以应用更改:

 systemctl restart rsyslog

2. 使用logrotate管理日志文件大小

你可以编辑/etc/logrotate.conf或/etc/logrotate.d/目录下的文件来设置日志文件的轮转策略。以下是一个示例:

# /etc/logrotate.d/remote 示例   
 /var/log/remote/*/*.log
  {       
    
    missingok
    monthly
    create 0664 root utmp
    minsize 10M
    rotate 2
} 
      }

本站无任何商业行为
个人在线分享 » 11-Linux文件系统与日志分析
E-->