linux環境を複製する方法

以下の手順で,インストール済みの linux環境 を新しいHDDやSSDに複製できます

(2016/3/22追記: 細かい点について説明を加筆しました)

新しいHDDのフォーマット

予め新しいHDDやSSDを接続してフォーマットしておきます

おすすめの手順は別エントリに書いてます
http://d.hatena.ne.jp/pyopyopyo/20160604/p1

以下,フォーマット済みのパーティションを /dev/sde1 とし, /mnt にmountするものとして手順を説明します

$ sudo  mount /dev/sde1 /mnt

既存システムのマウント

システムを複製する場合は /proc や /sys などの複製しなくて良いディレクトリを除外する必要があります

除外する方法はいくつかありますが,今回は手っ取り早い方法として 既存システムの / パーティションを /media にマウントします

$ sudo mount --bind -oro /  /media

"--bind"を使うのがポイントです.さらに念の為 "-oro" で read-only つまり書き込み禁止にしておきます

データのコピー

/media 以下にあるファイルを /mnt へコピーします

コマンドはrsyncを使います

まず dry-run でコピーされるファイル達を確認します

$ sudo rsync -aDnv  --exclude "/mnt/"  /media/  /mnt

rsyncには
注意すべき点が2つあります

1つ目は "D"オプションです.rsyncのオプションには "a" だけでなく "D" もつけないと /dev 以下のデバイスファイルがコピーされません

2つ目は "--exclude" オプションです. "/mnt" を除外しないと,"/mnt" 以下に "/mnt/mnt" がコピーされ,それがさらに "/mnt/mnt/mnt"にコピーされ,データが無限増殖します


以上の2点に注意して,問題なければ "n"を外して,実際にコピーを実行します

$ sudo rsync -aDnv  --exclude "/mnt/"  /media/  /mnt


コピーが終わったら混乱を避けるために /media のマウントを解除しましょう

$ sudo umount /media

次に、新しくコピーした /mnt 側の環境の設定を修正します

複製した環境の確認

chroot を使うと、PCを再起動することなく複製した環境の動作確認が行えます

$ sudo mount --bind /dev   /mnt/dev
$ sudo mount --bind /proc  /mnt/proc
$ sudo chroot /mnt

急ぎの場合は

$ sudo chroot /mnt

だけでも大丈夫な場合が多いですが、aptを使う場合、grubを使う場合は /devや/procをマウントした方が安心です。

必要最低限の作業-1) ディスクラベル,fstab の確認

/etc/fstab でディスクのラベルや,UUIDを指定している場合は適宜修正します

$ sudo /usr/sbin/chroot /mnt
# sudo vi /etc/fstab

必要最低限の作業-2) ブートローダのインストール

新しいディスク/dev/sde の MBR に grub2 を入れる場合は以下の手順になります

$ sudo mount --bind /dev   /mnt/dev
$ sudo mount --bind /proc  /mnt/proc
$ sudo /usr/sbin/chroot /mnt
# /usr/sbin/grub-install /dev/sde

必要最低限の作業-3) ブートローダの設定

$ sudo /usr/sbin/grub-mkconfig -o /boot/grub/grub.cfg

umount

以上で複製は完了です.最後にディスクを umount しましょう

$ sudo umount /media/dev
$ sudo umount /media/proc
$ sudo umount /media

複製後に知っておくと便利な事

ホスト名の更新方法
sudo vi /mnt/etc/hostname
sshd の鍵の再作成
$ sudo /usr/sbin/chroot /mnt
# rm /etc/ssh/ssh_host_*
# ssh-keygen -A