本文仅作为技术分享与个人复盘记录。
文中涉及 BIOS/磁盘/引导相关操作具有一定风险:如果你不理解每一步在做什么,请先停下来查资料或找有经验的人协助。
任何因盲目照做导致的数据丢失、系统无法启动等问题,作者概不负责。
前言
这是一次挺典型的“双系统惊魂”——装完 Debian,开机一看:Windows 盘没了。
硬件环境:Dell G3 游戏本,512G NVMe 固态硬盘 + 512G SATA 固态硬盘。
我的操作:在一块空闲盘上安装 Debian 13,安装程序选择了“自动分配最大可用空间”。
当时的现象:进 Debian 后用 fdisk -l、lsblk 一看,系统里只剩一块 476G 左右的盘(Debian 所在盘),另一块装满数据的 Windows 盘仿佛人间蒸发。
第一反应当然是:完了,是不是我分区时手滑把 Windows 盘给抹了?
结论先说在前面:这次并不是误格式化,也不是硬盘物理损坏,而是 BIOS 的存储模式(Intel RST/RAID On)导致 Linux “看不见”那块盘。下面按我当时的排查顺序,把整个过程整理成可复用的修复流程。
预备知识
RAID On / Intel RST vs AHCI
很多 Dell/联想等笔记本出厂会把存储模式设成 RAID On(Intel RST)。对 Windows 来说这通常“开箱即用”,但对 Debian 这类默认安装来说,可能出现驱动/识别问题,最终表现为:某些硬盘/控制器在 Linux 下根本不枚举出来。
而 AHCI 是更通用的模式,Linux 识别支持更稳。
为什么 BIOS 能看到、系统却看不到
BIOS/UEFI 能看到硬盘,只说明硬盘物理层面没消失。
操作系统看不到硬盘,通常意味着:控制器工作模式/驱动不匹配、或硬盘被某种固件/阵列逻辑“包”起来了。
诊断与修复流程
在你确认原因之前,不要做任何写入磁盘的操作,尤其是:
mkfs.*、“重新分区并写入分区表”、各种“修复分区/修复文件系统”的一键工具。
0. 先确认:是“真没了”还是“系统没识别”
先在 Debian 里看一眼系统到底识别到了什么:
lsblk你可能会看到两种情况:
- 只看到一块盘:先别慌,下一步去 BIOS 确认是否还能看到另一块盘。
- 两块盘都能看到:那就不是“磁盘消失”,而是你当时没认对设备名或分区;这篇文章就不是你的 case 了。
接下来最关键的一句:
如果 BIOS/UEFI 里两块盘都在,但 Debian 里只剩一块,那么大概率不是你把盘格式化了,而是 Linux 没“看见”它。
1. 看日志:抓到 RAID/RST 的蛛丝马迹
继续在 Debian 里看内核日志,确认控制器工作模式:
sudo dmesg | grep -iE 'rst|raid|vmd|nvme|ahci|intel'如果你看到了类似 Intel(R) RST、RAID、VMD 等字样,基本就能把锅锁定到 BIOS 的 RAID On / Intel RST 上。
我当时的关键信息其实就藏在这一段(节选):
[ 0.009012] ACPI: ... (v01 INTEL RstSataE ...)[ 0.009015] ACPI: ... (v01 INTEL RstSataV ...)看到 RstSata*,基本可以把“Linux 看不见另一块盘”与“RST/RAID On”强关联起来。
2. 核心修复:BIOS 把 RAID On 改成 AHCI
注意:直接切换模式可能导致 Windows 蓝屏(常见为
INACCESSIBLE_BOOT_DEVICE)。这不是“系统坏了”,而是驱动没有跟着切过来。按我下面的顺序做,通常可以无损解决。
2.1 修改 BIOS 设置
- 重启电脑,按
F2进 BIOS。 - 找到 System Configuration -> SATA Operation(有的机型在 Storage 相关菜单)。
- 将 RAID On 改为 AHCI。
- 保存并退出。
不同机型进入 BIOS 的按键可能不同,常见还有 Del、F12、Esc,以开机提示为准。
2.2 验证硬盘是否回归
回到 Debian,再跑一次:
lsblk正常情况下,你会重新看到两块 NVMe 盘(例如 nvme0n1 + nvme1n1)。Windows 那块盘通常会有较大的 NTFS 分区。
这里补一句更贴近实际情况的描述:
- 你的机器可能是 NVMe + SATA 的组合(我就是这种)。那么 Debian 盘可能显示成
sda,Windows 盘可能显示成nvme0n1。 - 如果 Windows 系统盘开了 BitLocker,Linux 下它不一定显示为
ntfs,反而会显示成BitLocker(见后文)。
上面的设备名仅作示例,具体请以你机器上 lsblk 的实际输出为准。
我当时 BIOS 改完之后,lsblk 的关键变化就是:从“只剩 sda”变成“sda + nvme0n1 同时出现”,nvme0n1 上还有一串典型的 Windows 分区结构。
3. 修复引导:让 GRUB 重新发现 Windows
硬盘回来了,但 GRUB 启动菜单不一定自动出现 Windows 项。
3.1 安装识别工具
sudo apt updatesudo apt install os-prober grub-efi-amd643.2 扫描 Windows 启动项
sudo os-prober预期会看到类似输出:
Found Windows Boot Manager on /dev/nvmeXn1pY@/EFI/Microsoft/Boot/bootmgfw.efi
3.3 更新 GRUB 配置
sudo update-grub重启后,GRUB 菜单里通常就会出现 Windows 选项。
Debian 13 上还有一个小坑:有些情况下
os-prober会被默认关闭。如果你装好了
os-prober但update-grub仍然不扫描 Windows,可以检查/etc/default/grub里是否需要设置:GRUB_DISABLE_OS_PROBER=false改完后再运行一次
sudo update-grub。
4. Windows 蓝屏:INACCESSIBLE_BOOT_DEVICE 怎么办
如果你在 GRUB 里选 Windows 后蓝屏了,核心原因很简单:
- Windows 之前按 RAID/RST 模式装的驱动
- 现在你切到了 AHCI
- Windows 一时半会儿没切过来,就会“找不到启动盘”
在硬件无物理故障且可进入恢复环境的前提下,通常不需要重装系统。下面两种方式选其一即可。
方法 A:进一次安全模式(更省事)
- 蓝屏后等待重启,进入 Windows 的“自动修复/恢复环境”。
- 选择:高级选项 -> 疑难解答 -> 启动设置 -> 重启。
- 按
4或F4进入 安全模式。 - 只要成功进过一次安全模式,Windows 通常会自动加载 AHCI 相关驱动。
- 再重启一次,正常模式即可进入系统。
方法 B:用 Windows 安装盘/PE 手动处理(进不去安全模式再用)
准备一个 Windows 安装 U 盘或 PE,启动后进入:修复计算机 -> 命令提示符。
执行下面步骤前,建议先备份关键数据(如果当前环境允许读取数据)。
- 先确认 Windows 分区与 EFI 分区盘符:
diskpartlist volumeexit- 修复/重建 EFI 引导(盘符示例:Windows 在
C:,EFI 在Z:):
bcdboot C:\Windows /s Z: /f UEFI- 强制下一次进安全模式(借机触发驱动切换):
bcdedit /set {default} safeboot minimal重启后进入一次安全模式,再执行以下命令取消安全模式循环:
bcdedit /deletevalue {default} safeboot5. (可选)Linux 挂载失败:BitLocker 与快速启动
排查过程中我还遇到过这种信息:
/dev/nvme0n1p3: TYPE="BitLocker"如果你在 Linux 下挂载 Windows 分区失败(例如提示 NTFS signature is missing),先不要急着 ntfsfix。
- 如果分区是 BitLocker:
ntfsfix对它没意义。 - 你要在 Linux 里读写:可以在 Windows 里关闭 BitLocker,或在 Linux 下研究
dislocker。 - 你只是要能启动 Windows:通常不需要挂载分区,能被
os-prober识别到 EFI 启动项就够了。
这次事故里,RST/RAID On 负责把硬盘“藏起来”,而 BitLocker 负责把“终于看到硬盘之后的排查体验”一脚踹进地狱。
它至少背一半锅的理由很简单:
- 它让关键分区“不像 NTFS”。从 Linux 视角看,大分区不是
ntfs,而是TYPE="BitLocker"。你如果按传统思路去跑ntfsfix、去挂载ntfs-3g,很容易得到NTFS signature is missing这种误导性报错,然后开始怀疑“分区表是不是坏了”。 - 它把“取证”和“救急”都变复杂了。在没解密/没拿到恢复密钥之前,你在 Linux 下能做的事情非常有限:既不方便验证分区里到底有没有 Windows,也不方便紧急拷数据(你能看到的往往只有 EFI/恢复分区)。
- 它让很多“本来能靠直觉解决的问题”失效。比如“双系统用户最常用的自救动作”之一就是:先进 Linux 把 Windows 分区挂上来看看文件还在不在——但 BitLocker 直接把这条路堵死了。
我对 BitLocker 的评价是:这玩意儿就是“排障加难器 + 密钥勒索模拟器”。
- 我建议绝大多数普通用户直接关掉 BitLocker。
- 如果你是双系统/爱折腾:更是建议关掉,别给自己加一层“未来一定会踩”的坑。
我身边就见过不少真实案例:
- 电脑没丢、也没被偷,系统也没中毒,最后却因为“恢复密钥忘了/找不到/微软账号对不上”——数据读不出来、系统进不去,只能重装。
这种结局有多离谱?诸位有所不知,根据野史记载,比尔盖茨给家门装了世界级防盗锁,结果小偷没来,比尔盖茨把钥匙弄丢了,然后只能把房子拆了重新盖。
对大多数日用/游戏本用户来说,它带来的主要收益并不是“安全”,而是:排障成本 + 跨系统不兼容 + 关键时刻的密钥地狱。直接关掉就完事了。
为了避免大家走弯路,这里把我当时踩到的“误判”也写清楚:
-
我一开始把
nvme0n1p3当成 NTFS 主分区,去跑了ntfsfix,结果直接报:NTFS signature is missing.这并不等同于“盘坏了”。后来用
blkid一查才发现:nvme0n1p3的真实类型是BitLocker,它本来就不是裸 NTFS。 -
当时
blkid的结果(节选)大概是这样的:/dev/nvme0n1p1: TYPE="vfat" LABEL="ESP"/dev/nvme0n1p3: TYPE="BitLocker"/dev/nvme0n1p4: TYPE="ntfs" LABEL="WINRETOOLS"/dev/nvme0n1p5: TYPE="ntfs" LABEL="Image"/dev/nvme0n1p6: TYPE="ntfs" LABEL="DELLSUPPORT"注意这里的
ntfs分区大多是恢复/工具分区;真正“装着 Windows 文件”的那块大分区如果启用了 BitLocker,会以BitLocker的形式出现。
结论就是:
- 要启动 Windows:你只需要 EFI 分区(
ESP,vfat)是可见的,GRUB 就能链式引导 Windows Boot Manager;BitLocker 不影响“能不能进 Windows”。 - 要在 Linux 下读 Windows 大分区:就不要再拿
ntfsfix去碰 BitLocker 分区了,要么在 Windows 里解密/暂停 BitLocker,要么走dislocker这条路。
6. (复盘补充)为什么日志里会出现“sdb1/exFAT”的烟雾弹
我当时在 dmesg 里还看到过这样一行:
exFAT-fs (sdb1): Volume was not properly unmounted. Some data may be corrupt.它很容易让人误以为“第二块盘就是 sdb”。但实际上这类信息也可能来自 U 盘/移动硬盘等外接设备。
所以这次复盘给我的一个经验是:
dmesg里出现某个设备名,并不等于它就是你要找的 Windows 系统盘。- 以
lsblk -o NAME,SIZE,TYPE,FSTYPE,LABEL,MOUNTPOINT+blkid的交叉验证为准,别只盯着某一条日志就下结论。
小结
这次事故最“反直觉”的地方在于:看起来像“我把盘删了”,实际上只是“系统没识别到”。最终结论可以浓缩成三句话:
- BIOS 里盘还在,Linux 里没了:优先怀疑 RST/RAID On。
- 切 AHCI 是关键一步,但要准备好 Windows 可能蓝屏,按安全模式方案走就行。
- 在没确认原因前不要写盘,尤其别碰
mkfs这类会直接造成不可逆损失的命令。
给双系统安装者的建议
- 安装前先看 BIOS:SATA Mode / Disk Operation 尽量选 AHCI,避免 RAID/RST 造成的识别坑。
- 关闭 Windows 快速启动:它可能让 NTFS 分区处于“半休眠锁定”状态,Linux 挂载会各种报错。
- 真遇到“硬盘消失”,先做只读排查:
lsblk、dmesg、看 BIOS,再决定下一步。
谨以此文记录那两个小时的冷汗,以及最后的虚惊一场。