diff --git a/src/content/blog-metas/2024-12-13-diskclone.json b/src/content/blog-metas/2024-12-13-diskclone.json new file mode 100644 index 0000000..750dca4 --- /dev/null +++ b/src/content/blog-metas/2024-12-13-diskclone.json @@ -0,0 +1,3 @@ +{ + "postDate": "2024-12-12T14:35:44.192Z" +} diff --git a/src/content/blogs/2024-12-13-diskclone.md b/src/content/blogs/2024-12-13-diskclone.md new file mode 100644 index 0000000..62f9147 --- /dev/null +++ b/src/content/blogs/2024-12-13-diskclone.md @@ -0,0 +1,80 @@ +--- +title: GPT/UEFI/Secure Boot 環境で無料ツールだけで Windows をクローン +description: | + この記事は OUCC Advent Calendar 2024 の 13 日目の記事です。GPT/UEFI 環境で有料ソフトを使わずに、無料で Windows のディスククローンを実現する方法を説明します。 +author: watamario15 +category: tech +tags: [advent-calendar] +--- + +この記事は [OUCC Advent Calendar 2024](https://adventar.org/calendars/10655) の 13 日目の記事です。昨日は Arei1126 (izumi104) さんの [Value, Lightness, & Luminance (強度、明度、及び輝度)銀塩フィルムからグリザイユ画法まで](https://qiita.com/Arei1126/items/7f946bf5ceb5a39e7813)でした。本日は、GUID Partition Table (GPT) / Unified Extensible Firmware Interface (UEFI) / Secure Boot 環境で有料ソフトを使わずに、無料で Windows のディスククローンを実現する方法を説明します(ちなみに、前回で研究室サーバ管理関連のネタは尽きたので無関係な内容になります。もちろん、もっと色々やっているわけですが、記事になるネタかどうかというと別問題です。)。ディスククローンとは、あるディスクの内容をそっくりそのまま別のディスクに複製する作業のことで、主にディスクの換装時に実施します。GPT という文字列を見て生成 AI やら LLM やらの話を聞けると思って来たあなたはこっそりお帰りください。残念ながら Generative Pre-trained Transformer ではなく GUID Partition Table の話です。 + +今回の内容は**それなりにコマンドやディスク操作について理解している方が対象です**。下手にやるとデータが吹っ飛ぶので、あまり詳しくない場合は大人しく有料ソフトに頼るのが無難です。というか、**それなりに理解している人でもやらかすリスクがある危険な操作なので、大切なデータのバックアップは必ず取ってから作業するようにしましょう**。以下の手順は自己責任で実施することとし、一切の損害について私は責任を負いません。 + +## GPT/UEFI/Secure Boot 環境とは + +本気で説明するとキリがないのと、自分とてちゃんと理解しているわけではないので、詳細には踏み込まず「そもそもどんな環境がこの環境に該当し、該当したら何なのか」程度の話にしておきます。 + +そもそも、2010 年頃までは Master Boot Record (MBR) / Basic Input/Output System (BIOS, Legacy BIOS) の環境が主流でした。この時代はディスククローンといえば「`dd` してはい終わり」で、(怪しげなものを含めて)無料の GUI ツールも多くあったので、ディスククローン作業に困ることはありませんでした。その後、パーティションが 4 つまでしか切れないとか、Intel 8086 時代を引きずったレガシー仕様がそろそろ辛いとか、様々な背景から GUID Partition Table (GPT) / Unified Extensible Firmware Interface (UEFI, UEFI BIOS) 環境に移行されました。これはシステムのモダン化にあたり大きく貢献したわけですが、同時に導入された Secure Boot 機能も相まってディスククローン作成の難易度が飛躍的に上昇する結果となりました。加えてかつて無料でクローン機能を提供していたソフトウェアも何の因果か軒並み有料化されてしまい、ディスク換装のためのディスククローンという、何の変哲もない簡単なはずの作業に妙に苦労する世の中になってしまいました。 + +## 手順 + +GPT/UEFI/Secure Boot の Windows 11(BitLocker 有効)という最高難度の環境を想定します。Intel/AMD CPU の Windows 11 を使用しているのであれば、特殊なことをしていない限り最初からこの構成です。また、元のディスクから、同じかそれ以上のサイズのディスクに複製する想定です。そうでない場合は、パーティションを事前にディスクの先頭側に転送先に収まるように縮退させておく必要があります(おそらく BitLocker を無効化すれば GParted からできると思います)。必ずしも以下の手順が正解ということではなく、単に自分の環境では以下の方法でできたということに過ぎないので、そこは注意してください。 + +予め、以下を用意しておきます。ISO をダウンロードして [Rufus](https://rufus.ie/ja/) などでそれぞれ USB メモリなどに書き込むのがお手軽です。 + +- [GParted](https://gparted.org/download.php) の Live バージョンの起動ディスク +- [Windows 11 インストールディスク](https://www.microsoft.com/ja-jp/software-download/windows11)(回復用ディスクでも良い) + +また、繰り返しになりますが、万一に備えて**大切なデータのバックアップは必ず取っておいてください**。 + +1. Windows 設定から BitLocker を無効化する(後で戻す) + - 完了するまで待つ + - 再起動後にまた勝手に有効化される場合があるので注意 +1. UEFI 設定から Secure Boot を無効化する(後で戻す) +1. シャットダウンした状態で、転送先ディスクを追加で接続する +1. 予め作成したディスクから GParted のライブ環境を起動する + 1. ターミナルを開き、`sudo parted -l` で容量などの各種情報を参考にクローン元とクローン先ディスクの在り処を調べる + - `/dev/nvme0n1` みたいな形式 + 1. `dd` コマンドでクローンする(**操作対象を指差し確認!!**) + - `sudo dd if=クローン元 of=クローン先 bs=16M status=progress`(NVMe SSD 1 TB で 1 時間程度) + - 1 つ前に調べた在り処をそれぞれ `クローン元` と `クローン先` に**正確に**入力する(**逆にしたり打ち間違えたりすると永久にデータが損失する**) + - `bs` はブロックサイズで、なくてもいいがある程度大きい値を指定した方が高速 + - `status=progress` で進捗表示を出す(付けないと動作状況や所要時間が分からない) + - クローン元に不良セクタがある場合は[この辺](https://blog.onodai.com/posts/2019-02-19-tue)を参考にする + 1. 元よりも大きなディスクに転送した場合は、GParted アプリを起動してパーティションレイアウトを拡大する(**操作対象を指差し確認!!**) + - 「ディスク容量に合わせてパーティションテーブルを修正しますか」系の表示が出た場合は素直に従う + - 回復環境 (Windows RE) がデータ領域の後にある場合、それをディスク末端に移動させてからデータ領域を目一杯拡大する +1. シャットダウンして**即座に転送元ディスクを抜く** + - **2 枚刺さった状態で Windows を起動するとクローン元ディスクまで壊れる!!** + - 同じ GUID を持ったパーティションがディスクを跨いで複数存在することで OS が混乱する +1. この状態で Windows を起動できるかどうかを確認する(おそらく BSoD で失敗する) + - もし普通に起動できた場合は 13 まで進む +1. 予め作成した Windows 11 インストールディスクを起動し、回復メニューからコマンドプロンプトを開く +1. `diskpart` を起動する(**操作対象を指差し確認!!**) + 1. `lis vol` で「System」みたいに命名された FAT32 の 100 MB 位の Volume (EFI System Partition; ESP) を探す + 1. `sel vol 見つけたVolumeの番号` + 1. `ass letter=a` で適当なドライブレター(この例では `A`)を振る + 1. `exit` で抜ける +1. `del A:\EFI\Microsoft\Boot\BCD` で既存の機能していない Boot Configuration Data (BCD) を削除する(先ほど `A` を振った場合の例) +1. `bootrec /Rebuildbcd` で BCD を再構築する +1. コマンドプロンプトを閉じてスタートアップ修復する +1. 通常起動することを確認 + - 起動しなければもう一度スタートアップ修復し、それでも無理ならここまでのステップを再確認する +1. UEFI 設定から Secure Boot を有効化する +1. Windows 設定から BitLocker を有効化する(これは勝手にされるかも) + +途中で回復環境を移動させた場合は、以下の作業を管理者コマンドプロンプトで行う必要があります(BCD の再設定だけでも必要になるかも)。 + +1. `reagentc /disable` で既存の機能していないエントリを無効化する +1. `reagentc /info` で移動後の回復環境のパスを調べる +1. `reagentc /setreimage /path 表示されたパス:\Recovery\WindowsRE /target C:\Windows` で 2 で得られた正しいパスを登録する +1. `reagentc /enable` で有効化する + +以上で作業は終わりです。お疲れ様でした。 + +## おわりに + +本日は、GPT/UEFI/Secure Boot 環境で有料ソフトを使わずに、無料で Windows のディスククローンを実現する方法を説明しました。単なるディスククローンとは思えない高度に専門的で複雑な作業となり、かつての MBR/BIOS 時代に慣れ親しんだ方には衝撃だったのではないでしょうか。これが現代の現実として受け止めるしかありません。有料ソフトを購入したくない、怪しげな中華ソフトを使いたくない、というあなたのお役に立てれば幸いです。 + +なお、クローン元のディスクについては、まずしばらくクローン先のディスクで運用してみて問題ないことを確認するまではそのままにしておくことをお勧めします。大丈夫そうであれば、**クローン先のディスクを取り外した上で**クローン元のディスクを装着し、GParted から「Device → Create Partition Table」を選択して `gpt` とすればまっさらなディスクとして使えます(**操作対象を指差し確認!!**)。もちろん、この手順ではパーティションテーブルのメタデータを初期化するのみで実際のデータは削除されないので、廃棄・譲渡時の情報流出対策のデータ削除としては不十分なことに注意してください(これについては別の記事をあたってください)。