linux文件系统和日志分析!

Posted 龙少。

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux文件系统和日志分析!相关的知识,希望对你有一定的参考价值。

一.inode和block

概述

文件数据包括元信息和实际数据。

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

block(块)

是文件存储的最小单位,一个block大小为512*8=4k,连续8个扇区组成一个block。

inode(索引节点)

也叫i节点,用于存储文件元信息。

inode的元信息

包括文件的字节数,UID,GID,读写执行权限,时间戳,

每一个文件都有一个inode,一般大小是128/256字节。格式化文件系统时就会确定inode的总数。

元信息,外在属性信息,有个指向指向block,内容不在inode里面,内容存在block里。

所有inode 一起形成inode table

简述文件的读取过程

/etc/1.txt文件读取过程
先通过inodetable信息先对比目录的inode找到目录,再到目录下通过inode table找文件对应inode,然后指引到文件对应的block读取相对应的内容。

inode的特殊作用

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

stat命令

stat 文件名
查看文件的inode信息

[root@localhost ~]# touch 321
[root@localhost ~]# stat 321
  文件:"321"
  大小:0         	块:0          IO 块:4096   普通空文件
设备:803h/2051d	Inode:540601712   硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2021-05-17 17:04:39.414082547 +0800 //atime
最近更改:2021-05-17 17:04:39.414082547 +0800 //mtime
最近改动:2021-05-17 17:04:39.414082547 +0800 //ctime
创建时间:-

atime 访问文件时间

mtime 修改文件内容时间

ctime 修改文件属性元信息时间

ll -i 321 可以查看到inode号

[root@localhost ~]# ll -i 321
540601712 -rw-r--r--. 1 root root 0 517 17:04 321

查看目录下所有文件的inode号
ll -i

[root@localhost ~]# ll -i
总用量 12
537174932 drwxr-xr-x. 2 root root    6 429 17:05 11
537174945 -rw-r--r--. 1 root root    0 430 16:26 123
537174958 -rw-r--r--. 1 root root    0 430 16:26 145
537174971 -rw-r--r--. 1 root root    0 430 16:26 195
807079074 drwxr-xr-x. 2 root root    6 429 17:05 22
540601711 -rw-r--r--. 1 root root    7 517 14:15 252
540601712 -rw-r--r--. 1 root root    0 517 17:04 321
    16257 drwxr-xr-x. 2 root root    6 429 17:05 33
537174934 -rw-r--r--. 1 root root    0 427 19:53 a
537174938 drwxr-xr-x. 2 root root    6 430 01:48 aa
537174916 -rw-------. 1 root root 1938 422 19:38 anaconda-ks.cfg
537174935 -rw-r--r--. 1 root root    0 427 19:53 b
807079076 drwxr-xr-x. 2 root root    6 430 01:48 bb
537174926 -rw-r--r--. 1 root root 1966 422 11:40 initial-setup-ks.cfg
537174939 -rw-r--r--. 1 root root    0 430 16:23 qq
       64 drwxr-xr-x. 2 root root    6 516 13:27 tom
807088658 drwxr-xr-x. 2 root root    6 57 14:28 公共
537174944 drwxr-xr-x. 2 root root    6 57 14:28 模板
807088661 drwxr-xr-x. 2 root root    6 57 14:28 视频
537174955 drwxr-xr-x. 2 root root    6 57 14:28 图片
    16266 drwxr-xr-x. 2 root root    6 57 14:28 文档
268475040 drwxr-xr-x. 2 root root    6 57 14:28 下载
268475041 drwxr-xr-x. 2 root root    6 57 14:28 音乐
    16261 drwxr-xr-x. 2 root root    6 57 14:28 桌面

查看文件系统inode号
df -i

[root@localhost ~]# df -i
文件系统           Inode 已用(I)   可用(I) 已用(I)% 挂载点
/dev/sda3      155610624  157983 155452641       1% /
devtmpfs          228957     457    228500       1% /dev
tmpfs             232906       1    232905       1% /dev/shm
tmpfs             232906    1035    231871       1% /run
tmpfs             232906      16    232890       1% /sys/fs/cgroup
/dev/sdd1        1048576       3   1048573       1% /root/tom
/dev/sda1          92520     341     92179       1% /boot
tmpfs             232906       6    232900       1% /run/user/42
tmpfs             232906      21    232885       1% /run/user/0
/dev/sr0               0       0         0        - /run/media/root/CentOS 7 x86_64
/dev/md0        20951040       3  20951037       1% /raid0

查看指定文件对应的文件系统的统计信息
stat -f 文件名

[root@localhost ~]# stat -f 321
  文件:"321"
    ID80300000000 文件名长度:255     类型:xfs
块大小:4096       基本块大小:4096
    块:总计:77767322   空闲:76374866   可用:76374866
Inodes: 总计:155610624  空闲:155452641

看xfs文件系统的inode节点大小
ext4文件系统用dumpe2fs

xfs_info /dev/sda1

[root@localhost ~]# xfs_info /dev/sda1
meta-data=/dev/sda1              isize=512    agcount=4, agsize=12800 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=51200, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

isize表示为inode大小;agcount为存储区群组(allocation group)的个数
sectsz指逻辑扇区(sector)的容量大小
bsize指block容量大小
sunit与swidth与stripe相关
internal指登录区(log p)在文件系统内部,而不在外部
bsize指占用区块大小,blocks为数量

dumpe2fs /dev/sda1 | grep -i “inode size”

// An highlighted block
var foo = 'bar';

二.硬链接与软链接

为文件或者目录建立链接文件
链接文件有两种,一种类似于Windows系统的快捷方式,可以快速连接到目标文件或目录,另一种则是通过文件系统的inode链接来产生的新文件名,而不产生新文件,这种就是硬链接

硬链接

文件名和inode号码是对应关系,每个inode号码对应一个文件名,
用ln 源文件 目标文件 来创建硬链接

[root@localhost ~]# ll
总用量 8
-rw-------. 1 root root 1600 520 22:45 anaconda-ks.cfg
-rw-r--r--. 1 root root 1648 520 22:47 initial-setup-ks.cfg

[root@localhost ~]# touch aa
[root@localhost ~]# ll
总用量 8
-rw-r--r--. 1 root root    0 521 00:32 aa
-rw-------. 1 root root 1600 520 22:45 anaconda-ks.cfg
-rw-r--r--. 1 root root 1648 520 22:47 initial-setup-ks.cfg

[root@localhost ~]# ln aa aa1
[root@localhost ~]# ll
总用量 8
-rw-r--r--. 2 root root    0 521 00:32 aa
-rw-r--r--. 2 root root    0 521 00:32 aa1
-rw-------. 1 root root 1600 520 22:45 anaconda-ks.cfg
-rw-r--r--. 1 root root 1648 520 22:47 initial-setup-ks.cfg

[root@localhost ~]# ll -i
总用量 8
33575036 -rw-r--r--. 2 root root    0 521 00:32 aa
33575036 -rw-r--r--. 2 root root    0 521 00:32 aa1
33574980 -rw-------. 1 root root 1600 520 22:45 anaconda-ks.cfg
33574990 -rw-r--r--. 1 root root 1648 520 22:47 initial-setup-ks.cfg
[root@localhost ~]# echo '123456' > aa
[root@localhost ~]# cat aa
123456
[root@localhost ~]# cat aa1
123456
[root@localhost ~]# rm - rf aa
rm: 无法删除"-": 没有那个文件或目录
rm: 无法删除"rf": 没有那个文件或目录
rm:是否删除普通文件 "aa"?rm
[root@localhost ~]# ll
总用量 16
-rw-r--r--. 2 root root    7 521 00:34 aa
-rw-r--r--. 2 root root    7 521 00:34 aa1
-rw-------. 1 root root 1600 520 22:45 anaconda-ks.cfg
-rw-r--r--. 1 root root 1648 520 22:47 initial-setup-ks.cfg
[root@localhost ~]# rm - rf aa
rm: 无法删除"-": 没有那个文件或目录
rm: 无法删除"rf": 没有那个文件或目录
rm:是否删除普通文件 "aa"?y
[root@localhost ~]# ll
总用量 12
-rw-r--r--. 1 root root    7 521 00:34 aa1
-rw-------. 1 root root 1600 520 22:45 anaconda-ks.cfg
-rw-r--r--. 1 root root 1648 520 22:47 initial-setup-ks.cfg
[root@localhost ~]# cat aa1
123456
[root@localhost ~]# 

总结:
硬链接不能对目录创建,也不能跨文件系统创建。

创建硬链接的inode号是一样的。

硬链接,相当于是源文件的备份,硬链接的内容随着源文件的内容而改变备份,但是删除源文件不影响硬链接的文件,硬链接的文件内容还在。

软链接

软链接就是在创建一个新文件,inode不再相同,而这个文件会让数据的读取指向它链接的那个文件的文件名,并且软链接文件依赖源文件存在,如果删除源文件的话软链接就会失效
用ln -s 源文件 目标文件 来创建软链接

[root@localhost ~]# touch bb
[root@localhost ~]# ln -s bb /opt
[root@localhost ~]# ll -i
总用量 12
33575036 -rw-r--r--. 1 root root    7 521 00:34 aa1
33574980 -rw-------. 1 root root 1600 520 22:45 anaconda-ks.cfg
33819081 -rw-r--r--. 1 root root    0 521 01:06 bb
33574990 -rw-r--r--. 1 root root 1648 520 22:47 initial-setup-ks.cfg
[root@localhost ~]# ll -i /opt
总用量 0
16826114 lrwxrwxrwx. 1 root root 2 521 01:11 bb -> bb
18710876 drwxr-xr-x. 2 root root 6 1031 2018 rh
[root@localhost ~]# echo '321321' > bb
[root@localhost ~]# cat bb
321321

[root@localhost ~]# rm -rf bb
[root@localhost ~]# ll /opt
总用量 0
lrwxrwxrwx. 1 root root 2 521 01:11 bb -> bb
drwxr-xr-x. 2 root root 6 1031 2018 rh
[root@localhost ~]# cat bb
cat: bb: 没有那个文件或目录
[root@localhost ~]# 

总结
软链接相当于是快捷方式

查看软链接的inode 号和源文件是不同的。

软连接可以跨文件系统

创建软链接会发现软链接文件会闪烁

删除源文件,会发现软链接文件还在,但是无法访问查看

三.恢复误删除的文件

xfsdump备份
xfsrestore还原
恢复的前提要做备份

1.xfsdump备份选项说明

xfsdump -f 备份文件位置 备份的路径或者设备文件

-L 卷标
-M 媒体标准
-l 级别
-I 备份后查看状态具体信息

2.备份的级别

0 完全备份 默认为0,第一次备份都是需要完全备份
1-9 增量备份 只备份增加的
差异备份 只备份不一样的

3.xfsdump备份,删除,还原操作演示

①格式化硬盘,挂载,创建新文件

[root@localhost ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   30G  0 disk 
├─sdb1            8:17   0    2G  0 part 
└─sdb2            8:18   0    5G  0 part 
sr0              11:0    1 1024M  0 rom  

[root@localhost ~]# mkdir /opt/bak

[root@localhost ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

[root@localhost ~]# mount /dev/sdb1 /opt/bak

[root@localhost /]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        17G  4.2G   13G   25% /
devtmpfs                devtmpfs  894M     0  894M    0% /dev
tmpfs                   tmpfs     910M     0  910M    0% /dev/shm
tmpfs                   tmpfs     910M   11M  900M    2% /run
tmpfs                   tmpfs     910M     0  910M    0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  179M  836M   18% /boot
tmpfs                   tmpfs     182M  8.0K  182M    1% /run/user/42
tmpfs                   tmpfs     182M   24K  182M    1% /run/user/0
/dev/sdb1               xfs       2.0G   33M  2.0G    2% /opt/bak


[root@localhost ~]# cd /opt/bak
[root@localhost bak]# ls

[root@localhost bak]# touch 3 4 5 6 
linux文件系统和日志分析!

深入理解Linux文件系统与日志分析

Linux——深入理解linux文件系统与日志分析

linux 文件系统(重点)和日志分析

分析和排查系统故障笔记

分析和排查系统故障笔记