これは何?
何も考えずにマルっとディスクをコピーしたい、そんなときの解決策の1つです。
概要
ここではdd
コマンドを使います。ディスクのIDはfdisk
を使います。
手順のまとめ
- コピー元のディスクのIDを取得
-
dd
でコピー
準備
- 自由にいじれてLinuxを起動できる端末(作業端末)
- Linuxの何らかのディストリビューション(Ubuntuをよく使います)
-
sudo
できるアカウント、またはroot
権限 - コピー元のディスク
- コピー元と同等のストレージ(物理単体、もしくはコピーできるだけの空き容量)
作業手順
ここでの説明は コピー元のディスクと同一の別のディスク(コピー先)にコピーをする というシナリオです。
また、作業端末は以下の構成であることを想定する。
- コピー元:
/dev/sdc
- コピー先:
/dev/sdb
- Linuxがインストールされたディスク:
/dev/sda
コピー元ディスクの調査
誤ってコピー元に書き出してしまわないようにIDを確実にメモります。
※ もし対象のディスクのFormatがNTFSでエラーが起こった場合は How to fix Ubuntu unable to mount NTFS partition を参照してください。
注意 : 以下の作業例では/dev/sdb
としてIDの確認をしています。しかし、次の作業の コピー先ディスクを接続する を実行するとコピー元は/dev/sdc
へとマッピングが変わります。これはマザーボードの接続方法とのハードウェアの認識方法に依存する為に変わっていますので、必ずIDを確認することで、/dev/sd[a-z]{1}
とディスクとのマッピングの変化に対応してください。
- 作業端末のOSをシャットダウンして、電源を切る
- コピー元のディスクを作業端末に接続し、作業端末のOSをLinuxで起動する
- 以下の
fdisk
コマンドでIDを確認する
$ sudo fdisk /dev/sdb
Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/sdc: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: C075xxxx-BE81-42EE-xxxx-6A4052113065
Device Start End Sectors Size Type
/dev/sdc1 2048 1953523711 1953521664 931.5G Microsoft basic data
Command (m for help): q
コピー先ディスクを接続する
- 作業端末のOSをシャットダウンして、電源を切る
- コピー先のディスクを作業端末に接続する(コピー元のディスクを作業端末に接続した状態で)
-
fdisk
コマンドでIDを確認すると同時にコピー元、コピー先がLinux上でどのディレクトリにマップされているか確認をする
!!!! コピー元ディスクの調査の注意に書いた通り、 /dev/sdb
を確認すると先程のIDと異なったIDが表示されました。よって、このディスクはコピー元ではなく、コピー先のディスクであることが分かります。必ず作業前に確認するようにしてください。間違えるとコピー元を全て削除してしまいます。
$ sudo fdisk /dev/sdb
Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/sdb: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 0A88yyyy-A88E-433D-yyyy-ABCD18FB7FBB
Device Start End Sectors Size Type
/dev/sdb1 2048 1953523711 1953521664 931.5G Microsoft basic data
Command (m for help): q
/dev/sdc
を確認するとコピー元であることが分かります。
$ sudo fdisk /dev/sdc
Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/sdc: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: C075xxxx-BE81-42EE-xxxx-6A4052113065
Device Start End Sectors Size Type
/dev/sdc1 2048 1953523711 1953521664 931.5G Microsoft basic data
Command (m for help): q
コピー元からコピー先へコピーを実行する
status=progress
のオプションをつけることで今どの辺りであるのか、以下のような表示が得られます。
$ sudo dd if=/dev/sdc of=/dev/sdb bs=1024k status=progress
79691776 bytes (80 MB, 76 MiB) Copied, 1 s, 78.2 MB/s
以下のように表示が出てカーソルが戻ってきたらコピー完了です🎉
$ sudo dd if=/dev/sdc of=/dev/sdb bs=1024k status=progress
999964016640 bytes (1.0 TB, 931 GiB) copied, 2139 s, 467 MB/s
953869+1 records in
953869+1 records out
1000204886016 bytes (1.0 TB, 932 GiB) copied, 2144.92 s, 466 MB/s
コピー時間
1Tのディスクのコピーで30〜40分くらいでコピーの作業完了でした。(2019/11/20)
注意
dd
でのコピー元とコピー先の指定は/dev/sd[a-z]{1}
で行いますが、この指定はマザーボードの接続方法とLinuxのハードウェアの認識方法に依存します。コピー元とコピー先の指定はディスクのIDを確認した上で指定するようにしてください。