Ubuntuで起動しないWindowsからデータを取り出す
Windowsは使っているうちにアップデートやドライバなど様々な要因で起動しなくなることがあります。
起動できなくなってしまうとWinowsを再インストールすることで再度使うことができますが、中にあるデータは消えてしまいます。
バックアップを取っていれば良いですが、こういうものは急に来るもので、バックアップ漏れが出てくることもしばしばあります。
そんな時に救出する方法の一つがUbuntuを用いてデータを取り出す方法です。
Windowsインストーラを用いる方法やVHDを用いる方法とは異なり、Bootable USBを一本用意しておけばいつでもGUIを用いてファイルの操作ができるので最も簡単な方法だと思います。
なお、今回はUSBメモリを使いますが、Live CDでも同じなのでお好きな方で。
ブログ(起動しないWindowsからUSBメモリとUbuntuでデータを救出する)と重複する部分が多いと思いますが、永く残す意味合いでこちらにも置いておこうと思います。

最終更新日: 2020/11/05



Ubuntuでデータ救出

検証環境


Bootable USB 作成マシン
項目 詳細
OS Windows 10 Pro x64

救出対象マシン
項目 詳細
機種 VMware Workstation Player
OS Windows 10 Pro x64

今回救出対象としてVMware Workstation Playerによる仮想マシンを用意しましたが、富士通のFMV、パナソニックのLet's noteやMouseのDAIVでも実際に救出していますのでUSB Bootができるマシンであればなんでもいけるかと思います。


必要なもの

  1. USBメモリ (2GB以上) *
  2. Etcher *
  3. 有線マウス

*1 USBメモリはUbuntu公式マニュアルでは2GB以上となっていますが、今回使用する日本語 Remix版はUbuntu 18.04.3 LTSデ1.9GBほどになっていたので4GB以上はあったほうがいいかも。

*2 EtcherはUSBへUbuntuインストーラを書き込む際に使用します。

*3 有線マウスは必須ではありませんがラップトップPCだとタッチパッドが反応しない機種もあるのであると安心です。
無線マウスも同じく反応しないものがあるので有線のほうが良いでしょう。


Bootable USBの作成

Ubuntuのインストールイメージをダウンロード

書き込み用のUbuntuインストールメディアをダウンロードしておきます。
通常版のダウンロードリンクもありますが、ここではUbuntu 日本語 Remix イメージをダウンロードします。

記事執筆当時は20.04.1 LTSが最新で配布されていますが、今回は18.04.3 LTSをダウンロードします。
試してませんが、おそらく新しいバージョンでも以下の手順は変わらないと思います。

なお、公式版であるubuntu.comのほうはBitLockerの解除で必要なdislockerの環境構築が超めんどいです。
なので素直にRemixを入れておきましょう。

USBメモリの消去

エクスプローラよりUSBメモリをフォーマットします。

フォーマットの際の形式はFAT32を選択します。
アロケーションユニットサイズ(クラスターサイズ)は標準のアロケーションサイズでOKです。

クイックフォーマットの有無はどちらでもいいですが、有効にしておくと数秒でフォーマットが終了します。
無効にするとMFTのリセットに加えて不良セクタのチェックを行うので結構時間がかかりますが、厳密にフォーマットしたい場合は有効にしておきましょう。これはお好きな方で。


この時にドライブレター(C:などのこと)を確認しておきましょう。
今回はH:ですね。

macOSの場合はディスクユーティリティでUSBメモリを消去します。
フォーマット形式はMS-DOS (FAT)でフォーマットしておきます。
なお、macOSの場合はディスクユーティリティの装置の表記(今回はdisk2s1)を確認しておきましょう。

USBメモリに書き込み

Etcherは3ステップでBootable USBを作成することができます。
まずは「Flash from file」より先ほどダウンロードしたisoファイルを選択します。


次に「Select target」によりUSBメモリを選択します。
基本的にUSBメモリしか表示されないと思いますが、HDDなども表示される可能性もあるのでLocationがフォーマットの際に確認したドライブレター(macOSならdisk2s1など)と一致するかどうかしっかり確認して選択しましょう。


あとは「Flash!」をクリックすると書き込みが始まります。


USBブートと救出

USBブート

パソコンによってはBIOSの設定変更が必要なので必要に応じて行ってください。
マザボメーカーによってキーは異なりますが、大体はF8, F11, F12のどれかなんじゃないかなと。
ラップトップだとメーカーと製品によりですが、ググったら大体マニュアル出てきますのでそれで対応すると良いでしょう。
参考程度に、FUJITSUのFMV、パナソニックのLet's noteは完全シャットダウン(あるいは再起動)のあとに大体F2連打でピーという音がなった後BIOSが立ち上がります。
Mouse DAIVはF7だったかな。

起動したらTry ubuntu without installingを選択し、エンターで起動します。

Windows領域へアクセス

Ubuntuが立ち上がってデスクトップが表示されるので、ファイルビューアを立ち上げて他の場所を開きます。
するとWindowsの領域がマウントされているため、そこでファイルのコピーなどをすることができるはずです。
あとはバックアップ用USBを挿し込んでコピペしていけば救出完了です。

...というのは特定の条件下での話で、ハイバネーション・高速スタートアップが有効の場合は自動でマウントされません。
また、Bitlockerがかかっている場合も同様にマウントされません。
これらは別の方法でマウントする必要があります。


ハイバネーションやFast Bootが有効の場合

ハイバネーション(休止状態)はシャットダウン時にHDD側にメモリ情報を残して次回起動時に復元します。
この状態でUbuntuなどにマウントし、書き換えてしまうと正常に復元できなくなる場合があるため自動でマウントできなくなっています。
また、高速スタートアップも一部のメモリ情報をHDD側へ情報を退避させておいて次回起動時にその情報を復元するため、同様にマウントされません。
Windows 8以降なら自動で有効になっており普通にシャットダウンを行っていれば大体はこの問題にハマるかと。
悪い機能ではないので無効にはせずに次の読み取り専用でマウントする方法で対応しましょう。

スタートアップとシャットダウンの優れたエクスペリエンスを提供する

デバイスファイルの確認

GParted

GPartedを検索し、立ち上げると自動で接続されているドライブが表示されます。
ハイバネーションで起動しないドライブを探し、パーティションをメモしておきますよう。
今回は/dev/sdb2でした。
手持ちの機器の問題でハイバネーションが効いてる状態のディスクを作ることができなかったため通常のNTFSフォーマットのディスクとして表示されていますが、効いている状態であればファイルシステムが不明になっているかもしれません。

Terminal

Terminalではfdiskコマンドにlオプションをつけることで該当するパーティションのデバイスファイルが表示されます。
    $ sudo fdisk -l
                    

読み込み専用でマウント

デバイスファイルがわかればあとはマウントするだけです。
ただし、-rオプションを付けないとマウントされないので注意してください。
    $ sudo mkdir /media/windows
    $ sudo mount -t ntfs -r /dev/sda4 /media/windows
                
すると/media/windowsディレクトリの中にHDDがマウントされているはずです。
処理が終わってアンマウントする場合はumountで。
    $ sudo umount /media/windows
                    

読み込み/書き込みモードでマウント

理想は一度Windowsを立ち上げて完全シャットダウンを行ってからマウントすることですが、この記事の主旨としてそれは不可能な場合がほとんどでしょう。
そこで、ハイバネーションのメタデータを消去して書き込みモード有りでマウントするremove_hiberfileオプションが提供されています。
実際の動作は詳しく見てないのでわかりませんが、このオプションを付けてを実行するとメタデータが消去される(多分hiberfil.sysが消される?)のでハイバネーションで保存していた状態は消去されます。

    $ sudo mount -t ntfs -o ro remove_hiberfile /dev/sda4 /media/windows
                

救出で書き換えたいってことはほとんどないでしょうけど、一応可能ってことで。


BitLockerをかけている場合

BitLockerをかけている場合はさらに面倒です。
Windowsで救出する場合は純正の機能で回復キーさえあればロック解除ができるのですが、今回はUbuntuのためそのような機能はありません。
そこで、OSSのロック解除するツールを使用して救出を試みます。
なお、BitLocker回復キーが手元に無い場合は救出できませんのでご注意ください。
一応マイクロソフトアカウントから取得できる場合がありますが、サーバへ保存していない場合は取得できないのでBitlocker回復キーは予め保存しておきましょう。

回復キーの取得

コントロールパネルから取得

起動可能な状態で予め操作しておく必要がありますが、Bitlockerの回復キーはコントロールパネルより取得できます。

コントロールパネルを開き「システムとセキュリティ」をクリックします。
すると「Bitlocker ドライブ暗号化」という項目があるため、それをクリックします。

Bitlockerが掛かっているドライブが表示されるため、該当するドライブの「回復キーのバックアップ」をクリックします。

すると回復キーのバックアップ方法の選択ウィザードが出てくるので都合の良い方法でバックアップを取っておきます。
なお、ファイルに保存する場合はBitlockerをかけるドライブ以外でないと保存できないので注意してください。
どうしても同一ドライブに一旦保存したい場合は、印刷を選んでPDF出力しましょう。
ネットワークドライブはそもそも表示されません。

コマンドで取得

同様にコマンドプロンプト / PowerShellからも取得することができます。

左下のWindowsアイコンのボタンを右クリックするとメニューが出るため、「Windows Power Shell(管理者権限)」または「コマンドプロンプト(管理者権限)」をクリックします。
今回は用意した環境の都合でコマンドプロンプトを使用します。
Windows 10 Creators Update (Red Stone 2)から既定のシェルがコマンドプロンプトからWindows Power Shellに変更されました。
今回はどちらでも同じなので表示されてる方で大丈夫です。

起動できたら「manage-bde」コマンドでBitlockerの情報を取得します。
C:\> manage-bde -protectors -get C:
BitLocker ドライブ暗号化: 構成ツール Version 10.0.17134
Copyright (C) 2013 Microsoft Corporation. All rights reserved.

ボリューム C: []
すべてのキーの保護機能

    パスワード:
        ID: {FA215A72-9C46-44C2-AEF1-DFF50F21E362}

    数字パスワード:
        ID: {FA215A72-9C46-44C2-AEF1-DFF50F21E362}
        パスワード:
            370106-312191-279840-708488-516648-332167-095689-381293
                    
ずらっと表示されますが、数字パスワードにあるパスワードの欄が回復キーとなります。
いろいろあってわかりづらいと思いますが、要するに6桁の数字がハイフンを挟んで6つ並んだ、計48桁の数字の羅列が回復キーです。

マイクロソフトアカウントより回復キーの取得

マイクロソフトアカウントに保存している場合はこの手順で取得する必要があります。

Microsoft Accountを開き、Bitlockerをかけているアカウントでサインインします。

するとデバイス一覧があるため、該当する端末があればそのまま「管理」をクリックし、無ければ「全てのデバイス」をクリックします。

デバイス一覧の中から該当するデバイスを探し出し、下の「管理」とか「詳細を表示する」とかいろいろなパターンで書かれたリンクをクリックします。(統一しろよ)

下の方に「BitLocker データ保護」という項目があり、ストレージ一覧が表示されているはずなので救出したいストレージの「回復キーの管理」を開きます。 すると長い英数字の回復キーが表示されるため、メモしておきます。
もし回復用のUbuntu側で見ているのであればコピーしてもOK。

dislockerのインストール

まずはdislockerのインストールをしておきます。
幸いdislockerはJapanese Ubuntuの場合パッケージシステムからインストールするだけで済みます。

$ sudo apt update
$ sudo apt install dislocker
                

無事インストールできたら念の為本当にインストールできたか確認しておきましょう。
$ dislocker --help
dislocker by Romain Coltel, v0.7.1 (compiled for Linux/x86_64)
                

デバイスファイルの確認

GParted

解錠作業の前に解錠したいストレージのデバイスファイルを確認します。
上述したハイバネーションと同じですが、パーティションだけ異なり、ここではbitlockerのパーティションを探します。
今回は/dev/sda4でした。

Terminal

また、同様にfdiskコマンドでも確認できます。
ただし、ファイルシステムは書かれていないのでタイプとサイズで見極めるしか無いでしょう。
$ sudo fdisk -l
                    

BitLockerパーティションの解錠

Bitlockerパーティションの解錠は先程インストールしたdislockerを用います。
dislockerではいくつかオプションがありますが、-rで読み取り専用、-V [volume]で解錠するボリュームを指定、-p[key]で回復キーを指定します。
なぜか-pだけスペースがないので癖でスペース入れないように気をつけましょう。
--は解錠した情報を一時的にマウントする場所を指定します。
$ sudo mkdir /mnt/bitlocker
$ sudo dislocker -r -V /dev/sda4 -p123456-XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX -- /mnt/bitlocker
                
未確認ですが、USBに保存している場合はdislocker-fuseを使うらしい。
$ sudo dislocker-fuse -r -V /dev/sda4 -f /media/user/usb-drive/00000000-0X0X-0XX0-XXX0-XXXX0XXX00XX.BEK -- /media/bitlocker
                    

あとは/mnt/bitlocker内にあるdislocker-fileをマウントするとファイルビューアで操作ができるようになります。
$ sudo mkdir /media/windows
$ sudo mount -r -o loop /media/bitlocker/dislocker-file /media/windows
                
アンマウントする場合はumountで
$ sudo umount /media/windows
$ sudo umount /mnt/bitlocker