ネットワーク越しにディスクコピーする(Linux , macOS)
環境
Ubuntu 14.04 LTS
ディスクのパーテーションは
- swap 2GB
- / (ext4) 40GB
動機
物理マシン上で動いている Linux をそのまま仮想マシンにしたかった。
動機は Linux マシンの転送ですが、仮想マシンの Windows(ESXi)を同(Hyper-V)に移行する際に
同様の手順で実施可能な事を確認しています。その他、物理マシン上の Windows のディスクコピー等、物理コピーでどうにかなるものなら大抵なんとかなります。
準備(転送元)
パーティションをできるだけ小さくする。 gparted live dvd を使用した。
この手順はオプションなので、やらなくても良い。
準備(転送先)
仮想マシンを作成(ディスク容量は、転送元のパーティションがコピーできるだけの容量を確保)
Ubuntu の Live DVD で起動して、パーティションを転送元と同じブロック数で確保した。
転送元と転送先で、fdisk のブロック数が同じになるようにパーティションを作成。
ブート可能フラグを立てるのを忘れない(ブートしたい場合は)
なお、この手順はディスク丸ごと転送する場合は不要。
次の手順のデバイス名を /dev/sda とすればディスク丸ごと転送になる。
この場合、ブート可能フラグは自動で立つはず。
転送準備
転送元、転送先の両方の PC で同じ操作をする。
PC を Ubuntu Live DVD で起動する。(以下の手順は 14.04LTS で動作確認している)
起動後、Ubuntu を試す を選択してしばらく待ち、UI が起動するのを待つ。
起動したら、Windows キー(Linux 的には Super キー)を押下して、 terminal とタイプ。
すぐ下に、端末 というアイコンが出るのでそれをクリックする。
紫色のコマンドプロンプトみたいな何かが起動すれば OK。
転送
転送先 → 転送元の順で操作する。
ようするに、書いてある順に操作すれば OK。デバイス名を間違えると悲しいことになるので要注意。
# 転送先で以下のコマンドを打つ。デバイス名は適宜調整して下さい。(例: ディスク全体なら /dev/sda等)
sudo su -
nc -l 12345 | dd of=/dev/sda2
# 転送元で以下のコマンドを打つ。デバイス名は適宜調整して下さい。(例: ディスク全体なら /dev/sda等)
sudo su -
dd if=/dev/sda2 bs=10240000| nc [転送先IPアドレス] 12345
# 進捗確認用
# 転送元の別コンソールから使用すると、10秒ごとに進捗が dd を実行しているコンソールに表示される
sudo su -
watch -n 10 pkill -USR1 dd
# 今回は関係ないですが、 macOS上のdd は USR1 を送ると終了してしまいます。
# watch -n 10 pkill -INFO dd
# とすれば希望する動作になります。
起動してみる
新しくできた VM を起動してみると、GRUB Rescue の画面に入ってしまい起動できない場合がある(あった)
その場合の操作は以下の通り
grub rescue> set prefix=(hd0,2)/boot/grub
grub rescue> set root=(hd0,2)
grub rescue> insmod normal
grub rescue> normal
Windows の場合は、とりあえず Windows のセットアップ用 ISO を入れて起動し、diskpart コマンドを
使ってブートローダを上書きしてみる感じでしょうか(未検証)
20180123 追記 macOS 上でやる場合
いくつか違いがあります。
ディスクの一覧を表示
sudo diskutil list
ここでは、ディスクのデバイス名が /dev/diskN と表示されますが、ddを行う際は
/dev/rdiskN を使用するほうがよいかもしれないです。
参考
ddの進捗を確認 - Qiita
Linux 上の GRUB 2 がブートできなくなったときの対処方法
MacでRaspberry PiのSDカードをハードコピー(バックアップ) http://karaage.hatenadiary.jp/entry/2015/06/09/080000
Discussion