linux文件系统和日志分析!
Posted 龙少。
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux文件系统和日志分析!相关的知识,希望对你有一定的参考价值。
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 5月 17 17:04 321
查看目录下所有文件的inode号
ll -i
[root@localhost ~]# ll -i
总用量 12
537174932 drwxr-xr-x. 2 root root 6 4月 29 17:05 11
537174945 -rw-r--r--. 1 root root 0 4月 30 16:26 123
537174958 -rw-r--r--. 1 root root 0 4月 30 16:26 145
537174971 -rw-r--r--. 1 root root 0 4月 30 16:26 195
807079074 drwxr-xr-x. 2 root root 6 4月 29 17:05 22
540601711 -rw-r--r--. 1 root root 7 5月 17 14:15 252
540601712 -rw-r--r--. 1 root root 0 5月 17 17:04 321
16257 drwxr-xr-x. 2 root root 6 4月 29 17:05 33
537174934 -rw-r--r--. 1 root root 0 4月 27 19:53 a
537174938 drwxr-xr-x. 2 root root 6 4月 30 01:48 aa
537174916 -rw-------. 1 root root 1938 4月 22 19:38 anaconda-ks.cfg
537174935 -rw-r--r--. 1 root root 0 4月 27 19:53 b
807079076 drwxr-xr-x. 2 root root 6 4月 30 01:48 bb
537174926 -rw-r--r--. 1 root root 1966 4月 22 11:40 initial-setup-ks.cfg
537174939 -rw-r--r--. 1 root root 0 4月 30 16:23 qq
64 drwxr-xr-x. 2 root root 6 5月 16 13:27 tom
807088658 drwxr-xr-x. 2 root root 6 5月 7 14:28 公共
537174944 drwxr-xr-x. 2 root root 6 5月 7 14:28 模板
807088661 drwxr-xr-x. 2 root root 6 5月 7 14:28 视频
537174955 drwxr-xr-x. 2 root root 6 5月 7 14:28 图片
16266 drwxr-xr-x. 2 root root 6 5月 7 14:28 文档
268475040 drwxr-xr-x. 2 root root 6 5月 7 14:28 下载
268475041 drwxr-xr-x. 2 root root 6 5月 7 14:28 音乐
16261 drwxr-xr-x. 2 root root 6 5月 7 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"
ID:80300000000 文件名长度: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 5月 20 22:45 anaconda-ks.cfg
-rw-r--r--. 1 root root 1648 5月 20 22:47 initial-setup-ks.cfg
[root@localhost ~]# touch aa
[root@localhost ~]# ll
总用量 8
-rw-r--r--. 1 root root 0 5月 21 00:32 aa
-rw-------. 1 root root 1600 5月 20 22:45 anaconda-ks.cfg
-rw-r--r--. 1 root root 1648 5月 20 22:47 initial-setup-ks.cfg
[root@localhost ~]# ln aa aa1
[root@localhost ~]# ll
总用量 8
-rw-r--r--. 2 root root 0 5月 21 00:32 aa
-rw-r--r--. 2 root root 0 5月 21 00:32 aa1
-rw-------. 1 root root 1600 5月 20 22:45 anaconda-ks.cfg
-rw-r--r--. 1 root root 1648 5月 20 22:47 initial-setup-ks.cfg
[root@localhost ~]# ll -i
总用量 8
33575036 -rw-r--r--. 2 root root 0 5月 21 00:32 aa
33575036 -rw-r--r--. 2 root root 0 5月 21 00:32 aa1
33574980 -rw-------. 1 root root 1600 5月 20 22:45 anaconda-ks.cfg
33574990 -rw-r--r--. 1 root root 1648 5月 20 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 5月 21 00:34 aa
-rw-r--r--. 2 root root 7 5月 21 00:34 aa1
-rw-------. 1 root root 1600 5月 20 22:45 anaconda-ks.cfg
-rw-r--r--. 1 root root 1648 5月 20 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 5月 21 00:34 aa1
-rw-------. 1 root root 1600 5月 20 22:45 anaconda-ks.cfg
-rw-r--r--. 1 root root 1648 5月 20 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 5月 21 00:34 aa1
33574980 -rw-------. 1 root root 1600 5月 20 22:45 anaconda-ks.cfg
33819081 -rw-r--r--. 1 root root 0 5月 21 01:06 bb
33574990 -rw-r--r--. 1 root root 1648 5月 20 22:47 initial-setup-ks.cfg
[root@localhost ~]# ll -i /opt
总用量 0
16826114 lrwxrwxrwx. 1 root root 2 5月 21 01:11 bb -> bb
18710876 drwxr-xr-x. 2 root root 6 10月 31 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 5月 21 01:11 bb -> bb
drwxr-xr-x. 2 root root 6 10月 31 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文件系统和日志分析!