如何修复linux系统文件

RTAI以及LFS   2008-05-08 10:17   阅读48   评论0  
字号:    

昨天天运行了一个程序,然后出错,重启,文件就都变成只读的了;

删除文件时,提示:
rm: cannot remove `plast3.dat': Input/output error
dmesg的显示:
Mount JFS Failure: -22
XFS mounting filesystem hda1
Starting XFS recovery on filesystem: hda1 (logdev: internal)
XFS internal error XFS_WANT_CORRUPTED_GOTO at line 1617 of file fs/xfs/xfs_a
lloc.c.  Caller 0xc021318f
 [<c0212a25>] xfs_free_ag_extent+0x54c/0x7c7
 [<c021318f>] xfs_free_extent+0xa7/0xc3
 [<c021318f>] xfs_free_extent+0xa7/0xc3
 [<c0251ef9>] xlog_recover_finish+0x200/0x37b
 [<c0257bf4>] xfs_mountfs+0xff8/0x115b
 [<c0110418>] default_wake_function+0x0/0x15
 [<c044fe2f>] __down_failed+0x7/0xc
 [<c027e68a>] generic_unplug_device+0x0/0x68
 [<c025f3cd>] xfs_mount+0x937/0xa08
 [<c020970d>] xfs_qm_parseargs+0x266/0x270
 [<c02718a3>] xfs_fs_fill_super+0x91/0x22e
 [<c028a173>] snprintf+0x2b/0x2f
 [<c018f8ec>] disk_name+0x84/0x8e
 [<c017e7f9>] sb_set_blocksize+0x1e/0x42
 [<c015bb68>] get_sb_bdev+0xfa/0x152
 [<c013f3b5>] __alloc_pages+0x54/0x2a7
 [<c0156219>] __kmalloc+0x74/0x7e
 [<c0270f73>] xfs_fs_get_sb+0x37/0x3b
 [<c0271812>] xfs_fs_fill_super+0x0/0x22e
 [<c015aee5>] vfs_kern_mount+0x49/0x7c
 [<c015af7d>] do_kern_mount+0x3c/0x4e
 [<c01706e8>] do_mount+0x6b3/0x70c
 [<c0161a4e>] do_lookup+0x59/0x16b
 [<c016a147>] dput+0x22/0x1f0
 [<c013f1ef>] get_page_from_freelist+0x255/0x3c7
 [<c016ee75>] mntput_no_expire+0x1b/0xd4
 [<c013f1ef>] get_page_from_freelist+0x255/0x3c7
 [<c0110418>] default_wake_function+0x0/0x15
 [<c044fe2f>] __down_failed+0x7/0xc
 [<c027e68a>] generic_unplug_device+0x0/0x68
 [<c025f3cd>] xfs_mount+0x937/0xa08
 [<c020970d>] xfs_qm_parseargs+0x266/0x270
 [<c02718a3>] xfs_fs_fill_super+0x91/0x22e
 [<c028a173>] snprintf+0x2b/0x2f
 [<c018f8ec>] disk_name+0x84/0x8e
 [<c017e7f9>] sb_set_blocksize+0x1e/0x42
 [<c015bb68>] get_sb_bdev+0xfa/0x152
 [<c013f3b5>] __alloc_pages+0x54/0x2a7
 [<c0156219>] __kmalloc+0x74/0x7e
 [<c0270f73>] xfs_fs_get_sb+0x37/0x3b
 [<c0271812>] xfs_fs_fill_super+0x0/0x22e
 [<c015aee5>] vfs_kern_mount+0x49/0x7c
 [<c015af7d>] do_kern_mount+0x3c/0x4e
 [<c01706e8>] do_mount+0x6b3/0x70c
 [<c0161a4e>] do_lookup+0x59/0x16b
 [<c016a147>] dput+0x22/0x1f0
 [<c013f1ef>] get_page_from_freelist+0x255/0x3c7
 [<c016ee75>] mntput_no_expire+0x1b/0xd4
 [<c013f1ef>] get_page_from_freelist+0x255/0x3c7
 [<c01560e2>] cache_alloc_refill+0x438/0x4fb
 [<c013f3b5>] __alloc_pages+0x54/0x2a7
 [<c013fa95>] __get_free_pages+0x1a/0x33
 [<c016ed7b>] copy_mount_options+0x27/0x106
 [<c01707de>] sys_mount+0x9d/0xde
 [<c055a960>] mount_block_root+0xd1/0x22a
 [<c0163fa5>] sys_mknod+0x27/0x2b
 [<c055ab36>] mount_root+0x7d/0x82
 [<c055ac0b>] prepare_namespace+0xd0/0x10e
 [<c015816c>] sys_access+0x1f/0x23
 [<c01004f0>] init+0x17f/0x253
 [<c0102b07>] ret_from_fork+0x7/0x1c
 [<c0102cb3>] restore_nocheck_notrace+0x0/0xd
 [<c0100371>] init+0x0/0x253
 [<c0100371>] init+0x0/0x253
 [<c0102f1f>] kernel_thread_helper+0x7/0x10
 =======================
Ending XFS recovery on filesystem: hda1 (logdev: internal)
VFS: Mounted root (xfs filesystem) readonly.


解决方法:

1.       首先刻一张lfslivecd并插入lfslivecd到电脑或者另外找一个host

2.       找一张读卡器,取出pc104cf卡,插上并接入到host

注意:如果用的是虚拟机,那么等虚拟机重启了,再把cf卡通过usb读卡器插进电脑,另外我们的情况,cf卡的设备号是/dev/sda1

3.       通过

mkdir /mnt/directory

mount –t [type] /dev/device /mnt/directory

然后ls /mnt/directory确认里面的内容是不是cf卡上的内容

最后umount /mnt/directory

4.       先用fsck –t xfs –a /dev/device 修复,但是发现不行。

5.       接着用xfs_check –n /dev/device检查,发现还是不行,最后用xfs_repair /dev/device修复,成功。

 

有些机子不一定有xfs_repair,可以安装一个xfsprogs

ftp://oss.sgi.com/projects/xfs/download/cmd_tars/xfsprogs_2.8.18-1.tar.gz

安装方法,参考http://www.linuxfromscratch.org/blfs/view/6.2.0/postlfs/xfsfs.html

tar xvf xfsprogs_2.8.18-1.tar.gz

cd xfsprogs-2.8.18

先安装xfs

sed -i '/autoconf/d' Makefile &&

make DEBUG=-DNDEBUG INSTALL_USER=root INSTALL_GROUP=root \

    LOCAL_CONFIGURE_OPTIONS="--enable-readline=yes"

然后

make install &&
make install-dev &&
install -v -m755 -D libhandle/libhandle.la /usr/lib/libhandle.la &&
chmod -v 755 /lib/libhandle.so* &&
rm -f /lib/libhandle.{a,la,so} &&
ln -svf ../../lib/libhandle.so.1 /usr/lib/libhandle.so

就可以了。

评论(?)
阅读(?)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
网易公司版权所有 ©1997-2009