今までIBM製の10GBハードディスクを使っていたのですが,Windows2000とLinux(Debian)を共存させて使っていたために,いささか容量が手狭になってきました.というか,LinuxのパーティションはすでにUsed 96%という状況になっていました.しかも,転送速度が11kB/secという代物で,挙げ句の果てにガリガリと盛んに立派な音をおたてになるので,なかなか困っていたものです.そこで,新規のハードディスクに乗り換えようと考えたのです.至極当然の帰結ですね.
通常ならば一からインストールし直すのが筋ってものでしょうが,メインで使っているDebianは,こちらもそれなりに使いやすいように色々いじっている(その分謎の不具合も多数なのですが…)ので,新規インストールというのはかなり躊躇われる選択肢です.それでなくともDebianのインストールは大変なのに.と言うことで,ほとんど使っていない=ほとんど自作のデータがないWindows2000は新規にインストールすることにして,Debianに関しては,root以下を丸ごと新しいハードディスクにコピーしてしまおう,と思い立ったのです.
ただ,色々情報を集めても,これぞ!という決定版が余り見つからなかったので,以下に自分が行った方法について記述したいと思います.作業に関しては,多数のウェブページを参考にさせていただきました.もしハードディスク間のコピーをしたかったり,他のハードディスクにバックアップを取りたい方は参考にしていただければ幸いです.apt-getと記述のある行以外では,Debian固有のコマンドは無いため,他のディストリビューションにも適用できるはずです.但し,もし下記の方法を全く正確に行っても他のマシンでは動かない可能性がありますが,たとえそれでクラッシュしたりしても一切責任は負えませんので,あしからずご了承ください.
2002/03/04現在,僕のシステムの大まかな概況を書いておきます.カーネルのバージョンは2.4.9であり,ディストリビューションはDebian GNU/Linuxです.Debianに関してシステム全体のバージョンという概念があるのかは疑問ですが,一応2.xのDebianをインストールして # apt-get upgrade をたまにしているといった状態,と言えばいいのでしょうか./etc/debian_version によると,testing/unstable です.CPUはPentium2 450MHz SMP,メモリは256MBです.
追記: 2003/04/02-03にかけて,再びこの作業を行いました.すると今ひとつ書いてある通りには事が進まなかった部分もあり,そこら辺を勘案して少し書き足すことにしました.システム構成も大幅に変わり,CPUはPentium4 2.53GHz,メモリは1024MB,HDは40GBです.Debianのバージョンも,ほぼ3.0に上がりました.
新規のHDにWindows2000をインストールします.新しいHDは容量20GBですから,5GBをWindows2000に割り当て,残りの15GBをLinux領域に割り当てることにします.メインがLinuxであることを考えると妥当な線かと思います.
Windows2000のインストールは特筆すべきことはないと思います.インストールCDを入れて,後は向こうの指示通りリターンキーをポチポチ押して行くだけですね.ただ,パーティションを分けるところだけ注意します.途中でパーティションを分けるかどうか聞いてくるので,そこで"C"キーを押し,切り分ける領域,すなわちWindowsの領域を5000とします.単位はモチロンMBです.ここでちゃんと"C"を押さないと,貪欲にもWindowsは全ての領域をWindows用にとってしまうので要注意です.ファイルシステムはNTFSにします.FATより幾分速いと聞きますが,幾分不安定だとも聞きます.真意の程は定かではありません.まとめると,ここではWindows用とLinux用にパーティションを二つに分けるだけでよいのです.Linux swap領域は,Linuxとして確保した領域から後に分けることにします.
後は弛緩したまま指示に従えば,いつの間にかインストールは終わり,HDからWindowsがブートされます.いくら不安定なWindowsと言えど,まっさらのHDに書き込むわけですから失敗するわけはありませんよね…,とは簡単には言えないですね.昔Windows98SEをフォーマットしたHDにインストールしようとして三回失敗したことがあります.うまーくWindows様の機嫌をとるのが肝要です.インストール時に不必要なデバイスはささないとか.ともかく,後は単純にWindowsの問題ですね.運が良ければつつがなく作業は終了するでしょう.蛇足ですが,インストールが終わったら修正パッチを当てまくっておいた方がいいです.が,相当量のパッチを当てねばなりません.ブロードバンドじゃない方,つまりナローバンド(ダイヤルアップなど)の人には死刑宣告に等しいですね.自宅のマシンでは,その膨大なパッチの前に為すすべもなく放置しています.
grub,とは次世代(?)のLinuxローダーで,LILOに代わるものです.グラフィカルなユーザーインターフェースと高機能なコマンドが特徴です.新規HDにroot以下をコピーする際にgrubはインストールされないので,一応FD(フロッピーディスク)にgrubをコピーしておきます.さらに,万一HDからのブートに失敗したときでもFDからは成功する可能性が高いので,もしもの時用に作っておくのはいいことかも知れません.
ファイルシステムはLinuxのext2でなくてもよいので,ここではWindowsからでもメニューが変更できるようにFATで作ることにします.ただし,カーネルにおいてvfatなどの形式がサポートされていない場合はエラーが表示され実行することが出来ませんので,その場合はvfat形式をサポートするようカーネルを再構築してください.カーネルの再構築についてはここを参考にしてください.
以下において,$は一般ユーザ,#はスーパーユーザを指します.
スーパーユーザになります.
$ su
FDをフォーマットします.superformatでなくても,fdformat,mformat,mkdosfsでもよいらしいです.
# superformat /dev/fd0 hd
grubのファイルをFDにコピーします.
# mount -t vfat /dev/fd0 /floppy
# mkdir -p /floppy/boot/grub
# cd /boot/grub
# cp stage1 stage2 menu.lst /floppy/boot/grub
# umount /floppy
grubをインストールします.
#grub
grub > root (fd0)
grub > setup (fd0)
grub > quit
これでgrubのFDが完成します.
(以下は蛇足ですので,読み飛ばしていただいて結構です:
grub本体はマスターブートレコード(MBR)領域に入る512バイトのstage1とLinuxパーティション領域に入る約120Kバイトのstage2に分かれています.通常はstage1からstage2が呼ばれることによりmenu.lstに記述されたメニューが表示されます.しかし,stage1のみでも,grub特有のコマンドラインを用いることで処理を指示することが出来ます.ちなみに,パソコンの電源投入後BIOSがまず読みに行くところがMBRであり,MBR内部の処理を呼び出します.MBRでは各パーティションの位置情報を記録しています.
MBR領域に書かれているブートローダは通常の方法では削除することが出来ません.以下にMBR領域のブートローダを削除する方法を書いておきますが,MBR領域を削除するとそのHD単体ではHD内のパーティションにアクセスすることが出来なくなることをご承知おきください.削除されるならば,あらかじめこの章に書かれた方法でバックアップFDを作成しておいてください.)
以下のコマンドをプロンプトから実行します.
C:\> fdisk /mbr
Windows2000のCD-ROMから「修復セットアップ」を実行し,回復コンソールを実行して,コマンドラインから
fixmbr
と入力します.
Windows2000のインストールでは,Windowsの領域とLinuxの領域を分けましたが,ここではLinuxの領域をさらにLinux-swapの領域とLinux本体の領域の二つに分けます.
まず,既存のHDからDebianを起動します.ここで,既存のHDは /dev/hda,新規のHDは /dev/hdb となっています.そして領域を
Windows2000 /dev/hdb1 Linux-swap /dev/hdb2 Linux /dev/hdb3
の様に分けるとします.
fdiskを用いてパーティションを分けます.<R>はリターンを表します.
# fdisk /dev/hdb
n
p
2 ←swap領域を分けます.
<R>
+256M ←メモリの容量としました.
n
p
3 ←Linux領域を分けます.
<R>
<R> ←残り容量を全てLinux領域をするので,デフォルトのままです.
t
2
82 ←今2,3の領域共にLinux領域となっているので,2の領域をswapに設定し直します.
w ←記憶して終了させます.
次に,分割した領域を各々フォーマットします.
# mkswap /dev/hdb2
# mke2fs /dev/hdb3
ここまでの作業は,コピーをするためのいわば下準備の段階に過ぎません.ここからが,ファイルをコピーする作業となります.手順としては,一旦新規HDの /dev/hdb を適当なマウントポイント,ここでは /mnt にマウントして,そこにdump,restoreコマンドを使ってコピーします.ddやtarを使っても出来るそうですが,ddは同じ型番のHD間でしか出来ず,またtarはroot以下全てのファイルをコピーするような場合には向かないようです.と言うことで,一般的なdump&restoreを使うことにします.
マウントをして,マウントポイントのディレクトリに移ります.
# mount /dev/hdb3 /mnt
# cd /mnt
dumpコマンドを使おうとしたら,なんとインストールされていませんでした.よって,dumpをインストールします.こういう時にDebianって便利だな,と思います.Linuxユーザの中の5%しかいないだなんて何のそのです.ちなみに,restoreは,dumpのdebパッケージの中に入っています.蛇足ですが,インストール前に # apt-get update を行っておいた方がよいでしょう.
# apt-get install dump
いよいよ,dumpとrestoreを使ってコピーします.表示画面を見ていると主にdumpに時間がかかっているように思いますが,残り時間がちゃんと表示されているので,ストレス無く実行できます.参考までに,僕のマシンでは6GBで40分余りでした(新システムで試したら,10GB程度で20分でした.ハードディスクやCPUのスピード,マザーボードの性能などに大きく依存します).これなら一からDebianをインストール仕直すよりよっぽど時間の節約にもなりますね.
# dump 0uaf - / | restore xf -
作業途中,というか最後の最後で以下の質問をされますが,"y"とします.
set owner/mode for '.' [yn]
これにてコピー完了です.下準備に時間がかかりまくった割にはあっさり済んで拍子抜けです.でも,拍子抜けするくらいの作業で済む方がユーザフレンドリーですね.
どのデバイス(等)をどこにマウントするかを記述してある /etc/fstab を書き換えます.しかし,新HDのパーティション分けの構成は旧HDと全く同じなので,旧HDからコピーされたfstabのままで,新HDで使用できます.ということで,僕の場合書き換えは必要ありませんでした.
今の状態ではgrubがインストールされていないので,新HDから起動しようとしてもgrubが起動しません.よって,旧HDから新HDへgrubをインストールします.
# grub-install /dev/hdb
fstabの時と同様に,旧HDのgrubメニューをそのまま新HDにコピーしているので,新HDでは旧HDのメニューしか現れません.よって,新旧HDでパーティションの分け方が異なる場合は,/mnt/boot/menu.lst を修正する必要があります.エディタなどで適宜修正してください.僕の場合は,もちろん同じなので書き換えは行いませんでした.
失敗した場合
上手く行けばそれでよいのですが,現在のディストリビューションの構成次第では時には失敗することもあります.もしブートローダであるgrubが起動しなければ,GNU GRUB FAQ曰く『起動不可能なマシンが取り残される』だけだそうです.そうならないためにも,2において予備のブートFDを作っておくことは大変意義のあることなのです.FDから立ち上げれば,HDのgrubに問題があっても立ち上がります.
エラーの一つに『GRUB: HARD DISK ERROR』というものがあります.これはgrubが認識するHD構成とLinuxが認識するそれとが異なる場合に起こるとされています.私もこのエラーに見舞われました.debianは部分部分でバージョンアップを行うことが出来ますが,これはウリの一つであると同時に,欠点でもあります.あるパッケージがアップグレードされたのにもう一つのパッケージは前のバージョンのままで,インストールするファイルは先述の二つのパッケージに依存している場合,エラーが起きることがままあります.適当なことを言って申し訳ないのですが,そのようなエラーが出た場合は色々な可能性があると思いますが,最も確度の高い物をアップグレードするのがよいかと思います.私が思うに,それは"perl"と"binutils"だと思います.まず,perlはdebianがその多くを依存している言語です.perlがメジャーバージョンアップすると,debianユーザはヒイヒイ言うことになるくらい重要な物です(最近ではperl dependenceをやめてC dependenceにするという話も聞きますが).もう一つのbinutilsは,grubが依存しているパッケージです.この二つをアップグレードして様子を見てみるのも手かも知れません.ただ,その前にハードディスク構成が正しいか,もう一度確かめてみてくださいね.
また,旧ハードディスクを取り外し新ハードディスクのみの構成にして,FDでもってdebianを立ち上げ,そこで grub-install をするのも良いかも知れません.
# grub-install /dev/hda
この場合,新HDがマスターになっているので,/dev/hda であることに注意してください.
今まで,旧HDが /dev/hda ,新HDが /dev/hdb となっていたので,パソコンの蓋を取って,HDの裏側にあるポッチ(何ていう名称なのか知りません…)を入れ替えて,物理的にマスターとスレーブを交換します.ポッチは小さいので,ペンチ等を使うと便利です.こうすることにより,計算機は旧HDを /dev/hdb ,新HDを /dev/hda と認識するようになります.
BIOSの設定をいじると,簡単にHDのマスターとスレーブを交換できるかな,と試してみたのですが,そうは問屋がおろしてはくれませんでした.BIOSで hda でなく,hdb から起動するように書き換えたのですが,Linux自身は未だ hda から読み込むように設定が為されているので,うまくブートできませんでした.面倒くさいし,やり方わからないし,なら物理的に換えてしまえばいいではないか.ということで,上記の方法にしたわけです.
これで,全作業終了です.FDを抜いておそるおそるリブートすると…,ほっ,ちゃんと立ち上がりました.どこにも以前と比べておかしい点はありません.dfを実行すると,以前はUsed 96%だったのがUsed 43%になっています.大成功です!ただ,10GBを20GBに換装しただけなので,「もうすでに半分近く埋まってるのかよ!」という諸行無常感はあるのですが(笑)