2017/08/17(木)Let's note CF-SZ6のディスク換装コピー(HDD→SSDクローン)
Let's note CF-SZのHDDモデルを購入しSSDに換装したときのメモ。バックアップソフトを使用せずに、再インストールもしないで、システムをそのままSSDに移行しました。
※ここに書かれている作業は失敗するとデータをすべて失う可能性があります。慎重に記述しているつもりですが、ミス表記などがあるかもしれませんので、くれぐれもご注意ください。
作業目標
- Windowsのシステムをそのまま移行する
- リカバリ領域もコピーする
- コピーにはLinuxを使用する
Let's note BIOSの設定とLinuxの起動準備
Linuxを起動するためには、DVD起動またはUSBメモリから起動させる必要があります。
- CD起動の設定
- 詳細→光学ドライブ:有効
- 起動→UEFI優先度→光学ドライブUEFI起動:有効
- USB起動の設定
- 詳細→USBポート:有効
- 詳細→レガシーUSB:有効
- 起動→UEFI優先度→USB UEFI起動:有効
設定保存後、再度F2でBIOSに入り、DVDドライブやUSBメモリから起動しました。USB起動用のディスクは UNetbootin を使用しました。*1
Linuxはなんでも良いですが、「parted」と「gdiskコマンド」の使える最近のLinuxのLiveCD(DVD)を選択してください。
前準備
Windows10上のシステム管理、ディスク管理から、Cドライブのボリュームを限界まで縮小(Cドライブを限界まで小さく)しておきます。無駄なコピーをしないためです。自分の環境では、約85GBまで縮小されました。
Cドライブは、すべての作業終了後に好きなサイズまで拡大して使用します。またこうすることで、コピー元のディスクよりもコピー先ディスクの容量が少なくても、コピーを実行することが可能になります。
Linux上での作業
新しいコピー先のHDDをUSB変換などで接続し、WindowsのシステムドライブまでをLinux上でコピーします。
- コピー元:/dev/sda(内蔵HDD)
- コピー先:/dev/sdb(外付SSD)
$ sudo su # gdisk -l /dev/sda GPT fdisk (gdisk) version 1.0.1 Found valid GPT with protective MBR; using GPT. Disk /dev/sda: 625142448 sectors, 298.1 GiB Logical sector size: 512 bytes Disk identifier (GUID): 0128E6FF-FBCE-4362-8D1E-75EA6EA4B7FF Partition table holds up to 128 entries First usable sector is 34, last usable sector is 625142414 Partitions will be aligned on 2048-sector boundaries Total free space is 412994157 sectors (196.9 GiB) Number Start (sector) End (sector) Size Code Name 1 2048 534527 260.0 MiB EF00 EFI system partition 2 534528 567295 16.0 MiB 0C01 Microsoft reserved ... 3 567296 179709951 85.4 GiB 0700 Basic data partition 4 592701440 593684479 480.0 MiB 2700 Basic data partition 5 593684480 625141759 15.0 GiB FFFF Basic data partition
今、Partition 3が 85.4GiB ですので、+0.3GiB(端数切り上げ)の、86GiBコピーすることにします。
# dd if=/dev/sda of=/dev/sdb bs=1GiB count=86 status=progress
コピーが終了したら、コピー先SSDのパーティションテーブルを修正します。元HDDから、ディスクの大きさやパーティションテーブルなどをすべて丸ごとコピーしたため、SSD側のサイズに合わせてパーティションテーブルを修正する必要があります。
# parted /dev/sdb GNU Parted 3.2 /dev/sdb を使用 GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。 (parted) print 警告: /dev/sdb で利用可能な領域の一部が利用されていません。GPT を修正して全ての領域を利用可能にするか(400468320ブロック増えます)、このままで続行することができますが、どうしますか? 修正/Fix/無視(I)/Ignore? fix モデル: Crucial_ CT525MX300SSD1 (scsi) ディスク /dev/sdb: 525GB セクタサイズ (論理/物理): 512B/512B パーティションテーブル: gpt ディスクフラグ: (parted) q
Windows Recoveryパーティションや、リカーバリー領域を削除しておきます。
# gdisk /dev/sdb Number Start (sector) End (sector) Size Code Name 1 2048 534527 260.0 MiB EF00 EFI system partition 2 534528 567295 16.0 MiB 0C01 Microsoft reserved ... 3 567296 179709951 85.4 GiB 0700 Basic data partition 4 592701440 593684479 480.0 MiB 2700 Basic data partition 5 593684480 625141759 15.0 GiB FFFF Basic data partition Command (? for help): d Partition number (1-5): 4 Command (? for help): d Partition number (1-5): 5 Command (? for help): w Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed? (Y/N): y OK; writing new GUID partition table (GPT) to /dev/sdb. Warning: The kernel is still using the old partition table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) The operation has completed successfully.
電源を切り、コピー先SSDを本体に内蔵します(=ディスクを入れ替えます)。
元のHDDをUSB等で接続せずに、入れ替えたドライブでWindowsが問題なく起動することを確認してください。元のドライブを外部接続した状態でWindowsを起動させると(もしくはWindows起動中に元ドライブを接続すると)、ディスクのGUIDが書き換わり元ドライブでOSが起動しなくなります。
リカバリー領域のコピー
新しいディスクを内蔵した状態で、古いディスクを外付けしてLinuxを起動します。
- コピー先:/dev/sda(内蔵SSD)
- コピー元:/dev/sdb(外付HDD)
まず新しいディスクに、コピー元と同じ容量の領域を確保します。
# gdisk /dev/sda GPT fdisk (gdisk) version 1.0.1 Command (? for help): n Partition number (4-128, default 4): 5 First sector (34-1025610734, default = 179709952) or {+-}size{KMGTP}: -15G Information: Moved requested sector from 994153454 to 994152448 in order to align on 2048-sector boundaries. Use 'l' on the experts' menu to adjust alignment Last sector (994152448-1025610734, default = 1025610734) or {+-}size{KMGTP}: Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): DE94BBA4-06D1-4D40-A161-BFD50179D6AC Changed type of partition to 'Unknown' Command (? for help): n Partition number (4-128, default 4): 4 First sector (34-994152447, default = 179709952) or {+-}size{KMGTP}: -480M Information: Moved requested sector from 993169407 to 993167360 in order to align on 2048-sector boundaries. Use 'l' on the experts' menu to adjust alignment Last sector (993167360-994152447, default = 994152447) or {+-}size{KMGTP}: Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): 2700 Changed type of partition to 'Windows RE' Command (? for help): p Disk /dev/sda: 1025610768 sectors, 489.0 GiB Logical sector size: 512 bytes Disk identifier (GUID): 0128E6FF-FBCE-4362-8D1E-75EA6EA4B7FF Partition table holds up to 128 entries First usable sector is 34, last usable sector is 1025610734 Partitions will be aligned on 2048-sector boundaries Total free space is 813459422 sectors (387.9 GiB) Number Start (sector) End (sector) Size Code Name 1 2048 534527 260.0 MiB EF00 EFI system partition 2 534528 567295 16.0 MiB 0C01 Microsoft reserved ... 3 567296 179709951 85.4 GiB 0700 Basic data partition 4 993167360 994152447 481.0 MiB 2700 Windows RE 5 994152448 1025610734 15.0 GiB FFFF Unknown
途中でありますが、リカバリーパーティションのパーティションタイプに「DE94BBA4-06D1-4D40-A161-BFD50179D6AC」を設定することがとても重要です。この設定をしないとリカバリー領域を認識できません。
領域の属性も設定します。
Command (? for help): x Expert command (? for help): a Partition number (1-5): 4 Attribute value is 0000000000000000. Set fields are: No fields set Toggle which attribute field (0-63, 64 or <Enter> to exit): 0 Have enabled the 'system partition' attribute. Attribute value is 0000000000000001. Set fields are: 0 (system partition) Toggle which attribute field (0-63, 64 or <Enter> to exit): 63 Have enabled the 'do not automount' attribute. Attribute value is 8000000000000001. Set fields are: 0 (system partition) 63 (do not automount) Toggle which attribute field (0-63, 64 or <Enter> to exit): Expert command (? for help): a Partition number (1-5): 5 Attribute value is 0000000000000000. Set fields are: No fields set Toggle which attribute field (0-63, 64 or <Enter> to exit): 0 Have enabled the 'system partition' attribute. Attribute value is 0000000000000001. Set fields are: 0 (system partition) Toggle which attribute field (0-63, 64 or <Enter> to exit): 63 Have enabled the 'do not automount' attribute. Attribute value is 8000000000000001. Set fields are: 0 (system partition) 63 (do not automount) Toggle which attribute field (0-63, 64 or <Enter> to exit):
作業が終わったらデータをディスクに反映させます。
Command (? for help): w Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed? (Y/N): y
これでコピー先(内蔵した新しいSSD)に領域ができましたので、データをコピーをします。
# dd if=/dev/sdb4 of=/dev/sda4 bs=1GiB status=progress # dd if=/dev/sdb5 of=/dev/sda5 bs=1GiB status=progress
回復コンソールとリカバリー領域の起動設定
ここまでで、回復コンソール(Windows Recovery Environment)とリカバリー領域(Recovery Partition)のデータは復元できましたが、このままではそれらを起動することができません。
これは、UEFIのBCDと呼ばれるWindowsブートマネージャーのデータ領域*2に記録されているパーティションGUIDと、新しく作ったパーティションのGUIDが一致しないためです。
新しく作ったパーティションのGUIDを古いHDDに合わせて修正する方法もありますが、重複したGUIDはWindowsに書き換えられたりして面倒であるため、BCDを書き換える方法を紹介します。
まずコマンドプロンプトを管理者権限で起動します。
C:\>bcdedit /enum all /v ※結果一部抜粋 Windows ブート ローダー -------------------------------- identifier {44241f2e-3c21-11e7-a623-92bd8607ae9e} device ramdisk=[unknown]\Media.1\sources\boot.wim,{43ed477c-3c21-11e7-a623-92bd8607ae9e} path \windows\system32\winload.efi description RecoveryWinRE osdevice ramdisk=[unknown]\Media.1\sources\boot.wim,{43ed477c-3c21-11e7-a623-92bd8607ae9e} systemroot \windows nx OptIn winpe Yes Windows ブート ローダー -------------------------------- identifier {6320fc3f-3b93-11e7-97c6-8021a56374ab} device ramdisk=[unknown]\Recovery\WindowsRE\Winre.wim,{6320fc40-3b93-11e7-97c6-8021a56374ab} path \windows\system32\winload.efi description Windows Recovery Environment locale en-us inherit {6efb52bf-1766-41db-a6b3-0ee5eff72bd7} displaymessage Recovery osdevice ramdisk=[unknown]\Recovery\WindowsRE\Winre.wim,{6320fc40-3b93-11e7-97c6-8021a56374ab} systemroot \windows nx OptIn bootmenupolicy Standard winpe Yes custom:46000010 Yes デバイス オプション -------------------------------- identifier {43ed477c-3c21-11e7-a623-92bd8607ae9e} description RecoverySDI ramdisksdidevice unknown ramdisksdipath \Media.1\boot\boot.sdi デバイス オプション -------------------------------- identifier {6320fc40-3b93-11e7-97c6-8021a56374ab} description Windows Recovery ramdisksdidevice unknown ramdisksdipath \Recovery\WindowsRE\boot.sdi
unknownとなっている部分がディスクのパーティションGUIDが変更されたことにより、ディスクが見つからなくなってしまった部分です。「Windows Recovery」が回復コンソール(パーティション4)、「RecoveryWinRE」や「RecoverySDI」がリカバリー領域(パーティション5)ですので、それぞれの「identifier」を参照しながら設定を変更します。
bcdedit /set {43ed477c-3c21-11e7-a623-92bd8607ae9e} ramdisksdidevice partition=\Device\HarddiskVolume5 bcdedit /set {6320fc40-3b93-11e7-97c6-8021a56374ab} ramdisksdidevice partition=\Device\HarddiskVolume4 bcdedit /set {44241f2e-3c21-11e7-a623-92bd8607ae9e} device ramdisk=[\Device\HarddiskVolume5]\Media.1\sources\boot.wim,{43ed477c-3c21-11e7-a623-92bd8607ae9e} bcdedit /set {44241f2e-3c21-11e7-a623-92bd8607ae9e} osdevice ramdisk=[\Device\HarddiskVolume5]\Media.1\sources\boot.wim,{43ed477c-3c21-11e7-a623-92bd8607ae9e} bcdedit /set {6320fc3f-3b93-11e7-97c6-8021a56374ab} device ramdisk=[\Device\HarddiskVolume4]\Recovery\WindowsRE\Winre.wim,{6320fc40-3b93-11e7-97c6-8021a56374ab} bcdedit /set {6320fc3f-3b93-11e7-97c6-8021a56374ab} osdevice ramdisk=[\Device\HarddiskVolume4]\Recovery\WindowsRE\Winre.wim,{6320fc40-3b93-11e7-97c6-8021a56374ab}
これで回復コンソールとリカバリー領域の起動ができる……ようにはなるのですが、回復コンソール(回復パーティション)内のReAgent.xmlの情報が修正されていないため回復コンソールを起動してもブルースクリーンになってしまいます。
これを解決するために、同じく管理者権限でReAgentCコマンドを使用して、回復コンソールを一回無効にしてから有効にします。
C:\>ReAgentC /disable REAGENTC.EXE: 操作は成功しました。 C:\>ReAgentC /enable REAGENTC.EXE: 操作は成功しました。
先にbcdeditで修正しておかないと、「ReAgentC /disable」時にエラーが表示されます。その際、/enable時に「成功しました」と表示されても実際には失敗しており、/disableを再び実行してもエラーになります。
※失敗例 C:\>ReAgentC /disable REAGENTC.EXE: Windows RE は既に無効です。 C:\>ReAgentC /enable REAGENTC.EXE: 操作は成功しました。 C:\>ReAgentC /disable REAGENTC.EXE: Windows RE は既に無効です。
メモ
GUID
他のマシンと共通ということはないと思いますが。
- Disk identifier (GUID): 0128E6FF-FBCE-4362-8D1E-75EA6EA4B7FF
- Partition1 GUID code: C12A7328-F81F-11D2-BA4B-00A0C93EC93B (EFI System)
- Partition1 unique GUID: 38ACB533-F210-4912-BFC5-CD7DC11BD645
- Partition2 GUID code: E3C9E316-0B5C-4DB8-817D-F92DF00215AE (Microsoft reserved)
- Partition2 unique GUID: D72F715F-8C69-468B-8677-FC6634873B03
- Partition3 GUID code: EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (Microsoft basic data)
- Partition3 unique GUID: 1EF91DBB-77E0-474F-B3BE-01481B79650C
- Partition4 GUID code: DE94BBA4-06D1-4D40-A16A-BFD50179D6AC (Windows RE)
- Partition4 unique GUID: 9482A080-C4D4-40CB-B330-7A58779D43BC
- Partition5 GUID code: DE94BBA4-06D1-4D40-A161-BFD50179D6AC (Unknown)
- Partition5 unique GUID: 43ED477C-3C21-11E7-A623-92BD8607AE9E
その他メモ
- MiniTool Partition Wizard Free …… Windows上でのパーティション編集ツール。リカバリ領域を小さくするのに使いました。
まとめ
UEFI起動のWindows(Windows10)の起動シーケンスを理解しておくため、Linuxを使った手動バックアップに挑戦してみました。
面倒くさい作業でしたが、良い勉強になりました。やってみると知らないことだらけで、これだけでも理解しておけば起動トラブル等への対処が相当やりやすくなるのではないかなと思います。