设想一种新的引导定位方法:利用记号文件
其实也不算新,slax 很早就在用了。以前做移动 ubuntu ,也用过这个法子。那么,它有什么好处呢?
先看看当前的引导定位方法。这是一个 menu.lst 项:
代码: 全选
title Ubuntu 8.04.1, kernel 2.6.24-19-generic
kernel (hd0,6)/boot/vmlinuz-2.6.24-19-generic root=/dev/sda7 ro quiet splash
initrd (hd0,6)/boot/initrd.img-2.6.24-19-generic
可以看到,在 grub 中是通过 hdx,x 来定位分区,在linux ,传统上是 /dev/sdxx ,现在开始用 UUID
对于 hdx,x 和 /dev/sdxx 方式,当进行了 增删分区 或 其他操作,改变了原分区序号 ,就会失效
比如,在本机上是 /dev/sda7 ,换个机子,可能就是 /dev/sdb7 (双硬盘)
UUID 先进一些,不论硬盘拿到哪里,也不论其它分区如何增删,未经操作的分区 uuid 都不会变。
但是有一点,克隆系统时,也就是把一个装好的 ubuntu 复制到另一硬盘时,一般都会有新的 uuid ,这时需要改 menu.lst 才能启动。
而且, uuid 是一串挺长的字符,很难记,不直观。像 /dev/sdxx 万一写错 导致启动失败的话,还可以在 grub 下猜测修改。而 uuid 就无奈了,恐怕没人能猜测到该是怎样,而 grub 0.97 又不能查看分区 uuid (grub2 可以),这就很麻烦。
记号文件就比较直观。比如,可以按这样的规则 在安装系统时生成记号文件,放在分区根目录:sign-[发行版名称]-[版本号]-[安装日期]-[挂载点]。举个例子,sign-ubuntu-8.04.1-20080916-usr ,表明该分区是 2008年9月16号安装的 ubuntu 8.04.1 的 usr 分区
可以定义一个新的内核参数:rootsign 。 rootsign=sign-ubuntu-8.04.1-20080916-rootdir 表示 以 存有名为 sign-ubuntu-8.04.1-20080916-rootdir 的记号文件 的分区 作为根分区 启动。
记号文件定位方式没有 /dev/sdxx 和 UUID 方式的缺点。
grub 也可以用记号文件来定位内核所在分区,原理类似。GRUB4DOS 的 find --set-root 命令 就是用来干这个的。