原因:
以前做的net-server硬盘更换,在分区的时候,boot分区过小。当时查到的资料都说,根分区是静态数据,不需要分过多的数据,128MB足够,为了保险,还搞了256MB的容量。
但在后来ubuntu升级过程中,出现分区不足的情况。原因是 /lib 分区占用过多的硬盘空间。
2.6.22 .14升级到2.6.22.15的过程中,如果没有超过300MB空间,就有可能无法将内核升到2.6.22.15,原因是升级文件无足够空间写入。这种时候就是升级不彻底,容易造成系统不稳定。
发现这个问题以后,做了如下处理:
1、试图将 /lib 复制到新分区。
* 在原始硬盘的自由空间新建分区, 1G 大小,并修改 /etc/fstab 文件,将/lib加载到新分区;
—— 该操作成功,系统可以启动到新分区;
2、将根分区下的 /lib 改名:
* 前一步已将所有的 /lib下的文件copy到新分区(md9),现在就将 /lib 改为 /lib.old,并新建一个目录 /lib
* 重启动后系统失败;理由是找不到 /sbin 下的文件;
后来查资料,说是:
raid的模块在/lib/modules下,但是lib需要这些模块才能驱动. 一个怪圈.
一种解决办法如下:
把raid的驱动放进initrd里面, initrd是内核启动时的小的ram文件系统,主要进行一些模块加载,初始化等.
只要initrd所在的分区是ext3这类能够被grub获取到的文件系统, 其他杂七杂八的文件系统,就由initrd来获取了
3、在前述2个操作不成功的情况下,试图强行删除旧版本: 2.6.22 .14,删除过程中系统挂掉,执行任何命令都会提示 /sbin 下的某文件找不到。
* 处理办法:
利用第一步copy出去的 /lib 文件,复制回根分区。重启动系统后恢复“正常”。但同样因为空间不足无法完成升级,也不能安装别的软件;
* 现在系统的运行条件回到了发现问题的状态。
————————————————————————————————
有人提示说,可以完整移动根分区。看起来是有道理的,但我没有进一步尝试。(此项待试验。)
4、利用mdadm扩容
* 参考文件:扩容.Resizing a RAID1 system partition.
* 新购两块 500G 硬盘。按新方式格式化。不同之处是:
a. 根分区扩为 20G ;
b. Boot分区 1G 位于第五区(扩展分区。原来是第二主分区)
c. /usr分区扩展为 20G
d. 其他不做改变;
分区注意事项
a. 注意:分区的时候要注意容量。先使用fdisk获取原来分区的容量,这是准确数据。新建分区的时候要按原来硬盘的分区数据来分。如 10G 容量,实际应该为 10010.17 MB
b. 分区类型为 0xfd ,linux raid
c. 分区完成后,不需要格式化,暂不需要建立grub;根分区要设置为bootable
过程
a. 参考文档:.Resizing a RAID1 system partition.
b. 在第一个新硬盘同步结束的时候,使用 grub 工具为新硬盘创建启动grub;
c. 关机,强行取下所有老硬盘,将第二个新硬盘挂上;
d. 这时候重启动,会进入 initramfs 维护界面。一般在启动期间发现缺少硬盘,会导致故障 3分钟内可进入。
e. 同步,同步完成后,同样为第二个硬盘创建 grub ;
f. 使用 resize 更改 根分区,/boot 分区 /usr分区的容量;
g. 完成后调整 /boot/grub/menu.lst文件,设置boot为 hd(0,4) 。 以前是 hd(0,1) 因为boot挂载分区已由第二主分区调到第一扩展分区了。
h. 重启动系统,所有功能恢复正常。
i. 使用aptitude ,按g键继续前述的第3项过程。会正确删除 2.6.22 .14 内核,升级到 2.6.22.15内核。
j. *** 有问题的是,此过程结束后,我发现menu.lst的启动根被恢复为 hd(0,1) 编辑后进入系统正常。
k. 重新修改 menu.lst,多次重启动系统都无问题。
l. 运行 apt-get upgrade 进一步升级系统。正常。
余留问题:
a. /grub/boot/menu.lst为什么为恢复到旧系统的配置内容?是否因为前次升级没结束,但升级中的系统配置保留了相关数据?
b. 若我只是将 根移到md9,修改/boot/grub/menu.lst,是否可以正确移动根分区?
c. 怎么做,才可以避免长时间超时才能进入到 initramfs ?
d. 如何做到真正的备份服务器?即做一台新服务器,但定时更新新服务器数据。在主服务器挂掉以后,简单配置备份服务器即可顶上用?