选择一个/dev/sda以外的文件系统(比如/dev/sdb1)来存放备份文件:
[root@svr5 ~]# df -hT/home //选择/dev/sdb1存放备份
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sdb1 ext3 19G 173M 18G 1% /home
使用dd命令复制/dev/sda设备的第一个扇区(512字节):
[root@svr5 ~]# dd if=/dev/sdaof=/home/sda.mbr bs=512 count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.013492 seconds,37.9 kB/s
确认已存放到/dev/sdb1下的备份文件:
[root@svr5 ~]# ls -l /home/sda.mbr
-rw-r--r-- 1 root root 512 10-15 15:50/home/sda.mbr
使用dd命令对MBR扇区清零,然后重启系统:
[root@svr5 ~]# dd if=/dev/zero of=/dev/sdabs=512 count=1 //破坏MBR
1+0 records in
1+0 records out
512 bytes (512 B) copied, 2e-05 seconds, 26MB/s
[root@svr5 ~]# reboot //重启系统
.. ..
重启系统后,因磁盘sda的MBR被破坏而无法找到分区表,从而也就无法加载Linux操作系统。如果网络启动或光盘启动也失败,则提示“Operating System not found”而停滞,如图-2所示。
图-2
修改RHEL 5虚拟机的光盘设置,将其改为RHEL 5系统的.iso安装镜像文件,比如rhel-server-5.9-x86_64-dvd.iso,如图-3所示。
图-3
然后重启虚拟机电源,默认将从光盘引导。待出现“boot:”提示界面时,输入“linux rescue”指令,如图-4所示,按回车键。
图-4
此后将逐步进入RHEL 5光盘提供的救援模式,大部分交互接受默认即可。
首先选择要使用的语言,救援模式为命令行、不支持中文,因此接受默认的“English”,按Tab键定位到“Ok”后回车,如图-5所示。
图-5
然后选择要使用的键盘类型,也接受默认设置,如图-6所示。
图-6
接下来选择是否使用网络,一般选择“No”,如图-7所示,否则根据提示设置好网络参数即可。
图-7
再接下来会尝试自动查找待修复的Linux系统,如果找到的话会自动将根分区挂载到光盘临时系统的/mnt/sysimage目录。这里因为MBR损坏而无法读取分区表,所以肯定是找不到的啦,接受默认的“Continue”继续或“Skip”跳过都可以,如图-8所示。
图-8
提示是否初始化磁盘并删除所有数据时(如果有多块磁盘会提示多次),均选择“No”,如图-9所示。
图-9
找不到待修复的Linux系统时,会提示用户知晓,如图-10所示,回车确认即可。
图-10
最终用户将获得一个在内存中运行的临时Shell环境,如图-11所示,从而可以执行大部分系统管理命令,进一步完成各种修复任务。
图-11
创建挂载点文件夹,并挂载存放备份文件的/dev/sdb1分区,如图-12所示,确认备份文件。
图-12
使用dd命令执行恢复,读取备份文件sda.mbr,覆盖磁盘/dev/sda的第一个扇区,如图-13所示。
图-13
完成后,执行exit退出临时Shell环境,系统将会自动重启,如图-14所示。重启后原有Linux系统即可恢复正常。
图-14
注意:万一重启后出现“GRUB_”提示符后停止、仍然无法进入系统,如图-15所示,请参考接下来的GRUB修复操作。
图-15
在正常的Linux操作系统中,转移grub.conf配置文件并重启后可模拟引导故障,或者像前一节的MBR示例中,有时恢复不完整也会出现异常,症状如图-15所示。
如果是手动转移grub.conf配置文件,可参考以下操作:
[root@svr5 ~]# mv/boot/grub/grub.conf /boot/grub/grub.conf.bak
//转移grub.conf文件
[root@svr5 ~]# ls -lh/boot/grub/grub.conf //确认转移结果
ls: /boot/grub/grub.conf: 没有那个文件或目录
[root@svr5 ~]# reboot //重启系统
重启后会停滞在“grub>”提示符,因找不到内核等引导文件而无法进入系统。这个属于MBR扇区中的引导程序好使,但找不到有效的启动配置:
grub> //grub启动配置丢失后,启动时的停滞提示
参考前一节以RHEL 5光盘启动,并进入“linux rescue”救援模式。注意当提示是否探测(如图-8所示)待修复的操作系统时,选择“Continue”,找到并挂载成功后会提示用户确认,如图-16所示。
图-16
这样在修复时就可以直接到/mnt/sysimage找到原来Linux的根目录了。
在救援模式的临时Shell环境下,执行“chroot /mnt/sysimage”切换到待修复Linux的根环境,然后从备份恢复grub.conf配置文件,并执行“grub-install /dev/sda”在磁盘sda上重建GRUB引导程序,如图-17所示。
图-17
确认修复完毕后,执行两次exit(先退出chroot环境、再退出救援模式),系统将会自动重启,如图-18所示。重启后原有的Linux系统即可恢复正常。
图-18
重新进入修复好的Linux系统,选择/dev/sdb1做超级块破坏实验,了解相关的故障现象及修复办法。
理论上此步骤可不做,保险起见还是做一下(必要时,其中的文档最好也备份),万一后面修复不好还有机会还原。若要破坏EXT3文件系统的超级块,一般将前4个扇区dd清零就差不多了,所以备份也保存这4个块:
[root@svr5 ~]# dd if=/dev/sdb1of=/root/sdb1.sblock count=512 count=4
4+0 records in
4+0 records out
2048 bytes (2.0 kB) copied, 4.5e-05seconds, 45.5 MB/s
[root@svr5 ~]# ls -l /root/sdb1.sblock //确认备份文件
-rw-r--r-- 1 root root 2048 10-15 17:31/root/sdb1.sblock
使用dd命令将/dev/sdb1的前4个扇区清零:
[root@svr5 ~]# dd if=/dev/zero of=/dev/sdb1count=512 count=4
4+0 records in
4+0 records out
2048 bytes (2.0 kB) copied, 2.7e-05 seconds,75.9 MB/s
然后卸载/dev/sdb1,尝试重新挂载到/home时将会失败,因为超级块被破坏而导致无法识别该设备上的文件系统:
[root@svr5~]# umount /dev/sdb1 //若已经挂载,则先卸载
[root@svr5 ~]# mount/dev/sdb1 /home //重新挂载失败
mount: you must specify the filesystem type
使用fsck命令可执行修复,通过“-t ext3”指定文件系统类型、“-y”自动对出现的交互选择“yes”确认:
[root@svr5 ~]# fsck -y -t ext3 /dev/sdb1
fsck 1.39 (29-May-2006)
e2fsck 1.39 (29-May-2006)
Couldn't find ext2 superblock, tryingbackup blocks...
/dev/sdb1: recovering journal
fsck.ext3: unable to set superblock flagson /dev/sdb1
执行第2次修复(第1次因块数据不完整,可能只修复部分):
[root@svr5 ~]# fsck -y -t ext3 /dev/sdb1
fsck 1.39 (29-May-2006)
e2fsck 1.39 (29-May-2006)
/dev/sdb1 was not cleanly unmounted, checkforced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong for group #2(32257, counted=32249).
Fix? yes
Free blocks count wrong for group #3(31232, counted=31224).
Fix? Yes
.. ..
Directories count wrong for group #143 (0,counted=4).
Fix? yes
Free inodes count wrong (2443189, counted=2443058).
Fix? yes
/dev/sdb1: ***** FILE SYSTEM WAS MODIFIED*****
/dev/sdb1:142/2443200 files (1.4% non-contiguous), 125963/4885760 blocks
根据实际情况,可能还需要再执行几次fsck,直到最后提示“clean”为止,表示该文件系统已经完好无损:
[root@svr5 ~]# fsck -y -t ext3 /dev/sdb1
fsck 1.39 (29-May-2006)
e2fsck 1.39 (29-May-2006)
/dev/sdb1: clean, 142/2443200 files,125963/4885760 blocks
检查完毕后,再次将其挂载到/home/目录,确认挂载结果:
[root@svr5 ~]# mount /dev/sdb1 /home //挂载成功
[root@svr5 ~]# ls/home //查看挂载的目录内容
aquota.group kdev nick pingpingsda.mbr-20131015 vina
aquota.user kenthy obama rsync.test stu20zengye
hunter lost+found pangpang sda.mbr stu21
在启动项前增加但用户模式密码
[root@RHEL5 ~]# vim /boot/grub/grub.conf
hiddenmenu
password 123456
titleRed Hat Enterprise Linux Server (2.6.18-348.el5)
1)备份/etc/inittab文件
[root@RHEL5~]# cp /etc/inittab /root/
2)删除/etc/inittab文件
[root@RHEL5~]# rm -rf /etc/inittab
3)重启、查看故障现象(INIT:No inittab file found)
4)修复此故障
a)进光盘救援模式
boot: linux rescue
b)chroot /mnt/sysimage
Sh-3.2#chroot /mnt/sysimage
c)检查/etc/inittab文件属于哪个包
Sh-3.2#rpm -qf /etc/inittab
initscripts-8.45.42-1.el5_8.1
d)将RHEL5.9光盘设备挂载到/mnt/dvd/
Sh-3.2#mkdir /mnt/dvd
Sh-3.2#mount /dev/sr0(hdc) /mnt/dvd
e)根据步骤c查询结果,从光盘挂载点安装对应的包
Sh-3.2#rpm -ivh --force
/mnt/dvd/Server/initscripts-8.45.42-1.el5_8.1.x86_64.rpm
Preparing... ###########################################[100%]
1:initscripts ###########################################[100%]
f)exit 退出chroot环境
Sh-3.2#exit
g)exit 退出救援模式,自动重启、修复完成
Sh-3.2#exit
故障现象
--读取磁盘数据时,发出异常声响
--访问某个文件时,读取出错或提示文件损坏
--新建立的分区无法执行格式化
--读写该磁盘时频繁司机
1)检查分区/dev/sda1是否存在坏道
[root@RHEL5 ~]# badblocks -sv /dev/sdb
Checkingblocks 0 to 20971520
Checkingfor bad blocks (read-only test): 0/ done
Passcompleted, 0 bad blocks found.
1.安装extundelete 软件包
yum -y groupinstall 开发工具 开发库 //安装开发工具
./configure //配置
ls
make && make install //编译安装
echo $? //查看状态
cd
rm /boot/vmlinuz-2.6.18-348.el5 //删除测试
Umount /boot
extundelete --inode 2 /dev/sda1 //查看可恢复文件
extundelete --restore-all /dev/sda1 //回复所有可恢复文件
ls RECOVERED_FILES/ //查看恢复目录
Mount /dev/sda1 /boot
mv RECOVERED_FILES/vmlinuz-2.6.18-348.el5 /boot/ //移动删除文件
ls /boot/
i节点耗尽验证(尽管有磁盘空间,但已无法写入文件)
建一个小分区(40MB),
格式化:mkfs -text3 /dev/sdb10
|-->创建超级块(superblock)―― inode数量、blocks数量
查看超级块:tune2fs -l /dev/sdb10
快速消耗i节点资源:
mkdir /mnt/testdir
mount /dev/sdb10 /mnt/testdir
for i in $(seq 15000) ; do touch "/mnt/testdir/file$i.txt" ; done
|--> 设一个超过可用i节点数量的数值
** seq命令用来生成一个数字序列,for是一个循环语句(Shell课程会详细介绍)
** inode,i节点―― 档案编号,每一个文件都需要
** 文件名 --> i节点 --> 文件内容
wget -crpk -np http://www.lfs.org.cn/book/index.html
选项说明:
-r,--recursive:递归下载所有链接
-p,--page-requisites:包括页面显示必需的目标
-k,--convert-links:下载完成后转换链接目标以便本地浏览
-np,--noparent:只向下递归,防止下载父级链接或外部链接等网页对象
-c,--continue:支持断点续传
-t,--tries=:指定重试次数