Windows 救援工具箱(從 Linux Live USB 修 Windows)
這個 skill 假設你已經處在一個從隨身碟開機的 Linux 環境(Ubuntu / Debian / SystemRescue 都可以),目標是修一台壞掉的 Windows 電腦——它可能無法開機、藍底白字、忘記密碼、感染惡意軟體、或硬碟正在壞掉。
你(Claude / Codex)跑在 Linux 上,沒辦法用 Windows 內建的 sfc、DISM、chkdsk、WinRE。你的工具是 Linux 那邊的 ntfsfix、chntpw、testdisk、photorec、ddrescue、smartctl、clamav、dislocker、efibootmgr、hivexsh 這些。這份 skill 就是怎麼把這套工具組合起來解決 Windows 問題。
完整工具目錄(含安裝指令、用途、典型範例)見 references/14-cli-tools-catalog.md。
🚀 階段零:Bootstrap 環境檢查(每次 skill 啟動先跑)
這是 agent 進入這個 skill 時的第一件事。在問使用者症狀之前,先確認自己手上的工具齊不齊。
跑體檢腳本:
bash scripts/bootstrap-check.sh
腳本會回報核心工具(ntfsfix / chntpw / testdisk / photorec / ddrescue / smartctl ...)、Node.js / Claude Code 是否齊全、有無網路、是不是在 Live USB 環境。
根據結果決定下一步
| 體檢結果 | agent 該做什麼 |
|---|---|
| 全部 ✓ | 直接跳到下面「動手前必讀」、開始問使用者症狀 |
| 核心工具缺 + 有網路 | 跟使用者說「你的救援環境少了 X、Y、Z,要我跑 sudo bash scripts/install-rescue-tools.sh 一次裝完嗎?」得到明確 yes 才執行 |
| 核心工具缺 + 沒網路 | 告訴使用者:(1) 可以開手機熱點;(2) 從 USB 上的 offline-binaries/ 用 dpkg 裝(見 00-rescue-usb-preparation.md §9);(3) 純人工照 reference 操作 |
| Node.js 缺 | 提示使用者目前是用什麼方式跟 agent 對話(可能是另一台機 SSH 進來),看要不要在這台 Live USB 也裝個 Claude Code |
| Skill 沒在 ~/.claude/skills/ | 提醒使用者 symlink 過去,下次開新 Claude Code 才會自動載入 |
安裝救援工具的指令
# 互動式(每塊問一次,推薦)
sudo bash scripts/install-rescue-tools.sh
# 只裝核心
sudo bash scripts/install-rescue-tools.sh --core
# 含 Node.js + Claude Code
sudo bash scripts/install-rescue-tools.sh --with-node
# 全裝(不問)
sudo bash scripts/install-rescue-tools.sh --full
詳細的 USB 準備、Node.js 多種安裝法、Claude Code / Codex 安裝、離線備援見 references/00-rescue-usb-preparation.md。
Agent 行為原則
- 不要默默安裝:每次裝套件都先問使用者「我要跑 X 指令,會花約 Y 分鐘、占用 Z MB 空間。可以嗎?」
- 節省網路:如果使用者只想解決一個小問題(例如改密碼),不用堅持把全套救援工具裝完。
chntpw一個套件就夠 - 善用 tmux:要跑
ddrescue、photorec等長時間任務,永遠先tmux new -s rescue包起來。SSH 斷線 / Live USB 死機都不會把任務毀掉
⚠️ 動手前必讀(鐵則)
這幾條鐵則任何狀況都不能違反,違反一次可能就把資料毀掉:
- 先讀後寫:第一次掛載 Windows 磁碟一律
ro(read-only)。確認資料還在、症狀對得上,才考慮可寫掛載。 - 動手前先備份:任何寫入動作(ntfsfix、chntpw、删 pending.xml、清病毒)之前,至少把使用者重要資料
rsync到外接碟。硬碟有 SMART 警告時,先ddrescue做整碟映像再說。 - 掛載中的磁碟不要修:
ntfsfix、fsck、testdisk寫入模式,這些都要先umount。 - BitLocker 沒有金鑰先停手:如果是 BitLocker 加密磁碟而使用者拿不出 recovery key,硬幹只會多寫垃圾資料。先去 https://account.microsoft.com/devices/recoverykey 找。
- 碟正在死別硬讀:SMART 顯示有 reallocated/pending sector,或讀的時候卡死、有怪聲——立刻停掉,改用
ddrescue做映像,之後在映像上動。原碟每多讀一次都可能把僅存的好磁區也死掉。 - 改 registry 前先複製整個 hive:
cp SAM SAM.bak再chntpw。 - 跟使用者確認再執行有破壞性的步驟:「我接下來要把 hiberfil.sys 刪掉以便正常掛載,你確定 Windows 不需要保留待機狀態嗎?」這種確認永遠值得問。
詳細的安全清單見 references/01-safety-principles.md。
工作流程
每次救援都照這個五階段走,不要跳:
階段一:盤點環境
先弄清楚你在哪、目標在哪、有什麼工具:
# 確認自己在 live USB 環境
cat /etc/os-release
lsb_release -a 2>/dev/null
# 列出所有磁碟和分割區
lsblk -f -o NAME,FSTYPE,LABEL,SIZE,MOUNTPOINT,UUID
sudo fdisk -l
sudo parted -l
# 確認檔案系統類型(NTFS / FAT32 / BitLocker)
sudo blkid
# 確認是 UEFI 還是 Legacy BIOS 模式開機
[ -d /sys/firmware/efi ] && echo "UEFI" || echo "Legacy BIOS"
把結果留下來——你要知道:
- Windows 系統碟在哪個
/dev/sdX或/dev/nvmeXnY(通常是最大的 NTFS) - 有沒有 EFI 分割區(FAT32, ~100-500MB)
- 有沒有 Recovery 分割區
- 有沒有 BitLocker(
blkid會顯示TYPE="BitLocker") - 內部碟健康狀態(
sudo smartctl -H /dev/sdX,不健康就先別動)
階段二:症狀分流(重要)
問使用者實際發生什麼事,照下面的「症狀 → 修復路徑」對應表決定要讀哪個 reference。不要一次讀全部,只讀對應的那幾個。
階段三:備份
幾乎所有情況都先做這一步。最少:
# 唯讀掛載
sudo mkdir -p /mnt/win
sudo mount -t ntfs-3g -o ro /dev/sdX1 /mnt/win
# 備份使用者資料夾到外接碟
sudo rsync -avh --info=progress2 \
/mnt/win/Users/USERNAME/ \
/media/USERNAME/external/backup-$(date +%Y%m%d)/
碟有疑慮時改用 ddrescue(見 references/08-data-recovery.md)。
階段四:修復
讀對應的 reference 後執行。每動一個破壞性指令都跟使用者覆述一次再執行。
階段五:驗證
修完先別重開 Windows,先在 Linux 這邊確認結果:
# 重新檢查檔案系統
sudo umount /mnt/win
sudo ntfsfix --no-action /dev/sdX1 # dry-run
sudo ntfsfix /dev/sdX1
# 重新看 SMART
sudo smartctl -a /dev/sdX
# 看 BCD / EFI 結構
ls /mnt/efi/EFI/Microsoft/Boot/
之後請使用者重開機並回報狀況。如果還是壞,回到階段二重新分流——但這次有了更多線索。
症狀 → 修復路徑
找最接近使用者描述的那一行,讀對應的 reference 檔。多個症狀疊加時,先處理優先級高的那個(B級>A級)。
B 級:先救命的(硬體 / 加密 / 資料)
| 症狀 | 優先讀 |
|---|---|
| 硬碟有怪聲、讀取卡死、SMART 警告 | 08-data-recovery.md → 先 ddrescue 做映像 |
| BitLocker 加密、需要進到資料 | 10-bitlocker.md |
| 「我只想救資料,不修了」 | 08-data-recovery.md |
| 想救已刪除的檔案 | 08-data-recovery.md →「PhotoRec / testdisk undelete」 |
A 級:開機 / 系統層級
| 症狀 | 優先讀 |
|---|---|
| 開機顯示 BOOTMGR is missing / Operating System not found | 04-boot-repair.md |
| 開機卡在 Windows logo、轉圈無限轉、自動修復失敗 | 04-boot-repair.md + 05-filesystem-repair.md |
| UEFI 找不到 Windows Boot Manager | 04-boot-repair.md →「UEFI / efibootmgr」 |
| 雙系統裝完 Linux 後 Windows 不見了 | 04-boot-repair.md →「dual boot 修復」 |
反覆藍底白字(BSOD)、INACCESSIBLE_BOOT_DEVICE |
05-filesystem-repair.md + 11-driver-and-update-issues.md |
| Windows Update 安裝失敗無限重啟 | 11-driver-and-update-issues.md →「移除 pending.xml」 |
| 磁碟分割表壞掉、看不到 Windows 分割區 | 05-filesystem-repair.md →「testdisk 修分割表」 |
A 級:帳號 / 設定檔
| 症狀 | 優先讀 |
|---|---|
| 忘記 Windows 密碼 | 06-registry-edit.md →「password reset (chntpw)」 |
| 帳號被鎖住 / 停用 | 06-registry-edit.md →「帳號狀態」 |
| 想啟用隱藏的 Administrator | 06-registry-edit.md →「啟用內建管理員」 |
| 登入後桌面空白、只看到暫存設定檔 | 12-profile-corruption.md |
| 「使用者設定檔服務登入失敗」 | 12-profile-corruption.md |
A 級:惡意軟體
| 症狀 | 優先讀 |
|---|---|
| 中毒 / 勒索病毒 / 開機就跳廣告 | 07-malware-cleanup.md |
| 瀏覽器被綁架、hosts 被改 | 07-malware-cleanup.md →「hosts 與 DNS 還原」 |
| 怪怪的程式每次開機自動啟動 | 07-malware-cleanup.md →「自動啟動清理」 |
A 級:檔案系統 / 硬體
| 症狀 | 優先讀 |
|---|---|
ntfs-3g 掛載失敗 / 提示 hibernated |
03-mount-windows.md |
| 磁碟容量怪、檔案開啟錯誤、隨機檔案消失 | 05-filesystem-repair.md + 09-hardware-diagnostics.md |
| 想知道 RAM/CPU/SSD 健康度 | 09-hardware-diagnostics.md |
| 系統很慢、想知道是不是硬碟壞了 | 09-hardware-diagnostics.md |
不知道發生什麼事
跑 scripts/boot-diagnostic.sh,它會收集 BCD、EFI、最近的事件日誌(透過 chntpw + python),然後給你一個摘要。
Reference 檔索引
按需讀取,不要一次全部讀。
| 檔案 | 內容 |
|---|---|
00-rescue-usb-preparation.md |
怎麼準備這支救援碟(USB、Ubuntu、套件、Node.js / Claude Code / Codex 安裝、離線備援) |
01-safety-principles.md |
詳細安全清單、什麼時候該停手 |
02-symptom-triage.md |
更細的症狀分流(含罕見組合) |
03-mount-windows.md |
掛載 NTFS、處理 hibernation、fast startup、BitLocker 偵測 |
04-boot-repair.md |
UEFI / BCD / MBR / EFI 分割區、雙系統修復 |
05-filesystem-repair.md |
ntfsfix、testdisk 修分割表、partition undelete |
06-registry-edit.md |
chntpw 密碼重設、hivexsh 編輯、停用問題服務 |
07-malware-cleanup.md |
clamav 離線掃描、autorun 清理、hosts 還原、排程工作檢查 |
08-data-recovery.md |
rsync 備份、ddrescue 映像、PhotoRec 救刪除檔、testdisk undelete |
09-hardware-diagnostics.md |
smartctl、badblocks、memtester、lshw、sensors |
10-bitlocker.md |
dislocker 完整流程、recovery key 取得方式 |
11-driver-and-update-issues.md |
pending.xml、SoftwareDistribution、問題 driver 移除 |
12-profile-corruption.md |
NTUSER.DAT、ProfileList registry、重建使用者資料夾 |
13-when-linux-cannot-fix.md |
這些問題 Linux 救不了,要請使用者準備 Windows 安裝媒體 |
14-cli-tools-catalog.md |
完整 CLI 工具目錄:每個工具的 apt 安裝、用途、典型指令、限制(agent 想找工具先翻這份) |
Scripts 索引
scripts 是可直接執行的輔助工具,每個都會列印它要做什麼、等你確認:
| Script | 用途 |
|---|---|
bootstrap-check.sh |
環境體檢(不安裝,只回報)。agent 進 skill 第一個跑這個 |
install-rescue-tools.sh |
在剛開機的 Ubuntu Live 上一次裝完所有工具 + Node.js + Claude Code / Codex(支援 --core / --with-node / --full / --auto) |
identify-windows-volumes.sh |
自動偵測哪一個分割區是 Windows 系統、EFI、Recovery |
mount-windows-safe.sh |
安全掛載(先 ro,處理 hibernation) |
backup-user-data.sh |
使用者資料夾備份到外接碟,帶進度條 |
disk-health-report.sh |
一次性出健康度報告(SMART + badblocks dry-run) |
boot-diagnostic.sh |
收集 BCD/EFI/registry 開機相關資訊出摘要 |
malware-quick-scan.sh |
clamav 更新病毒碼後針對常見路徑掃描 |
跟使用者互動的原則
- 先問症狀,不要先動手:使用者說「不能開機」要再問「卡在哪一個畫面、有沒有錯誤代碼、什麼時候開始的、最近有沒有更新或裝什麼東西」。同樣是不能開機,BCD 損壞、NTFS 損壞、硬碟壞掉的修法完全不同。
- 每個
sudo指令都先解釋:使用者可能不熟 Linux。「我要跑sudo ntfsfix /dev/sda3,這會嘗試修 NTFS 上的小毛病,如果碟有實體損壞它會中止不會把事情弄更糟。要繼續嗎?」 - destructive 動作要兩段式確認:第一次說明會做什麼、影響什麼、是否可逆;使用者答 yes 後第二次覆述指令再執行。
- 修不完不要硬修:有些東西(深層 WinSxS 損壞、特定 driver 黑屏)Linux 救不了,老實告訴使用者「這部分需要 Windows 安裝媒體進 WinRE 跑 sfc/DISM」,見
13-when-linux-cannot-fix.md。 - 記錄做過什麼:每修一個地方就寫到
/tmp/rescue-log-$(date +%Y%m%d).md,使用者之後送修才有東西給技師看。
預設語言
繁體中文(台灣)。指令、檔名、技術名詞保留英文。錯誤訊息引用時保留原文再附中譯。