Random Tech Thoughts

The title above is not random

将现有的 Linux 系统安装到其他系统上

前天又做傻事了,笔记本上的 Arch 因为 pacman 变慢所以用那个很搞笑的办法想让他快一点,但是一个不小心,rm -rf 把 /var/lib/pacman 给删了 :–( ,无奈啊,我想是很难恢复得了。另外正好想换文件系统,于是就想把院里机器上的系统拷贝回来用。

于是用 tar 备份,备份过程中 exclude 掉了 /dev/, /proc/, /sys/, /tmp/, /mnt/*,在笔记本上解压然后配置好 grub,修改了/etc/fstab 之后重启,但是很不幸的是在挂载了根文件系统以后遇到了如下的信息:

can’t find initial console Rebooting

之后又是老办法,chroot,然后自己用重新编译了一下内核,但是还是没有解决问题。网上搜也没有找到解决办法,有人说可能是 udev 的问题但是我更新了 udev 还是没有用。接近绝望想重装的时候看到 Arch 的安装光盘可以利用光盘里的内核引导到已有的系统,试了一下结果看到了同样的信息。

这样我就肯定问题不是出在内核,也不是我的备份恢复有问题。已经不记得怎么想到下面的办法的:把 /dev 目录下的文件全部 cp 到解压出来的系统的 dev 目录下。(其实在 mkinitcpio 的时候需要 /sys 下的某些文件,我当时就是用 cp 的办法解决的。)然后重启,果然不再有刚才的出错信息了,但是接下来却说: “can’t find /dev/shm, /dev/pts, /dev/sda1, … “,然后就是到文件系统修复的地方, Ctrl + D 继续的话就直接重启了。一开始又愣了,突然用想起来是 /etc/fstab 没有修改的原因。再进入系统修改了 /etc/fstab ,重启以后一切顺利,终于得到了跟院里机器一模一样的系统了,没有必要重装了! :–)

做点总结:

  1. 如果是把系统移到其他机器上则备份时可以把 /dev exclude 掉,但如果是为机器本身作备份为了避免麻烦还是直接包含进去的比较好。至于 /proc 目录则尽管 exclude 好了。/sys 一般 exclude 也没什么问题的吧。
  2. 恢复系统以后一定要注意修改 /etc/fstab。如果要移动到其他系统,使用的是自己精简的内核的话要重新配置内核并编译。如果使用的是发行版提供的通用的配置的话可能也需要生成一个新的 initrd 来支持新系统的硬件。
  3. 如果移动到其他系统的时候出现问题可以考虑用 livecd 或者使用现有 Linux 系统引导以后将 /dev 目录下的文件拷贝到恢复出的系统的 /dev 目录。

不过现在我倒是对 /dev, /sys 这两个目录的作用即其中的文件究竟是什么感到疑惑了。/proc 下的文件启动时会自动生成(或者说是伪文件,这个我也不清楚),但是 /dev, /sys 下的似乎不是的,那么最初他们是从那里来的呢?从安装过程中来?那么安装光盘为什么可以运行在不同的系统上呢,它里面的 /dev 目录显然不是固定的。呵呵,这几个问题又可以去问老师了。

Comments