Linux基础文件系统和日志分析

inode与block详解

inode和block概述

  • 文件数据包括元信息与实际数据
  • 文件储存在硬盘上,硬盘最小储存单位是"扇区",每个扇区储存512字节
  • block(块)
    连续的八个扇区组成一个 block(4K)
    是文件存取的最小单位
  • node (索引节点)
    中文译名为“索引节点”,也叫 i节点
    用于存储文件元信息
    在这里插入图片描述

inode内容

inode 包含很多的文件元信息,但不包含文件名,例如:

  • 文件的字节数
    所在块及块大小、inode号、文件的Group ID、文件拥有者的User ID、文件的读、写、执行权限、文件的时间戳
    Linux系统文件有三个主要的时间属性,分别是ctime(change time),atime(access time),mtime (modify time)
    ctime(change time):最后一次改变文件或目录(属性)的时间,例如执行 chmod、chown命令
    atime(access time):最后一次访问文件或目录的时间
    mtime(modify time):最后一次修改文件或目录(内容)的时间

inode大小

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

[root@localhost ~]# df -i
文件系统                   Inode 已用(I)  可用(I) 已用(I)% 挂载点
devtmpfs                  499014     403   498611       1% /dev
tmpfs                     503269       1   503268       1% /dev/shm
tmpfs                     503269    1512   501757       1% /run
tmpfs                     503269      16   503253       1% /sys/fs/cgroup
/dev/mapper/centos-root 31195136  163018 31032118       1% /
/dev/sda1                 256000     340   255660       1% /boot
tmpfs                     503269      25   503244       1% /run/user/1001
/dev/sr0                       0       0        0        - /run/media/lisi/CentOS 7 x86_64
tmpfs                     503269       1   503268       1% /run/user/0
[root@localhost ~]#

inode的特殊作用

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

inode号码

访问文件的简单流程:
1.系统找到这个文件名对应的inode号码;
2.通过inode 号码,获取inode 信息;
3.根据inode信息,找到文件数据所在的block,读出数据。

查看文件的inode号码
stat 文件名
ls -l 文件名

[root@localhost ~]# touch abc.txt
[root@localhost ~]# stat abc.txt
  文件:"abc.txt"
  大小:0               块:0          IO 块:4096   普通空文件
设备:fd00h/64768d      Inode:67439367    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2023-04-17 14:40:16.283095184 +0800
最近更改:2023-04-17 14:40:16.283095184 +0800
最近改动:2023-04-17 14:40:16.283095184 +0800
创建时间:-
[root@localhost ~]#

inode耗尽故障处理

故障原因:目录中存在数量非常多的小字节缓存文件,占用的block 不多,但是占用了大量的 inode

故障现象:在硬盘还未存满的情况下,就无法在硬盘上创建新的文件
实验步骤:
1.磁盘分区(因为是做实验,磁盘分区设为20M就可以了),并进行初始化和挂载处理

[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+20M
分区 1 已设置为 Linux 类型,大小设为 20 MiB

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   60G  0 disk
├─sda1            8:1    0  500M  0 part /boot
└─sda2            8:2    0 59.5G  0 part
  ├─centos-root 253:0    0 59.5G  0 lvm  /
  └─centos-swap 253:1    0    8M  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk
└─sdb1            8:17   0   20M  0 part
sr0              11:0    1  4.4G  0 rom  /run/media/lisi/CentOS 7 x86_64
[root@localhost ~]#

在这里插入图片描述
2.进/cx 目录下使用,for循环创建多个文件,并确认磁盘占用情况
在这里插入图片描述
3.解决方法,只需要找出该分区中占用大量inode号的空白文件,删除就行。

[root@localhost cx]# rm -rf /root/cx/abc*
[root@localhost cx]# df -i /root/cx
文件系统       Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sdb1       5136      11    5125       1% /root/cx
[root@localhost cx]# df -i /root/cx
文件系统       Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sdb1       5136      11    5125       1% /root/cx
[root@localhost cx]# df -Th /root/cx
文件系统       类型  容量  已用  可用 已用% 挂载点
/dev/sdb1      ext4   19M  450K   17M    3% /root/cx
[root@localhost cx]#

恢复误删除文件

恢复EXT类型的文件

1.在编译安装 extundelete软件包之前,要先安装两个依赖包e2fsprogs-libs和e2fsprogs-devel,使用rpm命令将其安装,安装完毕后,即可将上传的extundelete 软件包解压、配置、编译、安装。

[root@localhost ~]# rpm -q e2fsprogs-devel
e2fsprogs-devel-1.42.9-19.el7.x86_64
[root@localhost ~]# ls
anaconda-ks.cfg  cx  initial-setup-ks.cfg  公共  模板  视频  图片  文档  下载  音乐  桌面
[root@localhost ~]# ls
anaconda-ks.cfg  extundelete-0.2.4.tar.bz2  公共  视频  文档  音乐
cx               initial-setup-ks.cfg       模板  图片  下载  桌面
[root@localhost ~]# tar jxf extundelete-0.2.4.tar.bz2
[root@localhost ~]# ls
anaconda-ks.cfg  extundelete-0.2.4          initial-setup-ks.cfg  模板  图片  下载  桌面
cx               extundelete-0.2.4.tar.bz2  公共                  视频  文档  音乐
[root@localhost ~]# cd /extundelete-0.2.4
bash: cd: /extundelete-0.2.4: 没有那个文件或目录
[root@localhost ~]# cd 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]# ./configure
Configuring extundelete 0.2.4
Writing generated files to disk
[root@localhost extundelete-0.2.4]# make && make install
make -s all-recursive
Making all in src
extundelete.cc: 在函数‘ext2_ino_t find_inode(ext2_filsys, ext2_filsys, ext2_inode*, std::string, int)’中:
extundelete.cc:1272:29: 警告:在 {} 内将‘search_flags’从‘int’转换为较窄的类型‘ext2_ino_t {aka unsigned int}[-Wnarrowing]
    buf, match_name2, priv, 0};
                             ^
Making install in src
  /usr/bin/install -c extundelete '/usr/local/bin'
[root@localhost extundelete-0.2.4]#

2.使用fdisk 命令创建新分区,将其挂载到 /cx 目录下,并创建一下文件和目录
在这里插入图片描述

3.模拟误操作并恢复
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

恢复XFS类型文件

xfsdump -f 备份存放位置 要备份的路径或设备文件
xfsrestore -f 恢复文件的位置 存放恢复后文件的位置

xfsdump备份级别(默认为0)
0: 完全备份
1-9: 增量备份
xfsdump常用选项
选项 说明
-f 指定备份文件目录
-L 指定标签 session label
-M 指定设备标签 media label
-s 备份单个文件,-s 后面不能直接跟路径
xfsdump使用限制
只能备份已挂载的文件系统
必须使用root的权限才能操作
只能备份XFS文件系统
备份后的数据只能让 xfsrestore 解析
不能备份两个具有相同UUID的文件系统(可用 blkid命令查看)
模拟删除并执行恢复操作
1.使用fdisk创建分区/dev/sdh1,格式化xfs文件系统,并进行挂载
在这里插入图片描述
2.使用 xfsdump 命令备份整个分区

[root@localhost lisi]# xfsdump -f /opt/dump_sdh1 /dev/sdh1 -L dump_sdh1 -M sdh1
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.7 (dump format 3.0) - type ^C for status and control
xfsdump: level 0 dump of localhost.localdomain:/lisi
xfsdump: dump date: Mon Apr 17 18:01:35 2023
xfsdump: session id: 54ef3259-0acd-44ab-bed7-111656c96662
xfsdump: session label: "dump_sdh1"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 29632 bytes
xfsdump: /var/lib/xfsdump/inventory created
xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 26488 bytes
xfsdump: dump size (non-dir files) : 4160 bytes
xfsdump: dump complete: 0 seconds elapsed
xfsdump: Dump Summary:
xfsdump:   stream 0 /opt/dump_sdh1 OK (success)
xfsdump: Dump Status: SUCCESS
[root@localhost lisi]# cd /opt
[root@localhost opt]# ls
dump_sdh1  nginx-1.22.0  nginx-1.22.0.tar.gz  rh
[root@localhost opt]#

3.模拟数据丢失并使用 xfsrestore 命令恢复文件
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值