U盘安装Ubuntu 10.04及拔盘后启动失败的系统引导修复指南 1. 准备阶段镜像、U盘与启动工具的正确组合1.1 Ubuntu 10.04镜像该从哪下、怎么校验先说结论Ubuntu 10.04是一个2010年发布的LTS版本代号Lucid Lynx官方原版下载地址早已归档现在能正常拉取的是old-releases源。镜像名一般是ubuntu-10.04.4-desktop-i386.iso或ubuntu-10.04.4-desktop-amd64.iso区别是32位和64位。10.04.4是10.04系列最后一个维护版本集成了大量更新建议直接下这个别去找最早的10.04原始ISO。下完之后第一件事是校验MD5这个很多人会跳过。老镜像在网络传输中损坏太常见了损坏的镜像做出来的启动盘会在安装器自检时提示找不到内核或者突然报错。校验方法很简单Windows下在命令提示符里用certutil -hashfile ubuntu-10.04.4-desktop-amd64.iso MD5Linux下直接md5sum。校验值和镜像文件名一般发布页面会写找不到也没关系至少确认文件字节数是对的。对于这台要装Ubuntu 10.04的机器你要先想清楚一个问题它有没有UEFI10.04那个年代绝大多数电脑还是传统BIOS但如果你手头是个较新的机器老版本系统可能压根没法在UEFI模式下启动。这篇文章按传统BIOS启动来讲也是10.04真实运行的典型环境。1.2 制作启动U盘的方案与细节U盘启动盘在10.04年代和现在完全是两个世界。当年没有Rufus没有Ventoy最流行的工具是Universal USB Installer、UltraISO或者直接在Linux下用dd。现在工具多但老系统兼容性反而需要注意。先说最省事、也最不容易出问题的方案Linux环境下直接用dd。假设U盘设备是/dev/sdb执行sudo dd ifubuntu-10.04.4-desktop-amd64.iso of/dev/sdb bs4M statusprogress sync用dd写完的U盘里面会出现一个包含casper、.disk、isolinux等目录的混合ISO结构能直接在BIOS下启动。这个方法的好处是干净可靠坏处是U盘不能被写别的文件也没法再次快速当普通U盘用需要重新分区格式化。Windows环境下我推荐用Rufus。选好镜像之后分区类型选MBR目标系统类型选“BIOS或UEFI-CSM”文件系统保持FAT32。不要选GPT因为10.04的内核和GRUB版本对新分区表的支持不好GPT会直接卡在引导阶段。还有一些人喜欢用Ventoy把ISO拖进去Ventoy本身对老ISO的支持整体不错但10.04这个版本因为initramfs和isolinux配置比较老偶尔会遇到启动后卡在引导菜单的情况如果你实验后不兼容果断换dd或者Rufus。确实遇到过一个比较怪的场景用UltraISO的“写入硬盘映像”功能选择USB-HDD模式很多老机器能启动但如果写入时选了“隐藏启动分区”或者修改了分区格式U盘启动就会出现“ISOLINUX 4.01 ... Boot error”这种报错。原因在于UltraISO在处理老版本isolinux引导时容易破坏文件偏移量。所以现在我的建议是在Windows上用Rufus在Linux上用dd不要再折腾UltraISO了。U盘本身选一个4GB以上的正品U盘就行FAT32格式。容量太大反而可能带来分区对齐问题一般8GB到16GB最稳妥。制作前把U盘数据拷走制作过程中不要拔U盘写入完成后也别急着插到目标机器上先在当前电脑上确认一下分区和文件能正常读取。2. 让BIOS认识U盘老主板U盘启动的设置细节2.1 不同品牌进BIOS的方式与U盘启动顺序U盘装系统第一个门槛就是让电脑从U盘启动。10.04年代电脑五花八门Dell、联想、HP、ThinkPad、组装机进BIOS的按键完全不同。戴尔台式机一般是开机按F2进BIOS设置F12进一次性启动菜单笔记本也类似。联想和ThinkPad多数是F1或Enter后按F12HP台式机是F10或Esc组装机的AMI主板最常见是Del或F2Phoenix BIOS则是F2更多。进BIOS之后找“Boot”或“Startup”菜单。老款Dell的Boot Sequence里能看到硬盘、光驱、USB Storage Device等选项你要把USB Storage Device调到第一。如果不支持直接用USB启动有些Phoenix BIOS的Boot菜单里会有“Hard Disk Drives”的子菜单进去把U盘对应的设备选成First Drive然后在Boot Device Priority里再确认一下顺序。这类老主板逻辑绕设置完一定要按F10保存重启。这里有一个很多人容易踩的坑U盘插入哪个USB接口有讲究。机箱前面板的USB接口在BIOS早段可能没有被初始化导致开机过程中压根识别不到U盘屏幕提示“No bootable device”。解决方法是插到机箱背面的USB 2.0接口不要插USB 3.0蓝色接口。老系统没有USB 3.0驱动在安装器早期阶段如果U盘插在USB 3.0控制器上会直接迷失。当初装10.04的时候插前面板、插蓝色接口都试过最后老老实实插在背面黑色USB 2.0接口上才正常。另一个细节如果你同时插着一个机械硬盘和一个U盘BIOS里的启动选项可能出现好几条“USB”或者“Hard Drive”记录容易搞混。我的习惯是只留目标硬盘和U盘其它移动硬盘、读卡器、多余的U盘全部拔掉避免启动顺序被干扰。2.2 硬盘分区规划与安装前准备开始安装前把目标硬盘里的数据全备份出来。既然装单系统整个磁盘都会被重新分区任何误操作都会导致数据丢失。这一步没有商量余地就算硬盘看起来是空的也应该做一次心理确认。分区规划上我建议不要全盘自动分区而是手动规划三个分区/boot、swap、/。/boot分200MB到300MB就行格式ext2或ext3。独立分出/boot的好处是确保引导文件落在这块硬盘靠前的区域老BIOS有时对硬盘大容量扇区访问不太顺把/boot放前面能减少引导阶段问题。swap分区大小取决于内存。内存小于等于2GBswap给内存的两倍内存4GB以上swap给4GB左右就够用。10.04在老机器上内存普遍不大swap分大一点没坏处它还能承担休眠功能。/分区分剩下的全部空间ext4文件系统。如果你习惯把/home独立出来也可以单独分一个但对单系统来说不是必须的。分区的时候注意磁盘命名。10.04年代设备名基本都是/dev/sda第一块硬盘、/dev/sdb第二块。如果U盘先被识别成sda、硬盘被识别成sdb安装器默认的引导设备就会指向U盘这是后文“拔掉U盘后系统无法启动”的最直接导火索之一。所以安装时每一步都要看清楚当前设备列表不要盲目点下一步。3. Ubuntu 10.04安装全过程关键步骤与引导安装位置3.1 安装器导航与分区方式选择从U盘启动后Ubuntu桌面版会先进入一个带菜单的GRUB引导界面让你选“Try Ubuntu without installing”或者“Install Ubuntu”。老版本还可以按F6修改启动参数比如acpioff、nomodeset。如果你启动时画面花屏、卡死或者出现乱码先试nomodeset这个参数会关掉内核的KMS模式设置对老显卡尤其有用。进入桌面版安装器之后前几步是语言和键盘布局默认选“中文简体”和默认键盘布局即可。接着会问你“安装类型”这一步有两种走法自动分区和手动分区。自动分区“清除整个磁盘并安装Ubuntu”确实省事但它会在第一块检测到的磁盘上写入自己的分区方案如果U盘被识别成sda引导很容易被装到U盘上也就是标题里“拔掉U盘后系统无法启动”的经典成因。所以这里我强烈建议选择“手动指定分区高级”也就是“Something else”全程自己控制分区和引导加载器位置。3.2 手动分区实操进入分区页面后你会看到一个设备列表需要特别注意的是设备名的对应关系。比如U盘是sdb、硬盘是sda那页面上会分别标出来。你要对硬盘sda进行操作对U盘sdb不要做任何分区操作。选中硬盘后点“新建分区表”确认会把这个盘上的分区表清空。然后依次建立在sda上新建逻辑分区或主分区大小输入200MB类型选“ext2”挂载点选“/boot”。再新建一个分区大小按前面说的swap大小设定类型选“swap area”。剩下的空间全部给根分区“ext4”挂载点选“/”。分区挂载点的下拉菜单在安装器里是现成的选“/boot”时要注意别误选成“/boot/efi”那是UEFI机器用的。10.04这个版本按传统BIOS引导不需要EFI系统分区。分区完成后页面底部会有一个下拉框写着“安装启动引导器的设备”Install boot loader to。这一步是整个安装流程里最需要留意的地方。默认情况下Ubuntu安装器往往会把启动引导器装到它认为的“主盘”上而它的判断逻辑和我们的直觉可能有差异。如果它默认显示的是/dev/sdb也就是U盘那安装完成后硬盘其实没有引导程序拔掉U盘当然无法启动。哪怕它默认显示/dev/sda也应该手动再确认一次然后选择硬盘对应的设备/dev/sda不带分区编号是整个磁盘。3.3 安装过程中的小细节与时区设置分区和引导设备都确认无误后点“现在安装”安装器会检查分区并开始复制文件。这时会问时区、键盘、用户名密码等常规信息。时区选择Asia/Shanghai就行系统语言包里带简体中文用户名别用纯数字密码建议设置一个因为后面修复引导时用sudo会需要。安装过程中有一个“在安装时下载更新”的复选框。以现在的网络环境10.04自带的源早就指向旧归档地址了勾了它反而容易长时间卡在“正在下载软件包”或者报错。我的建议是取消勾选同时把“安装第三方软件”也取消。这两个选项对系统引导本身没有影响但能避免安装过程因为源不可用而中断。安装过程大约10到20分钟取决于U盘速度和硬盘速度。进度条走完后提示重启。这里有个细节它提示“移除安装介质”但实际上重启时不需要马上拔U盘等机器断电后拔U盘也行关键是重启后要进BIOS或者启动菜单选择从硬盘启动。很多人在这一步直接拔U盘然后重启结果发现系统找不到引导屏幕黑屏一个光标或者提示“No bootable device”。别急这在实践中非常常见后面一小节专门讲怎么定位和解决。4. 拔掉U盘后系统无法启动的排查与修复4.1 先判断故障现象属于哪一类如果拔掉U盘后无法启动屏幕表现不同问题的根源可能完全不同。我把实际见过的情况整理成一个速查表故障现象最可能原因处理方向黑屏左上角光标闪烁没有任何文字硬盘MBR里没有引导程序或者引导程序损坏用Live U盘修复GRUB提示“No bootable device -- insert boot disk”BIOS启动顺序里没有硬盘或硬盘MBR无效先进BIOS调整顺序再进Live修复提示“Missing operating system”MBR存在但活动分区标志丢失或引导文件缺失检查分区活动标志重新安装GRUB卡在grub命令行能输入命令但没有菜单GRUB菜单文件丢失但引导程序本身还在手工指定内核启动进入系统后重建菜单卡在grub rescue提示unknown filesystemGRUB第二阶段找不到/boot分区用Live系统重新安装GRUB并确认/boot分区类型和UUID大部分情况属于第一、二类也就是引导程序本身没装到硬盘上或者BIOS压根没把硬盘列为启动设备。先把后者排除掉因为修复起来最省事。4.2 用Live系统修复GRUB引导如果硬盘MBR里没有引导程序最直接的办法是重新用U盘启动到“Try Ubuntu”模式然后挂载硬盘chroot进去重装GRUB。先明确设备名。假设硬盘根分区是sda1/boot独立分区是sda2如果没有独立/boot所有引导文件都在根分区下那就只挂sda1就行U盘启动后的Live系统里硬盘设备顺序一般还是sda但也不排除系统把U盘识别成sda。先用lsblk或者fdisk -l看清楚别挂错盘。具体流程sudo mkdir -p /mnt/system sudo mount /dev/sda1 /mnt/system sudo mount /dev/sda2 /mnt/system/boot # 如果有独立/boot分区 sudo mount --bind /dev /mnt/system/dev sudo mount --bind /proc /mnt/system/proc sudo mount --bind /sys /mnt/system/sys sudo chroot /mnt/system /bin/bash进入chroot之后先检查一下当前挂载情况然后执行grub-install --recheck /dev/sda update-grubgrub-install /dev/sda这条命令是把GRUB引导程序写入sda这块硬盘的MBR区域注意参数是/dev/sda而不是/dev/sda1。如果10.04默认安装的是GRUB 2装完之后再执行update-grub它会扫描分区并生成grub.cfg菜单文件。如果grub-install报错说找不到GRUB设备映射先检查/boot/grub/device.map是否存在不存在就直接删掉这个文件让它重新生成。还有一个常见问题是chroot之后设备节点没绑定好表现为执行命令时卡在“Scanning for Btrfs filesystems”或者找不到设备这时候重新检查mount --bind /dev那一步。修复完GRUB之后退出chroot卸载所有挂载点然后关机拔掉U盘开机测试。顺序很重要先卸载chroot里的所有挂载再卸载/mnt/system不然会出现设备忙导致的问题。4.3 修正启动顺序与UUID如果GRUB装好了还是无法启动问题可能出在BIOS启动顺序上。拔掉U盘后有些主板的启动顺序如果还保留着USB设备优先它会先去找USB设备发现没插U盘然后往下找硬盘。这个逻辑绝大多数主板都能正确处理但也有部分老主板出现“迟钝”现象明明硬盘已经装好引导了它还是报找不到启动设备。这时候进BIOS把Boot Device Priority里的Hard Drive硬盘调到第一USB暂时禁用或调到最后保存重启就行。同时进入BIOS的“Hard Disk Drives”子菜单看看有些主板在这里区分“USB Hard Drive”和“SATA Hard Drive”要把SATA硬盘排在USB硬盘前面。Dell的老机器经常在这两个菜单里各设置一次漏掉其中一个就会出现插U盘能启动、拔U盘不能启动的诡异现象。再有一个隐蔽的点是UUID。GRUB菜单和/etc/fstab里记录的都是分区的UUID。如果硬盘分区因为修复操作被重新格式化过UUID变化了而GRUB菜单还是旧的UUID启动时会卡在ALERT! /dev/disk/by-uuid/xxxx does not exist。这个好办进入Live系统后用blkid查看当前分区的UUID再对照/etc/fstab和/boot/grub/grub.cfg里的引用不一致就改成一致。4.4 fstab的盘符错位问题早期Linux配置一个很容易被忽略的问题/etc/fstab里如果写的是/dev/sda1这样的设备名而不是UUID那么拔掉U盘后设备名会发生错位。比如安装时U盘是sda、硬盘是sdb安装器就可能在fstab里写了sdb1作为根分区。装完系统拔掉U盘硬盘变成sda但fstab还指向sdb1内核根本找不到根分区启动就会掉进initramfs的busybox提示符屏幕显示(initramfs)。这个问题在U盘安装场景里发生率极高因为安装时U盘和硬盘的盘符顺序和日常使用不一样。检查方法是进入Live系统挂载硬盘根分区打开/etc/fstab把那些用/dev/sdxx写的条目替换成对应分区的UUID。UUID可以用blkid查写进fstab之后重启就不会再受设备名顺序影响。顺带说一句如果修复过程中用chroot进入系统后执行update-grub报错也可以手动检查一下/etc/fstab里的内容大部分时候是挂载信息不完整导致GRUB无法正确扫描。4.5 老机器上的兜底方案上面的修复流程走完99%的情况能解决。但如果你的机器实在太老或者GRUB 2在你这块主板上兼容性极差可以尝试用GRUB 1Legacy兜底。10.04时代GRUB 1已经很成熟命令方式完全不同但针对BIOS老主板的兼容性反而更好。在chroot环境里安装legacy GRUBapt-get install grub grub-install --recheck /dev/sda然后进GRUB命令行手工指定root (hd0,0) setup (hd0)其中(hd0,0)表示第一块硬盘第一个分区如果/boot是独立分区就填这个如果/boot在根分区里但没有单独分就要根据实际情况处理。这属于比较偏门的方案一般用不上知道有这么回事就行。如果试来试去还是不行果断从头重装重装时记得在分区完成后手动选择引导加载器设备为硬盘并检查fstab里的UUID。重装一遍10分钟比起反复折腾GRUB要省心得多。5. 常见问题速查表与避坑笔记5.1 故障速查表症状原因解决安装完拔U盘开机黑屏光标闪引导装到U盘硬盘MBR无引导重装GRUB到/dev/sda开机提示No bootable deviceBIOS启动顺序没把硬盘排前面进BIOS把硬盘调到第一开机提示Missing operating systemMBR有引导但活动分区缺失修复分区活动标志重装GRUB卡在grub命令行grub.cfg丢失手工引导或更新GRUB配置卡在grub rescue unknown filesystemGRUB找不到/boot分区重装GRUB到硬盘MBR启动后进入(initramfs)提示找不到根分区fstab使用设备名且盘符错位改成UUID挂载启动后卡在“STOP: Failed to mount ...”fstab里挂载项有误检查UUID与文件系统类型安装过程中提示无法下载更新10.04源已归档网络不可达取消更新后续换old-releases源5.2 老版本源失效的处理装好10.04进系统后你会发现apt update大概率报错这是因为默认源指向的archive.ubuntu.com已经不再保留10.04的软件包。解决办法是把源改成old-releases.ubuntu.com。编辑/etc/apt/sources.list把里面所有archive.ubuntu.com和security.ubuntu.com替换成old-releases.ubuntu.com即可。我当时是直接用了sed全局替换sudo sed -i s/archive.ubuntu.com/old-releases.ubuntu.com/g /etc/apt/sources.list sudo sed -i s/security.ubuntu.com/old-releases.ubuntu.com/g /etc/apt/sources.list sudo apt update但要注意一部分第三方PPA源早就失效了这是正常现象。如果需要装软件优先用apt自带的软件包。实在想装一个比较新的软件源码编译可能是更省心的路因为官方软件仓库里10.04的包版本都相当老。5.3 我的实操笔记与几个独家避坑细节第一安装前把目标电脑的硬盘模式确认一下。有些老Dell默认SATA模式是ATA或RAID如果你在安装过程中看不到硬盘分区进BIOS把SATA Operation改成ATA或AHCI具体看主板支持。Ubuntu 10.04对AHCI支持一般但如果硬盘本身是SATA盘AHCI通常没问题遇到完全识别不到硬盘的情况先切ATA再试。第二U盘引导启动时如果出现isolinux.bin missing or corrupt大概率是U盘写入不完整或者U盘本身有坏道。换一个U盘重新制作不要犹豫。测试过很多次修一个坏U盘比换一个新U盘成本高得多。第三修复GRUB时不要忘了设备映射问题。我用chroot方法给好几台老机器修复引导发现grub-install偶尔会提示“failed to get canonical path of /dev/sda”这时候先确认有没有挂载/dev到chroot环境。还有一次是Live系统把U盘识别成了sda硬盘反而成了sdb但我在grub-install里写死了/dev/sda导致把GRUB装进了U盘。所以每次执行修复命令前都应该用lsblk确认当前设备对应关系。第四安装完系统进入桌面后如果发现关机速度异常慢或者关机时屏幕卡住检查一下swap分区的挂载情况10.04的init脚本在swap不可用时会有诡异的等待。另外一个老生常谈显卡驱动。如果进入桌面后分辨率只有800x600去“系统管理-硬件驱动”里装受限驱动。装完驱动黑屏的话启动参数里加nomodeset进系统后再调整xorg.conf。第五如果你是想在一台没有光驱、没有软驱的老机器上装10.04而且机器本身不支持U盘启动那只能借用PXE网络引导或者拆硬盘挂到别的机器上装但这就超出U盘安装的范畴了。实际操作中我发现很多所谓“不支持U盘启动”的主板只是BIOS里没开启“USB Legacy Support”或“Legacy USB Storage Detect”选项开启后U盘启动选项就出现了。这一项在老Dell主板里叫“USB Keyboard/Mouse Support”或者“USB Storage Function”默认可能是Disabled改Enabled后重启再看。6. 最后分享一点个人经验U盘安装系统、拔掉U盘后启动失败的案例本质上就是三个关键点没守住一是安装时引导加载器的目标磁盘选错二是BIOS启动顺序没有明确指向硬盘三是fstab和GRUB配置里写死了设备名而非UUID。只要这三个点都确认过系统基本就是一次装好不折腾。我个人在装这类老系统时有一个习惯安装完成后先用U盘启动进入Live系统把硬盘上/boot/grub/grub.cfg和/etc/fstab两个文件打开检查一遍确认里面引用的是UUID且路径正确然后再拔U盘重启。虽然多花两分钟但能提前暴露绝大多数导致启动失败的问题比启动失败后再修省事得多。另外想说一句Ubuntu 10.04放到今天已经严重过时很多软件包和安全补丁都不再更新不建议在联网环境作为主力系统使用。但如果你是为了研究老系统、跑一跑古董软件或者在老硬件上回顾当年Linux桌面的样子U盘安装这套流程里关于引导、分区、GRUB的原理到今天依然适用。现在用U盘装Ubuntu 24.04也一样要面对分区表、启动方式、引导位置这些问题只是工具更自动化了原理并没有变。