一、inode和block概述
1.文件、扇区
文件是存储在硬盘上的,硬盘的最小存储单位叫做“扇区”(sector),每个扇区存储512字节。
2.块(block)
一般连续八个扇区组成一个"块"(block),一个块是4K大小,是文件存取的最小单位,文件数据存储在“块”中。
3.文件数据
文件数据包括实际数据与元信息(类似文件属性)。
文件数据存储在“块”中,文件元信息存储在inode中。
4.inode(索引节点)
inode不包含文件名。文件名是存放在目录当中的。Linux 系统中一切皆文件,因此目录也是一种文件。
inode是存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域。
二、查看文件的inode号
ls -i 查看文件的iode号
ls -li
stat anaconda-ks.cfg 查看指定文件
三、模拟inode节点耗尽实验
fdisk /dev /sdb #管理磁盘
mkfs.xfs /dev/sdb1 #格式化磁盘
mkdir /sdb1 #创建/目录下sdb1目录,用于挂载
mount /dev/sdb1 / sdb1 #挂载
df -i #查询可用inode号
for( (i=l;i<=7700;i++) ) ;do touch /sdb1$i ; done;
步骤:
- 关闭虚拟机,编辑虚拟机设置,添加新硬盘,这里我们随便给20G,点击下一步并确认,开启虚拟机
- 管理磁盘,创建磁盘
- 进行挂载之前需先确定文件系统类型,进行格式化,格式为ext3
- 在根目录下创建一个子目录/sdb1用于挂载
- 查看挂载表,确认文件系统类型更改成功
- 查看inode号
- 使用for循环创建文件,超出inode号范围是否会无法创建
- 经过查看挂载表,发现有容量却无法再创建文件 若想再创建文件,仅需将内部文件删除,解除inode占用即可
结论:磁盘内可用inode号使用完后,即使磁盘还剩余空间也无法再创建文件。
三、文件存储
用户访问文件的流程:
用户访问文件时,先通过文件名根据文件名查找到inode号,系统根据inode号找到对应的inode信息,根据inode信息去判断用户是否具备访问权限,有权限就去读取相应的数据,没有权限就拒绝访问
四、xfs类型文件修复
1.CentOS 7 系统默认采用 xfs类型的文件,xfs 类型的文件可使用 xfsdump 与 xfsrestore 工具进行备份恢复。
2.xfsdump 命令常用的选项:
-f:指定备份文件目录
-L:指定标签 session label
-M:指定设备标签 media label
-s:备份单个文件,-s 后面不能直接跟路径
3.xfsdump使用限制:
- 只能备份已挂载的文件系统
- 必须使用root的权限才能操作
- 只能备份XFS文件系统
- 备份后的数据只能让xfsrestore解析
- 不能备份两个具有相同UUID的文件系统(可用 blkid命令查看)
实验步骤:
使用fdisk创建分区/dev/sdb1,格式化xfs文件系统
1. fdisk /dev/sdb
2. partprobe /dev/sdb
3. mkfs.xfs /dev/sdb1
4. mkdir /sdb1
5. mount /dev/sdb1 /sdb1
6. cd /sdb1
7. cp /etc/passwd ./
8. mkdir test
9. touch test/a
使用 xfsdump 命令备份整个分区
1. yum install -y xfsdump
2. xfsdump -f /opt/dump_sdb1 /dev/sdb1 -L dump_sdb1 -M sdb1
模拟数据丢失并使用 xfsrestore 命令恢复文件
1. cd /sdb1
2. rm -rf ./*
3. xfsrestore -f /opt/dump_sdb1 /sdb1