Linuxで,Windowsが入ったHDDをSSDに引っ越す

目的:ThinkPad T60のHDDをSSDに換装する。
Transfer Windows to New Hard Disk using ntfsclone [edoceo.com]の方法でうまくいったので報告します。

前提

PC1のHDDを取り外してPC2に繋いでPC2のHDDにデータを吸い出し,続いてPC2にSSDを繋いで先ほど吸い出したデータを書き戻す。最後にSSDをPC1に挿して終わり。

準備

コピー元のHDDのほうがコピー先のSSDより容量が大きいので,ディスクの管理でパーティションを縮小しておく。
Windows 7 のディスクのボリュームを簡単に縮小する [microsoft.com].
デフラグして,イベントビューアーでデフラグできないファイルを確認してどうにかする。
私の場合はページファイル(C:\pagefile.sys)が掴まれていてデフラグできなかったので,ページファイルのサイズを0にした。

吸い出し

PC AからHDDを取り外しPC Bに接続する。接続したHDDを/dev/sdbとする。
パーティションテーブルを確認する。
sdb1とsdb2があることが分かる。sdb1が管理領域で,sdb2がCドライブ。

$ sudo sfdisk -d /dev/sdb
# partition table of /dev/sdb
unit: sectors

/dev/sdb1 : start=     2048, size=   204800, Id= 7, bootable
/dev/sdb2 : start=   206848, size=431515648, Id= 7
/dev/sdb3 : start=        0, size=        0, Id= 0
/dev/sdb4 : start=        0, size=        0, Id= 0

先頭のほうのセクタをDDで吸い出す。512バイト x 2048セクタ。

$ sudo dd if=/dev/sdb of=sdb.2048 bs=512 count=2048

sdb1とsdb2をntfscloneで吸い出す。

$ sudo ntfsclone --save-image --output sdb1.ntfsclone /dev/sdb1
ntfsclone v2014.2.15AR.2 (libntfs-3g)
NTFS volume version: 3.1
Cluster size       : 4096 bytes
Current volume size: 104853504 bytes (105 MB)
Current device size: 104857600 bytes (105 MB)
Scanning volume ...
100.00 percent completed
Accounting clusters ...
Space in use       : 26 MB (24.2%)   
Saving NTFS to image ...
100.00 percent completed
Syncing ...
$ sudo ntfsclone --save-image --output sdb2.ntfsclone /dev/sdb2
ntfsclone v2014.2.15AR.2 (libntfs-3g)
NTFS volume version: 3.1
Cluster size       : 4096 bytes
Current volume size: 220936007680 bytes (220937 MB)
Current device size: 220936011776 bytes (220937 MB)
Scanning volume ...
100.00 percent completed
Accounting clusters ...
Space in use       : 74027 MB (33.5%)   
Saving NTFS to image ...
100.00 percent completed
Syncing ...

書き戻し

PC Bからコピー元のHDDを取り外す。そしてコピー先のSSDを接続する。接続したSSDを/dev/sdbとする。
先頭のほうのセクタをDDで書き戻す。

$ sudo dd if=sdb.2048 of=/dev/sdb
2048+0 records in
2048+0 records out
1048576 bytes (1.0 MB) copied, 0.0610559 s, 17.2 MB/s

パーティションテーブルができたことを確認する。

$ sudo sfdisk -d /dev/sdb 
# partition table of /dev/sdb
unit: sectors

/dev/sdb1 : start=     2048, size=   204800, Id= 7, bootable
/dev/sdb2 : start=   206848, size=431515648, Id= 7
/dev/sdb3 : start=        0, size=        0, Id= 0
/dev/sdb4 : start=        0, size=        0, Id= 0

sdb1とsdb2を書き戻す。

$ sudo ntfsclone --restore-image --overwrite /dev/sdb1 sdb1.ntfsclone
ntfsclone v2014.2.15AR.2 (libntfs-3g)
Ntfsclone image version: 10.1
Cluster size           : 4096 bytes
Image volume size      : 104853504 bytes (105 MB)
Image device size      : 104857600 bytes
Space in use           : 26 MB (24.2%)
Offset to image data   : 56 (0x38) bytes
Restoring NTFS from image ...
100.00 percent completed
Syncing ...
$ sudo ntfsclone --restore-image --overwrite /dev/sdb2 sdb2.ntfsclone
ntfsclone v2014.2.15AR.2 (libntfs-3g)
Ntfsclone image version: 10.1
Cluster size           : 4096 bytes
Image volume size      : 220936007680 bytes (220937 MB)
Image device size      : 220936011776 bytes
Space in use           : 74027 MB (33.5%)
Offset to image data   : 56 (0x38) bytes
Restoring NTFS from image ...
100.00 percent completed
Syncing ...

終わりに

PC BからSSDを取り外してPC Aに繋ぐ。
PC Aを起動すると何事も無くWindowsが起動した。
気になる場合はchkdskしてもいいかも?
ディスクの管理で,ボリュームを拡張して完了。