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 → Startup → Boot,把 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、救引导都靠它。进入方式:开机按住 Esc → Advanced 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 盘日常使用,用 diskpart 的 clean + 重建分区即可,无需第三方工具。

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

把上面所有经验收敛成一份 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 "循环冗余检查")本身就是重要的诊断线索。

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

相关推荐
如若1232 小时前
Windows SSH + Headscale/Tailscale 组网及免密登录完整配置教程
运维·windows·ubuntu·ssh·内网穿透
菌菌的快乐生活10 小时前
Rufus + Ubuntu 24.04 Server(中山大学镜像)通用安装教程
ubuntu
垆边人似月.11 小时前
Ubuntu 配置 Samba 共享文件夹并映射到 Windows 完整指南
linux·windows·ubuntu
用户8351414049491 天前
把日志和寄存器值喂给AI做故障定位,我的实际问法
linux·ubuntu
进击的荆棘1 天前
MySQL——在ubuntu环境下安装MySQL
数据库·mysql·ubuntu
易点云徐源2 天前
HP 暗影精灵 PRO 16 安装双系统后,开机直接进入 Windows,按 F9 才能进入 Ubuntu:GRUB 菜单不显示的处理方法
linux·运维·ubuntu
Sayai2 天前
Ubuntu 开发环境搭建避坑(一):网卡 EEE 致 60% 周期性丢包,Realtek RTL8125 网络黑洞排查与修复
linux·运维·网络·ubuntu·性能优化
牢姐与蒯2 天前
WSL2 迁移教程:把Ubuntu+WSL2从C盘挪到别的盘
linux·运维·服务器·网络·ubuntu·1024程序员节
小菜要扣篮2 天前
Ubuntu 下使用 vscode 打开 C++ 项目后,无法通过 F12 定位到定义问题解决
c++·vscode·ubuntu
hhhjhl4 天前
Undici 跨端三方库仓颉适配全流程
java·开发语言·ubuntu