模拟修复JFS超级块

[复制链接]
查看11 | 回复8 | 2006-12-13 16:50:07 | 显示全部楼层 |阅读模式
环境 平台:pSeries
软件版本:AIX 5L
1. 创建test文件系统
[root@:/] crfs -v jfs -g testvg -a size=10M -m /test
Based on the parameters chosen, the new /test JFS file system
is limited to a maximum size of 134217728 (512 byte blocks)
New File System size is 131072
[root@:/] fsck /dev/lv00
** Checking /dev/rlv00 (/test)
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Inode Map
** Phase 6 - Check Block Map
8 files 4200 blocks 126872 free
2. 模拟破坏超级块
[root@:/] mount /test
[root@:/] od -x -N 100 /dev/lv00 +0×1000
0001000 4321 8765 0000 0000 0000 0800 0000 0001
0001010 0002 0000 1000 0000 2f74 6573 7400 6c76
0001020 3030 0000 002e 0002 0100 0000 47ce 5366
0001030 0000 0000 0000 0000 0000 0000 0000 0000
0001040 0000 0000 000c 2000 0000 0000 47ce 6d39
0001050 0000 0000 47ce 6b61 0000 0000 0000 0000
0001060 0000 0000
0001064
–查看当块头信息
[root@:/] umount /test
–注意这里先umount掉了,如果是在mount情况下执行dd然后再正常umount的话,超级块能正常恢复,这点aix做的还是不错的。
[root@:/] dd bs=4K seek=1 count=1 if=/dev/zero of=/dev/lv00
1+0 records in.
1+0 records out.
[root@:/] od -x -N 100 /dev/lv00 +0×1000
0001000 0000 0000 0000 0000 0000 0000 0000 0000
*
0001060 0000 0000
0001064
–可以看到头部信息已经被破坏,这个时候尝试mount文件系统
[root@:/] mount /test
mount: 0506-324 Cannot mount /dev/lv00 on /test: A system call received a parameter that is not valid.
[root@:/] dd count=1 bs=4k skip=31 seek=1 if=/dev/lv00 of=/dev/lv00
1+0 records in.
1+0 records out.
[root@:/] mount /test
–从备份中恢复后,文件系统正常mount
[root@:/] fsck /test
** Checking /dev/lv00 (/test) MOUNTED FILE SYSTEM; WRITING SUPPRESSED;
Checking a mounted filesystem does not produce dependable results.
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Inode Map
** Phase 6 - Check Block Map
10 files 4200 blocks 126872 free
需要说明的是:
1、这里dd的时候跳过了一个4k大小的lv控制块头信息
2、jfs的secondary superblock的地址固定为block 31。JFS2则有所不同,其默认偏移量为32K,可用fsck命令可自动备份超级块来修复主超级块。
[root@:/] crfs -v jfs2 -g testvg -a size=10M -m /test2
File system created successfully.
65328 kilobytes total disk space.
New File System size is 131072
[root@:/] dd bs=4K seek=8 count=1 if=/dev/zero of=/dev/fslv00
1+0 records in.
1+0 records out.
[root@:/] mount /test2
Replaying log for /dev/fslv00.
mount: 0506-324 Cannot mount /dev/fslv00 on /test2: The media is not formatted or the format is not correct.
[root@:/] fsck /dev/fslv00
The current volume is: /dev/fslv00
fsck: 0507-020 Invalid magic number in the primary superblock.
Primary superblock is corrupt.
Secondary superblock is valid.
J2_LOGREDO:log redo processing for /dev/fslv00
logredo start at: 1204718227 sec and end at 1204718227 sec
Primary superblock is valid.
*** Phase 1 - Initial inode scan
*** Phase 2 - Process remaining directories
*** Phase 3 - Process remaining files
*** Phase 4 - Check and repair inode allocation map
*** Phase 5 - Check and repair block allocation map
File system is clean.
[root@:/] mount /test2
也来发个水贴

http://www.imdba.net/blog/2008/0 ... %e7%b3%bb%e7%bb%9f/
回复

使用道具 举报

千问 | 2006-12-13 16:50:07 | 显示全部楼层
你们还用jfs?
最近挺闲


回复

使用道具 举报

千问 | 2006-12-13 16:50:07 | 显示全部楼层
老的系统吧。呵呵!
jfs2的修复原理也差不多
回复

使用道具 举报

千问 | 2006-12-13 16:50:07 | 显示全部楼层
heh,一般般了...
回复

使用道具 举报

千问 | 2006-12-13 16:50:07 | 显示全部楼层
学习中。。。有点不是很明白,不过总算搞清楚了。也就是说第一个超级块损坏,可以用备份文件的后续超级块来进行恢复。
不知道说清楚了没,新手请见谅。
回复

使用道具 举报

千问 | 2006-12-13 16:50:07 | 显示全部楼层
:victory:
回复

使用道具 举报

千问 | 2006-12-13 16:50:07 | 显示全部楼层
kao,表情怎么出不来.....
回复

使用道具 举报

千问 | 2006-12-13 16:50:07 | 显示全部楼层
最近也遇到超级块损坏的问题。恢复有点麻烦。不知道怎么搞,准备重装数据库。
回复

使用道具 举报

千问 | 2006-12-13 16:50:07 | 显示全部楼层
你的实验好像有fsck就能自动恢复。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行