LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2680|回复: 11

晕,没有mkinitrd??还想从USB-HDD启动系统呢?

[复制链接]
发表于 2005-3-12 16:48:52 | 显示全部楼层 |阅读模式
arch怎么没有mkinitrd呢 至少也应该在base里面带有才对呀
这对于只有usb硬盘的用户怎么装内核呀
发表于 2005-3-12 17:55:04 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-12 18:26:57 | 显示全部楼层
loading package data... load_pkg: missing package info file in mkinitrd-1.0.1-1.tar.gz
回复 支持 反对

使用道具 举报

发表于 2005-3-12 23:53:44 | 显示全部楼层
要下载后解压,里面有PKGBUILD文件,用这个文件makepkg生成pkg.tar.bz包再安装。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-13 03:55:10 | 显示全部楼层
多谢斑竹指点 搞定了 终于可以从usb盘启动archlinux了 比较不爽的是在grub里写kernel项的时候必须指定为archlinux的root=/dev/discs/discX/partX 和其他系统的sdX不一样 弄得我猜了好久问题所在 还有一点就是busybox的时候要等上10s让usb设备盘都挂载上才能chroot成功 和作者说的一样 好象2.6.8以后的内核都有这个问题
回复 支持 反对

使用道具 举报

发表于 2005-3-13 08:28:52 | 显示全部楼层
10秒??
我这里加在USB模块的时候也很慢,但也没有这么夸张~~

我的解决方法是重新编译内核,将uhci编译进内核中,就快多了。
回复 支持 反对

使用道具 举报

发表于 2005-3-13 12:01:50 | 显示全部楼层
可不可以写个usb-hdd安装的指南?谢谢。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-14 20:35:32 | 显示全部楼层
让内核从usb-hdd启动最重要的一点就是要让内核能够在启动的一开始就找到我的root分区并且mount到/下面 usbcore,ehci-hcd,ohci-hcd(注:如果你的usb host芯片是intel和via的话就要用uhci-hcd,这是两大派系的驱动,二者取一就可以了),usb-storage,scsi_mod,sd_mod,sg 这些模块要在内核mount root文件系统前就要进入内核 有两种方式可以完成这个
1.重新编译内核 把usbcore ehci-hcd ohci-hcd(uhci-hcd) usb-storage scsi_mod sd_mod sg统统编译进内核 我不知道2.6.x里面把usb编译进内核还需不需要修改一些源码 让内核在启动的时候等待足够的时间把我们的usb-hdd找到 也许编译进去就可以直接启动了 我打算找个时间试一下 改善我的启动时间 这种方式不需要加载initrd选项 是单内核启动的方式
2.用initrd方式加载模块 initrd做得事情就是在内核启动的过程中先mount到一个很小的linux文件系统里面 就是grub中的initrd.gz 现在initrd.gz制作有多种方式的文件系统可以选择ext2,ext3,cramfs的等 如果选其一 那么必须保证这种文件系统是编译进内核的 在initrd.gz里面我们要干的唯一事情就是提前把内核模块里的一些模块加载进内核 以便做进一步的工作 此时我们要加载的内核模块已经在initrd.gz里面了(这个是在mkinitrd里做得) 而不是从我们的/文件系统中加载 ok initrd.gz完成了usbcore ehci-hcd ohci-hcd(uhci-hcd) usb-storage scsi_mod sd_mod sg以后 等待片刻(10s对我来说已经算不上片刻了,sigh) 我们的usb硬盘已经变成/dev/sdaX了 或者/dev/discs/disc1/partX了 然后initrd.gz根据 grub中的 root=/dev/sdaX chroot到我们真实的root分区里面 后面的事情就是和ide硬盘启动没什么区别了

在archlinux里面 我先把ftp://ftp.archlinux.org/incoming/mkinitrd-1.0.1-1.tar.gz搞定 然后我用的是kernel26-scsi的内核 所以关于scsi的就不需要加载了 剩下的就是把usb相关的用initrd.gz搞定 执行下面的指令
mkinitrd -k 2.6.11.1-ARCH -m usbcore:usb-storage:ehci-hcdhci-hcd -f reiserfs
其中-f reiserfs是说你的root分区用的是什么文件系统 这些选项大家man一下mkinitrd就明白了
然后就会在/boot下出现一个initrd.gz 把它加到grub或lilo的选项里去就可以了

在google上看到mkinitrd-1.0.1-1.tar.gz的作者也有一个usb启动等待的问题 这个问题我记不得从2.6.x哪个开始就存在了(在2.4的时代好像不存在) 问题就是initrd.gz做完一系列modprobe (usb modules)之后 还没有等usb设备和分区准备好就开始要chroot了 这在/boot/initrd-tree/linuxrc里面看得比较清楚(/boot/initrd-tree这个目录是在执行mkinitrd之后出现的) 所以我们要加一点等待时间 vi /boot/initrd-tree/linuxrc一下
在# Initialize LVM:前一行加上一个sleep 10(10表示秒 根据你的usb-hdd识别快慢自己决定)
如:
sleep 10
# Initialize LVM:
if [ -x /sbin/vgscan ]; then
  /sbin/vgscan --mknodes
  sleep 10
  /sbin/vgchange -ay
fi
然后再执行一遍mkinitrd -k 2.6.11.1-ARCH -m usbcore:usb-storage:ehci-hcdhci-hcd -f reiserfs 注意这个时候mkinitrd不要加-c这个选项 否则她会先把你的/boot/initrd-tree先干掉再重新来一遍
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-14 20:37:27 | 显示全部楼层
我faint ohci怎么变成笑脸了??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-14 20:44:26 | 显示全部楼层
忘了说明一下 如果是usb2.0的系统 运行的linux系统和在ide上运行得没有太大的速度分别
如果是usb1.1的朋友们就不要尝试了 慢得像猪一样 呵呵 不过现在谁还用1.1呀
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表