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 は既に無効です。

*2 : EFIパーティションの EFI\Microsoft\Boot\BDC

メモ

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を使った手動バックアップに挑戦してみました。

面倒くさい作業でしたが、良い勉強になりました。やってみると知らないことだらけで、これだけでも理解しておけば起動トラブル等への対処が相当やりやすくなるのではないかなと思います。