Skip to main content

再次遭遇reiserfs文件系统错误

为了重现上次文件系统的问题,也为了找到上次出问题的原因,我又一次捣鼓了休眠的功能。

这次是用菜单休眠的,按理说应该没什么问题,但是由于重启是用我自己编译的内核启动的,而且参数似乎没设对,因此没能自动唤醒,而是正常启动。中间似乎有个关于swap的服务,显示fail,不过当时我没注意。另外值得注意的是,这次启动过程中fsck.reiserfs有些replay的动作。

后来进行了很多操作,按了一些软件包,其中还创建的新的用户和组。没任何异常。但是重启时,我又想起来了那个resume参数,加上以后,也没什么异常,直接关机了。

但是再次重启后,问题重现了。首先是一堆reiserfs的错误,应该是上次开机后进行了大量文件操作的缘故。之后自然shell也进不去了。

***

这一次,问题的原因很明显了,应该就是休眠时文件系统没有同步,然后正常启动后把那些操作都replay了,之后进行的新的操作,然后我又恢复了休眠时的状态,这样造成了文件系统的错乱。

本想着用上次的办法骗来一个shell,但是这次告诉我PAM failure之类的错误,我心想坏了,估计/etc/passwd之类的文件挂了,因为上次开机后中间新建了用户和组。

***

有了上次的经验,我估计不用安装盘没戏了,花了一天下了个Ubuntu 7.10 alternate的CD,然后从ubuntu网站xxx上下了硬盘安装所需要的hd-media文件,vmlinuz和initrd.gz.准备用它恢复。

由于我本身有grub,而且能够正常运行,因此不需要下而外的grub4dos,我把vmlinuz, initrd.gz和CD映像放在移动硬盘里,开机前插上。启动进入grub后,进入shell,输入

kernel (hd1,0)/vmlinuz root=/dev/ram0 ramdisk_size=170000 devfs=mount,dall
initrd (hd1,0)/initrd.gz
boot

于是从移动硬盘启动了,看到选择语言界面后,按Alt+F2换个控制台,按回车就出来个busybox。


不过遗憾的是它虽然支持reiserfs,但是没有reiserfsck,几分钟后我想到了可以把那块磁盘只读挂载,这样也许就不用检查了,果然如此。

之后就可以用那个盘上的reiserfsck来修复了,这次不需要中间super block(应该是上次已经重建过的缘故),只需要--rebuild-tree 和 --check就可以了。另外我用了chroot,但是似乎不用也可以运行reiserfsck。

这次也没花很长时间,但是报的错误比上次多很多,而且有很多关键的文件。我心里一时没了底,但是心里明白,都是安装软件惹得祸,特别是还创建了用户和组,弄不好就。。。

***

本以为一些就像上次一样顺利,但是重启后虽然没有reiserfs的错误,却出来一堆modprobe的错误,之后shell也进不去,仍然是PAM failure。

我再次用hd-media启动,挂载磁盘一看,/lib/modules/ 竟然都没了!不过是意料之外,情理之中。另外我查看了一下/etc/passwd,/etc/group,/etc/shadow等文件,都是莫名其妙的xml文件(后来知道是/etc里的另一个文件,应该是指针交叉了),幸好还有/etcpasswd-,/etc/group-,/etc/shadow-,于是简单恢复了一下,以为没事了。

用另一个内核启动后,虽然没有modprobe的问题,但是仍然有PAM failure,我估计文件系统乱得够呛了,决定重装。

***

首先要备份的当然是~,之后是/usr/local,还有一些/etc/下的配置文件(我后来挑拣出来一些我修改过的备份出来)

另一个要备份的就是已安装的软件,我查到可以用dpkg --get-selections得到列表,于是用hd-media启动,然后chroot,但是运行时告我/var/lib/dpkg/status错误,我一看,压根儿没这个文件,一下没招儿了,肯定是当时装软件时弄的。不过又一想,重装是对的,系统估计也很难恢复了,而且我正好也想重分一下区,换换文件系统。

最后一个备份的就是/var/cache/apt/archieves,这是apt存档留下的deb文件,虽然不全,但是可能能省点带宽,所以也备份了。

***

重装前我还想调整一下分区,有个不常用的FAT分区,我想腾出点空间给linux,于是下了个Partition Magic,另外要注意的调整后是否还能启动,因为现在硬盘上有grub,是在Linux分区上,因此用PM只是把那个FAT分区分割,而没有跟Linux分区合并,否则就不能启动了。

***

参考了wiki.ubuntu.org上关于硬盘安装ubuntu的文章,知道可以把iso放FAT硬盘上,hd-media可以自动识别(伟大!),于是为了快一些就把移动硬盘上的iso挪到了一个FAT硬盘上,重启。

重装时对分区动了些脑筋,有31G的空间,最后的结果如下

12G XFS linux系统
15G XFS /home
1.5G swap
0.5G reiserfs /boot
2G reiserfs 一个最小系统,以及hd-media和ubuntu映像,用于紧急情况

其他就没什么了,等着便是

***

不一会儿装好了,剩下就是把那些文件拷回去,再补上却的软件了。不过考虑到我家网费,还是决定回学校再装软件,所以现在只是把文件拷回去了。但是现在软件,库之类的版本不一,仍然不大敢用,就等着更新软件了。

***

尾声&总结

1.找到了上次问题的原因,以后要慎用休眠,以及自己编译的内核,毕竟ubuntu的内核多了很多东西,或者挂个initrd是否会好些?另外就是正常启动时要让休眠镜像失效
2.分区分区!
3.备份备份!
4.查了查资料,这次换成了XFS,不知会如何
5.ubuntu重装,总的来说,还是很容易的,最好是联着网装,这样直接装最新的,省去了不少时间
6.不要太相信文件系统如何如何安全,我倒不是针对reiserfs,其实它确实挺好的

Comments

Popular posts from this blog

Determine Perspective Lines With Off-page Vanishing Point

In perspective drawing, a vanishing point represents a group of parallel lines, in other words, a direction. For any point on the paper, if we want a line towards the same direction (in the 3d space), we simply draw a line through it and the vanishing point. But sometimes the vanishing point is too far away, such that it is outside the paper/canvas. In this example, we have a point P and two perspective lines L1 and L2. The vanishing point VP is naturally the intersection of L1 and L2. The task is to draw a line through P and VP, without having VP on the paper. I am aware of a few traditional solutions: 1. Use extra pieces of paper such that we can extend L1 and L2 until we see VP. 2. Draw everything in a smaller scale, such that we can see both P and VP on the paper. Draw the line and scale everything back. 3. Draw a perspective grid using the Brewer Method. #1 and #2 might be quite practical. #3 may not guarantee a solution, unless we can measure distances/p...

[转] UTF-8 and Unicode FAQ for Unix/Linux

这几天,这个东西把我搞得很头疼 而且这篇文章好像太大了,blogger自己的发布系统不能发 只好用mail了 //原文 http://www.cl.cam.ac.uk/~mgk25/unicode.html UTF-8 and Unicode FAQ for Unix/Linux by Markus Kuhn This text is a very comprehensive one-stop information resource on how you can use Unicode/UTF-8 on POSIX systems (Linux, Unix). You will find here both introductory information for every user, as well as detailed references for the experienced developer. Unicode has started to replace ASCII, ISO 8859 and EUC at all levels. It enables users to handle not only practically any script and language used on this planet, it also supports a comprehensive set of mathematical and technical symbols to simplify scientific information exchange. With the UTF-8 encoding, Unicode can be used in a convenient and backwards compatible way in environments that were designed entirely around ASCII, like Unix. UTF-8 is the way in which Unicode is used under Unix, Linux, and similar systems. It is now time to make sure that you are well familiar ...

Moving Items Along Bezier Curves with CSS Animation (Part 2: Time Warp)

This is a follow-up of my earlier article.  I realized that there is another way of achieving the same effect. This article has lots of nice examples and explanations, the basic idea is to make very simple @keyframe rules, usually just a linear movement, then use timing function to distort the time, such that the motion path becomes the desired curve. I'd like to call it the "time warp" hack. Demo See the Pen Interactive cubic Bezier curve + CSS animation by Lu Wang ( @coolwanglu ) on CodePen . How does it work? Recall that a cubic Bezier curve is defined by this formula : \[B(t) = (1-t)^3P_0+3(1-t)^2tP_1+3(1-t)t^2P_2+t^3P_3,\ 0 \le t \le 1.\] In the 2D case, \(B(t)\) has two coordinates, \(x(t)\) and \(y(t)\). Define \(x_i\) to the be x coordinate of \(P_i\), then we have: \[x(t) = (1-t)^3x_0+3(1-t)^2tx_1+3(1-t)t^2x_2+t^3x_3,\ 0 \le t \le 1.\] So, for our animated element, we want to make sure that the x coordiante (i.e. the "left" CSS property) is \(...