OSや環境ごとHDDを複写する

はじめに
状況
手順
準備するもの
手順

はじめに

 PCの不調や何やでLinux環境をまるごとコピーしよう、あるいは新HDDにごっそり転写したいというのはよくある需要だと思う。特にHDDは消耗品なので、壊れる前にデータをまるごと引っ越そうという話が出るのはごく自然だ。だけどその方法に困っているということはないだろうか。

 結論からというとOS環境のコピーは可能だ。せっかく構築しお気に入りのDebian環境を破壊する事なく、大好きなゴスロリや半ズボンの隠しコンテンツもよそに仕舞う事なく、そっくりそのまま新HDDに移行できる。HDDのサイズが違おうと、はたまたファイルシステムが違ったとしても基本的には問題ない。実際、わたしはSATA 500GB用に作った環境をPATA 120GBに複写するという行為をしたばかりだが、がっつりと簡単にコピーすることができた。ext3上にあるファイルをXFSにもってきても、あるいはその逆も問題なかった。

状況

 マルチブートは考慮していない。これはテスト環境がDebianオンリーのマシンであるため。Windowsとの共存等している場合、そちらのコピーは別の方のドキュメントをみるか市販ソフトでのコピーとなる。

パーティション構成の抜粋は以下のようになっている。

Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda1              7692876    717084   6585016  10% /
/dev/sda3             97603392    438512  97164880   1% /home
/dev/sda4            134751644    266496 134485148   1% /var

sda3とsda4はxfs、sda1はext3である。sda2は記載していないがスワップだ。

手順

準備するもの

ほとんど何もないですが、grubの起動FDをひとつ作っておくといいかも。旧HDDと同じmenu.lstをいれておきましょう。

手順

新しいディスクのパーティション構成を決める。

構成はどうでもいい。ただしオリジナルのfstabやgrubのmenu.lstと内容が違うようになる場合、再起動前にそのぶんの修正をしないと起動しなくなるケースもある。

パーティション作成

フォーマットも行う。swapもmakeしておこう。たとえばこんな感じ。

# mkswap /dev/sdb2
# mkfs.ext3 -c /dev/sda1
# mkfs.xfs -f /dev/sdb3
# mkfs.xfs -f /dev/sdb4
# xfs_check -v /dev/sdb3
# xfs_check -v /dev/sdb4

mountする

作った区画を/mnt以下にmountする。

Base=/mnt
mount -t ext3 /dev/sdb1 $Base/sdb1
mount -t xfs /dev/sdb3 $Base/sdb3
mount -t xfs /dev/sdb4 $Base/sdb4

データをcopyする。

cp -axがキーワードだ。以下の例だと、sdb1がシステム、sdb3が/home、sdb4が/varになっている。

cp -ax / /mnt/sdb1
cd /home
cp -ax . /mnt/sdb3
cd /var
cp -ax . /mnt/sdb4

ブートローダを新ディスクに。

新ディスクにgurbをインストールする。

注意 以下のデータは「grubからみてsdbがhd1に見える」事を前提にしています。 grubのコマンドは環境によって違う。特にhd0,1,2などの番号は要注意!

# grub --no-floppy
> root (hd1,0)
> setup (hd1)
> quit

必要データを修正する。

得にオリジナルと構成が大きく違う時、/etc/fstabやブートローダをいじる必要があるだろう。まったく同一ならば、今の元ディスクとつなぎ代えるだけでも起動するかもしれないが、新ディスクにはブートローダが入ってないと思うので、grub-installか/sbin/liloなどでブートローダをいれなくてはならない。入れない場合、テストブートのできるブートローダ環境をどこかに用意する必要がある。もっとも簡単なのはレガシーなFDである。

再起動

データを直したらいよいよ再起動。場合によっては再起動後にあらためてブートローダのインストールが必要になる。