一次Linux系统移植经验分享

一次Linux系统移植经验分享

  问题描述:
  两台同型号的服务器(两台机器上运行HA,通过HA来监控他们的应用以及Oracle数据库)由于用户操作不当,造成一台服务器无法正常关机(能关闭内核,但不能关闭电源),尝试了在内核中加入电源管理的参数,仍然不能解决。更郁闷的是用户没有安装光盘,无法重装系统,那么唯一的办法就是把另外一台机器上的根分区移植到这台机器上。

  解决方法:
  本想使用dd来拷贝根分区,但无奈硬盘空间不够,所以只有使用tar来备份了,tar的方法其实很简单,但像根分区下的一些/proc、/sys、/tmp、/dev这应该排除掉,其次oracle这些应用软件的安装目录也不需要打包(太大),因为tar好像最大只支持8GB的单个文件。当然tar文件存放的目录一定要排除掉。具体命令如下:

  #tar zcvf /Bak/root-bak.tgz --exclude /proc --exclude /sys --exclude /tmp --exclude /dev --exclude /Bak --exclude /ora_data /

  待tar命令完成后,将tar包拷贝至移动硬盘上。现在就可以转到另外一台机器来操作了,在执行恢复操作前,建议将这台机器上的Oracle等应用程序安装的目录以及一些重要的数据先备份。然后通过光盘引导至rescue模式,在这里需要注意的是,在进入rescue模式之前,一定要先将硬盘硬盘插上,否则进入rescue模式后系统不会自动添加USB驱动。其次在进入rescue模式的过程中,要选择“SKIP”跳过根分区的挂载。接下来的操作就是格式化根分区再将tar解开到根分区上。

  具体命令如下:
  #mkfs.ext3 /dev/sda1

  然后,挂在新的文件系统并还原操作系统。

  #mkdir /newsystem
  #mount /dev/sda1 /newsystem
  #mkdir /bak
  #mount /dev/sdb1 /bak
  #tar zxvf /bak/root-bak.tgz -C /newsystem
  #chroot /newsystem
  #grub-install /dev/sda

  开始我以为做到这一步查多算完工了,但是重新启动的时候报kernel panic的错误,提示不能挂载根分区,后来我将/etc/fstab、/etc/grub.conf文件中的LABEL全部该为实际的分区名称,并重做initrd:

  # cp /boot/initrd-2.6.18-8.2smp.img /boot/initrd-2.6.18-8.2smp.img.bak
  # mkinitrd /boot/initrd-2.6.18-8.2smp.img 2.6.18-8.2smp

  最后重新启动OK,能正常进入系统,也能正常关机了。把备份的Oracle以及应用再恢复回去,并启动HA,一切OK。
我的RHEL 5 经过内核编译,由2.6.9升级到2.6.21后能关闭内核,但不能关闭电源。

望高手指点一下!
谢了!!!