[分享]不解压 iso 硬盘启动 ubuntu-6.06-desktop.iso (即livecd版)
发表于 : 2006-06-19 1:53
原 创: gnix_oag
修 改: dubuntu 于 2006.6.18
本文是在 gnix_oag 大作的基础上改进的,请见文后的引用
目前测试了 ubuntu 的 LiveCD 镜像文件存放到 ntfs, fat32, ext2, ext3, reiserfs 的情况,而 xfs 及 jfs 文件系统没有进行测试。
文件下载:
为 2.6.15-23 386 内核准备:
http://ftp.ubuntu.org.cn/dubuntu/hd_boo ... 23-386.zip
为 2.6.15-23 686 内核准备:
http://ftp.ubuntu.org.cn/dubuntu/hd_boo ... 23-686.zip
比如,欲启动官方正式版 ubuntu-6.06-desktop-i386 可以下载 hd_boot-2.6.15-23-386.zip 。
使用方法在下载得到的压缩包中有详细说明。
主要是修改了 /usr/share/initramfs-tools/scripts/casper 脚本,添加了一个 find_iso() 函数,用于查找硬盘上的 iso 镜像文件并判断它是不是 ubuntu 的 livecd。
另请参阅:
viewtopic.php?t=16590&highlight=
viewtopic.php?t=11906&highlight=
修 改: dubuntu 于 2006.6.18
本文是在 gnix_oag 大作的基础上改进的,请见文后的引用
目前测试了 ubuntu 的 LiveCD 镜像文件存放到 ntfs, fat32, ext2, ext3, reiserfs 的情况,而 xfs 及 jfs 文件系统没有进行测试。
文件下载:
为 2.6.15-23 386 内核准备:
http://ftp.ubuntu.org.cn/dubuntu/hd_boo ... 23-386.zip
为 2.6.15-23 686 内核准备:
http://ftp.ubuntu.org.cn/dubuntu/hd_boo ... 23-686.zip
比如,欲启动官方正式版 ubuntu-6.06-desktop-i386 可以下载 hd_boot-2.6.15-23-386.zip 。
使用方法在下载得到的压缩包中有详细说明。
主要是修改了 /usr/share/initramfs-tools/scripts/casper 脚本,添加了一个 find_iso() 函数,用于查找硬盘上的 iso 镜像文件并判断它是不是 ubuntu 的 livecd。
代码: 全选
gnix_oag的版本,能实现硬盘启动,但必须解压缩 iso 文件,并且不支持 ntfs:
find_cd() {
mounted=
for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram); do
devname=$(sys2dev "${sysblock}")
for dev in $(subdevices "${sysblock}"); do
devname=$(sys2dev "${dev}")
case $(get_fstype "${devname}") in
vfat|iso9660|ntfs|etx3|udf|reiserfs)
mount -t $(get_fstype "${devname}") -o ro "${devname}" $mountpoint || continue
if casper_path $mountpoint; then
echo $(casper_path $mountpoint)
return
else
umount $mountpoint
fi
;;
esac
done
done
}
代码: 全选
修改后的版本,不必解压缩 iso ,支持 ntfs 等分区:
find_iso()
{
local isoroot="/iso9660"
local tmproot=$1
isos=`ls ${tmproot}/*.iso 2>/dev/null` || return 1
modprobe loop
mkdir -p "$isoroot"
for iso in ${isos}
do
mount -t iso9660 -o loop $iso $isoroot 2>/dev/null || continue
if casper_path "$isoroot"; then
#echo "$isoroot"/casper/filesystem.squashfs
in_iso_squashfs="$isoroot"/casper/filesystem.squashfs
return 0 else
umount "$isoroot"
fi
done
unset isos
unset iso
return 1
}
find_cd() {
mounted=
for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram); do
devname=$(sys2dev "${sysblock}")
for dev in $(subdevices "${sysblock}"); do
devname=$(sys2dev "${dev}")
case $(get_fstype "${devname}") in
vfat|iso9660|ext2|ext3|udf|reiserfs)
mount -t $(get_fstype "${devname}") -o ro "${devname}" $mountpoint || continue
# if casper_path $mountpoint; then
# echo $(casper_path $mountpoint)
# return
# else
# umount $mountpoint
# fi
if find_iso $mountpoint ; then
echo $in_iso_squashfs
return
else
umount $mountpoint
fi
;;
jfs|xfs|ntfs|minix)
modprobe xfs
modprobe jfs
modprobe ntfs
modprobe minix
mount -t $(get_fstype "${devname}") -o ro "${devname}" $mountpoint || continue
if find_iso $mountpoint ; then
echo $in_iso_squashfs
return
else
umount $mountpoint
fi
;;
*)
;;
esac
done
done
}
代码: 全选
编辑 /etc/mkinitramfs/modules 文件,如下所示,主要是为了在生成的 initrd.gz 文件中多加入一些驱动程序。
sd_mod
raid0
raid1
raid5
ntfs
minix
loop
xfs
jfs
scsi
viewtopic.php?t=16590&highlight=
viewtopic.php?t=11906&highlight=