手动做ISO文件的U盘引导

前几天需要做一个iso文件的U盘引导.
现成的功具很多. 但我希望了解更多细节,还是手动操作.因为这样可以了解更多的细节,测试更多的想法.
只想快速解决引导问题就不要继续看下面的内容了.

相关内容:
bios引导 , syslinux , vfat文件系统 , ext文件系统, iso9660, msdos分区, linux

##############
一个 iso. ubuntu linux 自动安装的.不是hybrid cd ,不能cat dd写到u盘里.

第一次尝试,失败了.
我用以前的办法copy文件到vfat的u盘上. 之后syslinux启动.发现有问题.
启动正常.安装向导在找安装源时.提示/dev/sda1不是安装源之类的.
我感觉问题出在ubuntu的原盘中有挺多是符号链接.没办法复制到vfat上.或是带宽格,超长的卷标有问题.

卷标QingCloud ISO

cp: 无法创建符号链接’./dists/stable’: 不允许的操作
cp: 无法创建符号链接’./dists/unstable’: 不允许的操作
cp: 无法创建符号链接’./install/hwe-netboot/ldlinux.c32’: 不允许的操作
cp: 无法创建符号链接’./install/hwe-netboot/pxelinux.0’: 不允许的操作
cp: 无法创建符号链接’./install/hwe-netboot/pxelinux.cfg’: 不允许的操作
cp: 无法创建符号链接’./install/hwe-netboot/ubuntu-installer/amd64/pxelinux.cfg/default’: 不允许的操作
cp: 无法创建符号链接’./install/netboot/ldlinux.c32’: 不允许的操作
cp: 无法创建符号链接’./install/netboot/pxelinux.0’: 不允许的操作
cp: 无法创建符号链接’./install/netboot/pxelinux.cfg’: 不允许的操作
cp: 无法创建符号链接’./install/netboot/ubuntu-installer/amd64/pxelinux.cfg/default’: 不允许的操作
cp: 无法创建符号链接’./ubuntu’: 不允许的操作

第二次试. 我想U盘分一个ext2区.copy文件进去.再extlinux引导. 同时写卷标让安装过程找到这个分区当安装源.
结果发现. 安装程序只试了 iso9660和vfat两种格式mount. 不试ext类的.

第三次试. U盘分两个区. 第一个区dd cat 写iso. 第二个区ext2 安装extlinux.启动.
这样第二个区的空间linux下还能正常当U盘用.
这个方式ubuntu的安装程序终于认了.可以正常 安装了.

#################################################################33
第二次试. 思路和过程

试用extlinux引导. U盘分一个ext2区.
做青云(ubuntu 16.04) usb启动.

吐槽:
原来好好的hybrid cd被搞成这个样子!

原因:

  1. 卷标特殊有空格超过11字符 “QingCloud ISO”
  2. 有的文件是符号链接vfat不支持.不想做那么多测试.

好处:
移动硬盘linux还可以用.不像 vfat有太多限制.
放数据的移动硬盘也可以启动?

#fdisk /dev/sdc
分区格式msdos 分区类型linux 可启动

mke2fs /dev/sdc1

这里就不用日志了.纯种ext2.非要用ext3,4也可以.
天! 写了好久!U盘分散写性能太差了.

tune2fs -L “QingCloud ISO” /dev/sdc1
这个卷标是mount完iso之后从 /dev/disk/by-label 里查到的.

mount上iso和 /dev/sdc1
cp -a 把所有文件copy过去.

mkdir 0
mkdir 1
mount qin…iso ./0
mount /dev/sdc1 ./1
cd 1
cp -a …/0/* .

从isolinux配置中抄来配置. 保存在 1/syslinux.cfg里

default QingCloud
prompt 1
timeout=300

label QingCloud
kernel /install/vmlinuz
append file=/cdrom/preseed/qingcloud.seed initrd=/install/initrd.gz quiet boot=install debian-installer/locale=en_US console-setup/ask_detect=false keyboard-configuration/layoutcode=us splash —

extlinux --install ./1

写mbr的代码.
#cat /usr/lib/syslinux/mbr/mbr.bin >/dev/sdc

umount ./1

结果.
启动失败了.和之前用vfat的原因一起总结.
两次都说找不到 ubunt cdrom
提认为/dev/sdb1 是安装介质. 试着用iso9660和vfat mount它.
ext格式失败了. vfat成功mount但可能是少了什么文件或标志提示这个盘不是安装介质.

=============================
第三次试的思路和过程.

换个思路. 第一个分区放iso9660 第二个分区搞启动?

/dev/sdc1 2048 10487807 10485760 5G 83 Linux
/dev/sdc2 * 10487808 124518399 114030592 54.4G 83 Linux

第一分区留着放iso9660 fs 原样写入.
第二个分区设置为启动. extlinux
为啥sdc1分这么大! 万一有别的iso比这个大,要放进去呢.

想法:
这里感觉sdc2里只放kernel initrd syslinux.cfg了许就可以了.
这样引用原样的iso9660 fs 也许就少了一个用extlinux的理由.因为没有链接保存不了的问题了.

mke2fs /dev/sdc2

cat QingCloud-16.04.5.1-nooffload-AutoInstall.iso > /dev/sdc1

1/syslinux.cfg

default QingCloud
prompt 1
timeout=300

label QingCloud
kernel /vmlinuz
append file=/cdrom/preseed/qingcloud.seed initrd=/initrd.gz quiet boot=install debian-installer/locale=en_US console-setup/ask_detect=false keyboard-configuration/layoutcode=us splash —

/cdrom/preseed/qingcloud.seed 这个文件是安装脚本找到并mount上cdrom之后在目录树中的位置.

再把几个文件copy过来.

#cd 1

cp …/0/install/vmlinuz .

cp …/0/install/initrd.gz .

extlinux --install ./1

不知道这个需要不.(重复就一定不用做了)
#cat /usr/lib/syslinux/mbr/mbr.bin >/dev/sdc

umount ./1

测试安装过程中.提示了两三次 /dev/sdb1是安装源不能装到它上面. 别的目前看是正常.

########################
第二个方式也可以换换. 第二个分区用 syslinux vfat也应该是一样的.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值