何かのソフトを試す時「このPCでやるのがベストだ。でもこの環境壊すのイヤだ><」というジレンマに陥った事がないだろうか?私はしょっちゅうそういう事がある。
なわけで、その方法を伝授する。なお実際の作業はqemu上で行った。
OS環境を区画もろとも破壊する可能性があります。もちろんこの事に対する保証はありません。
GRUBがインストールされていてブートローダはこれ一つのみである事が本テストの前提になっている。WindowsやMac OS X、BTRONのローダー等が入っている場合、そこから起動できるかどうかは私の範囲外になります。
とはいえ、おそらくですがliloなんかでも読み替えのできる知識があればOKでしょう。
元と先の構成の差異?そんなものどうでもいい、コピーできればいいのです。SATAディスクから旧IDE+USBメモリなんて変態区画にコピーした事もあります。まぁ容量だけは気をつけて。
要は ブートローダとOSが読むべきデータに到達できればそれでいい わけなので、後はどうにでもなります。カーネルとGRUBが普通に対応している限りOKです。
コピー先のストレージを接続し、fdisk等で区画を切りフォーマットしときます。容量や区画の割り当てに注意してください。普通にOSをインストールするつもりでかまいません。
この時点ではGUIでもやれますが、コマンドでやるなら以下のようなものを使うでしょう :D
# fdisk デバイス名 # mkfs.ext3 -c 作った区画名 # mkswap -c 作ったスワップ領域名
さあ、いよいよだ。
# init 1
旧ディスクをsda、新ディスクをsdbと仮定する。こんな感じかな?
# fdisk /dev/sda Disk /dev/sda: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x000b074b Device Boot Start End Blocks Id System /dev/sda1 1 2432 19535008+ 83 Linux /dev/sda2 2433 2675 1951897+ 82 Linux swap / Solaris /dev/sda3 * 2676 5107 19535040 83 Linux /dev/sda4 5108 60801 447362055 83 Linux $ df [~] Filesystem 1K-ブロック 使用 使用可 使用% マウント位置 /dev/sda3 19228308 6790728 11460828 38% / tmpfs 1038000 0 1038000 0% /lib/init/rw udev 10240 88 10152 1% /dev tmpfs 1038000 574756 463244 56% /dev/shm /dev/sda4 447230976 175199044 272031932 40% /home
sdb側はシンプルに、sdb1が / でsdb2がswapとしよう。さぁmount。
# mkdir /mnt/sdb1 # mount -t ext3 /dev/sdb1 /mnt/sdb1
sda側を見てほしい。/ と /home が別になっているがsdbでは全部ひとつである。 こういう場合はどうするんだと言われそうだが全然気にする事はない。 単に 動作時のディレクトリ構成を壊さないようにコピーすればそれでいい のだ。
# cd / # cp -ax / /mnt/sdb1 # cd /home # cp -ax . /mnt/sdb1/home
HDDが同一構成の時は不要。違う時はその構成にあわせましょう。
# cd /mnt/sdb1/etc # vi fstab
起動時にFDDをがりがりやっちゃって待たされる人。それはそれで対策があるんだけど、まぁそれはそれ。あとでdevice.mapでも好きにいじってください :)
# grub (grubが起動する。FDDガリガリの環境で「待たされるのがイヤ」という人は --no-floppy でもつけといて、あとでdevice.mapでも触ろう) grub> root (hd1,0) grub> setup (hd1) grub> exit #
shutdownして新ディスクをprimaryにして起動しよう。
こんな感じに走らせます。
echo -n "mkswap /dev/sdb2 ... " mkswap -c /dev/sdb2 echo "Done." mkfs.ext3 -c /dev/sdb1 mkfs.xfs -f /dev/sdb3 mkfs.xfs -f /dev/sdb4 sync xfs_check /dev/sdb3 xfs_check /dev/sdb4 sync 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 / /mnt/sdb1 cd /home cp -ax . /mnt/sdb3 cd /var cp -ax . /mnt/sdb4 sync
ドライブ指定(hd0)等がおかしいのでないならば、カーネル等のパスがおかしい事があるようです。私の場合、LVM絡みの時などで、/boot/vmlinuz....でなく boot/vmlinuz... のように相対ディレクトリ構成になっている事がありましたが、これを絶対に変更するとOKだったりしました。