一、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