一、inode和block


1.块→block

硬盘划分为磁头(Heads)、柱面(Cylinder)、扇区(Sector)。
磁头(Heads):每张磁片的正反两面各有一个磁头,一个磁头对应一张磁片的一个面。因此,用第几磁头就可以
                            表示数据在哪个磁面。
柱面(Cylinder):所有磁片中半径相同的同心磁道构成“柱面",意思是这一系列的磁道垂直叠在一起,就形成一
                          个柱面的形状。简单地理解,柱面就是磁道。
扇区(Sector):将磁道划分为若干个小的区段,就是扇区。虽然很小,但实际是一个扇子的形状,故称为扇区。
                          每个扇区的容量为512字节,是硬盘最小的存储单位。
块(Block)是系统读取单位,一个块大小为4KB,由8个扇区组成

存储容量=磁头数×柱面数×扇区数×每扇区字节数

2.元信息→inode(一个文件/目录占用一个)

注:当磁盘有剩余空间,但inode用尽时,不能存储任何内容

inode内容

(1)文件大小
(2)文件所有者
(3)文件所有组
(4)文件权限
(5)文件创建时间

查看inode

stat 文件         //查看指定文件的inode信息;ls -i 文件也可简单查看文件对应inode号
df -i               //查看硬盘所有的inode号,已使用inode等信息
ls -i 文件 //查看指定文件的inode号
ls -id 目录  //查看指定目录的inode号
dumpe2fs -h 分区 | grep  -i "Inode size"  //查看指定磁盘分区inode号占用大小

find / -type f -empty //搜索系统中所有为空的文件

数据读取流程

(1)系统通过文件找到inode号
(2)通过inode,寻找inode信息
(3)根据inode信息,找到文件所对应的block位置,读取数据

注:一个文件的inode号一般不用更改,只有当删除文件时会释放

i节点耗尽

df -i               //查看硬盘IFree的inode剩余情况
rm -rf 文件           //删除硬盘下文件,会自动释放inode号

案例:测试i节点耗尽

(1)新增1G硬盘分区并挂载

fdisk /dev/sdb --> n --> p --> 1 --> 回车 --> 回车 --> w
mkfs -t ext4 /dev/sdb1
mkdir /data
mount /dev/sdb1 /data/

(2)模拟故障

df -i /dev/sdb1
touch /data/{1..65269}

(3)测试

touch /data/ab      //报错,磁盘空间不足
rm -rf /data/1
touch /data/ab      //可正常创建
touch /data/ac      //报错

二、硬链接与软链接


1.硬链接

 ln 源文件 目标文件

特点

a.对其中一个内容修改,其余全部同步
b.当删除其中一个文件时,不影响其余文件
c.链接的大小为源文件大小
d.只支持链接文件

2.软链接

 ln -s 源文件 目标文件

特点

a.对其中一个内容修改,其余全部同步
b.当删除源文件/目录时,目标文件/目录不能使用
c.目标/文件不占用空间
d.可链接文件/目录

三、案例:恢复误删除文件,恢复误删除分区


针对ext4文件系统(debugfs、ext3grep、extundelete);testdisk可恢复分区表

1.安装依赖包

yum -y install e2fsprogs-*

2.上传extundelete软件包,并编译安装

tar -jxvf extundelete-0.2.4.tar.bz2
cd ~/extundelete-0.2.4/
./configure --prefix=/usr/local/ex && make && make install
cd /usr/local/ex/bin

3.使用

touch /data/11111
mkdir /data/aa/
rm -rf /data/11111          //删除文件,测试
./extundelete /dev/sdb1 --restore-all   //恢复磁盘被删除内容
ls RECOVERED_FILES/     //查看恢复目录下是否有恢复完成的文件
./extundelete /dev/sdb1 --restore-file=11111        //只恢复名为11111的文件
./extundelete /dev/sdb1 --restore-inode=12      //只恢复inode为12的文件
./extundelete /dev/sdb1 --restore-directory=aa      //只恢复aa目录及其下所有文件内容
./extundelete /dev/sdb1 --inode=2           //查看/dev/sdb1所有被误删除的文件名及inode号

4.testdisk恢复分区表

tar -jxvf testdisk-7.1-WIP.linux26-x86_64.tar.bz2   //解压testdisk软件包
mv testdisk-7.1-WIP /data/     //移动到别的硬盘中
dd if=/dev/zero of=/dev/sda bs=512 count=1    //模拟磁盘MBR引导损坏
reboot    //重启,无法进入系统

放入光盘,进入恢复模式

mkdir /a && mount /dev/sdb1 /a      //新建目录/a,并挂载磁盘/dev/sdb1到/a
/a/testdisk-7.1-WIP/testdisk_static /dev/sda --> Proceed(选择需恢复的磁盘)-->intel(选择磁盘分区类型)-->Analyse(分析磁盘分区情况)-->Write(回车,将搜索到的分区表写入到磁盘中)-->y-->quit
chroot /mnt/sysimage   //进入原系统环境
grub-install /dev/sda           //重新安装grub引导程序
reboot