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
作った区画を/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
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である。
データを直したらいよいよ再起動。場合によっては再起動後にあらためてブートローダのインストールが必要になる。