2012 年的老 ThinkPad E430 改装 Ubuntu 24.04全程翻车排查实录

Windows 下用 PowerShell 制作 Ubuntu 24.04 启动盘:免 Rufus 原始写入 + 全程翻车排查实录

前言

最近给一台 2012 年的老 ThinkPad E430 重装系统:全盘清除 Win7,改装 Ubuntu 24.04.4 LTS。

按理说这是个简单活,结果从上午折腾到下午,把 U 盘坏块、SD 卡写保护锁、双硬盘启动顺序、残缺系统这些坑踩了个遍。本文记录两个核心内容:

  1. Windows 下不用 Rufus,用 PowerShell 直接把 ISO 原始写入 U 盘的完整方法(含全量校验)
  2. 装机全流程的翻车排查实录------每一个坑的现象、诊断过程和解法

一、为什么要绕开 Rufus

Rufus 当然是首选工具。但如果你想让流程可复现、可自动化(比如批量做盘、远程指导别人操作),脚本化原始写入有独特的优势:一条命令完成写入 + 全量校验,输出的每一行都能留档

而且全量校验这一点 Rufus 反而没做到位------后面会看到,只校验开头 64MB 是要付出代价的。

1.1 前置条件

  • ISO 文件(本例:ubuntu-24.04.4-live-server-amd64.iso,3248MB)
  • 先算 ISO 的 SHA256 并与官方比对 。Ubuntu 官方 SHA256SUMS 文件在镜像站可以拿到:
bash 复制代码
# 与官方校验值比对,确认 ISO 本身完好
Get-FileHash -Algorithm SHA256 .\ubuntu-24.04.4-live-server-amd64.iso
  • 确认目标 U 盘的磁盘编号(这一步千万看清,写错盘就是灾难):
powershell 复制代码
Get-CimInstance Win32_DiskDrive |
  Select-Object Index, Model, @{n='SizeGB';e={[math]::Round($_.Size/1GB,1)}}

1.2 写入脚本核心逻辑

写入思路:用 CreateFile 打开物理磁盘句柄(绕过文件系统),锁定并卸载卷,然后按 4MB 块流式写入 ISO 全部字节,最后全量回读算 SHA256 与 ISO 比对

关键 API 调用(P/Invoke 部分):

csharp 复制代码
// 打开物理磁盘,必须 FILE_SHARE_READ|FILE_SHARE_WRITE
CreateFile("\\\\.\\PhysicalDrive3", GENERIC_WRITE, ...);
// 锁定 + 卸载卷,否则写入会被文件系统干扰
DeviceIoControl(h, FSCTL_LOCK_VOLUME, ...);
DeviceIoControl(h, FSCTL_DISMOUNT_VOLUME, ...);
// 写完必须 FlushFileBuffers,否则写入缓存会掩盖真实落盘错误
FlushFileBuffers(h);

经验 1:FlushFileBuffers 不能省。 Windows 写缓存可能让写入"看起来成功",实际坏数据还躺在缓存里。本次翻车实录里第一块 U 盘就是写入时零报错、回读才发现数据损坏的。
经验 2:校验必须全量。 只回读前 64MB 毫无意义------坏块往往藏在 ISO 中后段的 squashfs 系统数据区,安装器解压到那里才会报 install media checksum verification failed

1.3 脚本编写时的两个 PowerShell 5.1 坑

  • 整数溢出 :剩余字节数超过 Int32 上限时,[int][Math]::Min($buf.Length, $total - $read) 会直接抛溢出异常,要用 Int64 运算。
  • 中文必坑.ps1 文件里带中文注释,PowerShell 5.1 按 GBK 解析会直接报莫名语法错误。脚本一律用纯 ASCII

二、翻车排查实录

系统装到 ThinkPad E430 上后,好戏开始了。以下 6 个坑按时间顺序记录。

坑 1:安装器报 "The install media checksum verification failed"

现象:U 盘启动进入 Subiquity 安装器,没走几步就报安装介质校验失败。

诊断过程

  1. ISO 本身的 SHA256 写入前已与官方值比对通过 → 排除源头问题
  2. 把 U 盘拿回 Windows 机器做全盘回读:SHA256 与 ISO 不一致
  3. 间隔几小时再回读一次,哈希稳定不变 → 不是偶发读取错误,是数据真的坏了
  4. 逐块差异扫描定位损坏区域

结论 :U 盘闪存有坏块,写入时被写缓存掩盖。写入成功 ≠ 数据落盘正确,必须全量回读校验。

解法:换 U 盘。这也是"写入后只抽查 64MB"这个流程缺陷的直接教训。

坑 2:新 U 盘连续报"函数不正确",写入被拒

现象:换新 U 盘重写,第一块就报"函数不正确";上午还能正常写入的设备突然不能写了。

诊断过程

  1. 先排除软件层:Get-Disk 查看 IsReadOnly = False → Windows 层没锁
  2. 试试 Set-Disk -IsReadOnly $false 再写 → 依然被拒
  3. 读测试正常(18.8 MB/s 稳定读出)→ 设备通信没问题,只是拒绝写入
  4. 症状组合"能读不能写"直指 SD 卡物理写保护开关

根因 :这块"U 盘"实际是读卡器 + SD 卡的组合。重新插卡时,手滑把卡侧面的 LOCK 滑块碰到了锁定位置。

解法:把滑块推回靠近金手指的一端(解锁位)。推回去后写入、全量校验一次通过。

经验 3:遇到"突然只读",先查物理写保护开关,再查软件锁。顺序反了会浪费大量时间。

坑 3:装完重启,看到的却是 Windows 7

现象:安装完成、重启、拔 U 盘------屏幕上出现的是 Win7 启动管理器(还带一键 GHOST)。

诊断:这是双硬盘机器:Kingston 480G SSD(新装的 Ubuntu)+ Samsung 120G SSD(旧 Win7)。BIOS 启动顺序里 Samsung 排在前面,重启时根本没轮到 Kingston 上的 GRUB。

重要更正 :一开始我以为是误把 Ubuntu 装进了 U 盘,后来确认装的位置是对的,纯粹是启动顺序问题 。区分方法:如果真的装进 U 盘了,进入的 Ubuntu 会非常慢且 /home 在 U 盘上;而单纯启动顺序问题的特征是"BIOS 里换盘启动就能进对系统"。

解法

  • 临时:开机按 F12 选 Kingston 那块盘启动
  • 永久:F1 进 BIOS → StartupBoot,把 ATA HDD0: Kingston... 调到第一位,F10 保存

坑 4:登录报 "Login incorrect",恢复模式下发现系统是残缺的

现象 :成功进入 Ubuntu 登录界面,用户名密码却报 Login incorrect

诊断:按标准姿势进 GRUB recovery mode → root shell,结果发现更严重的问题:

  • passwd 命令不存在(正常 Ubuntu 必有)
  • ls /home 输出为空 ------ 根本没有任何用户被创建过

根因:这块盘上是多次安装中断/覆盖留下的半成品系统。

解法:不值得修,直接重装一遍(10 分钟)。重装时在 Profile setup 页把用户名、密码认真设置并记下来。

经验 4 :GRUB recovery mode 是 Ubuntu 的万能后门------重置密码、修 fstab、救引导都靠它。进入方式:开机按住 EscAdvanced options for Ubuntu → 带 (recovery mode) 的项 → root - Drop to root shell prompt,然后 mount -o remount,rw / 后即可操作。

坑 5:旧 U 盘狂报 "Harddisk3 有一个不正确的区块"

现象:格式化旧 U 盘复用时,系统日志每 3 秒刷一条 bad block,甚至读测试第一个 4MB 都读不出来(CRC 错误)。

诊断与解法

  • 先换主板后面板 USB 口、重新插紧 → 接触不良排除后读测试通过
  • 格式化成功后追加 2GB 读写压测,无 CRC 错误
  • 但这块盘已有前科:降级为"临时传输用",不存唯一副本的重要数据

坑 6:Windows 打不开装过系统的 U 盘

现象:做安装盘的 U 盘在 Windows 下打不开。

说明 :这不是故障。安装盘被写入后是 Linux 文件系统(ISO9660/ext4 混合布局),Windows 原生不认识。要恢复 U 盘日常使用,用 diskpartclean + 重建分区即可,无需第三方工具。

三、可复用的完整流程清单

把上面所有经验收敛成一份 checklist:

  1. ISO 校验 :SHA256 与官方 SHA256SUMS 比对
  2. 选对磁盘Get-CimInstance Win32_DiskDrive 确认目标盘编号和容量,写脚本时加一道型号断言防误写
  3. 原始写入 :物理盘句柄 → 锁卷 → 卸载卷 → 流式写入 → FlushFileBuffers
  4. 全量校验:回读全盘算 SHA256,与 ISO 哈希比对,通过才算完成
  5. 装机时 :老机器 BIOS 设 Legacy Only;安装器选盘时看容量区分内置盘和 U 盘
  6. 装完重启:双硬盘机器检查 BIOS 启动顺序
  7. 突然只读:先查 SD 卡 LOCK 滑块,再查软件层
  8. 登录异常 :GRUB recovery mode 兜底,ls /home 先确认用户是否真的存在

结语

这次折腾最大的收获是两条流程原则:

  • 写入后的全量校验不是可选项。写缓存会掩盖一切写入错误,抽查等于没查。
  • 排障先分清"软件层"和"硬件层"。只读先看物理开关,CRC 错误先换 USB 口,报错信息里的措辞("函数不正确" vs "循环冗余检查")本身就是重要的诊断线索。

希望这篇实录能帮你少踩几个坑。

相关推荐
阿钱真强道1 小时前
06 嵌入式操作系统 | vim 与软件管理:apt / 源码编译
ubuntu·vim·嵌入式·apt·源码编译
牢姐与蒯2 小时前
Linux进程间通信(三).基于匿名管道的进程池的实现
linux·运维·服务器·ubuntu
Linux-lucky14 小时前
32-38-Linux学习之旅之MySQL综合
linux·运维·学习·mysql·ubuntu
士訫1 天前
【Linux 踩坑】HP Victus RTX4050 Ubuntu 系统双屏无法同时点亮解决方案(完美适配 Advanced Optimus 机型)
ubuntu
指尖的爷1 天前
ARM 架构 Ubuntu(RK3588/aarch64)go开发环境安装手册
ubuntu·架构·golang
虚无的纽扣1 天前
【Linux】将进程知识与基础IO融会贯通——简单自定义Shell的实现
linux·ubuntu
问简2 天前
Ubuntu 26 + Windows 10 双系统 NTFS 共享盘笔记
ubuntu
pilifeng12 天前
Ubuntu Linux 目录结构详解
linux·ubuntu
daemon.qiang3 天前
国内虚拟机对接 Freedesktop:Fork xserver、自建 Runner 与提交 MR 实战
linux·ubuntu·centos·gitlab·开源软件