HDDのお引っ越し



1.はじめに

HDDは、消耗品である。
いつかは壊れる日が来る。
また、データは、貯まる一方なので、いつかは、満杯になってしまう。

近年、HDDの大容量化は、めざましいものがある。
上記の不安に対する答えは、「新しいHDDに、交換する」というのが、
一般的な答えであろう。

そこで、ここでは、ルートディレクトリの存在するHDDを、丸ごとコピーし、
HDDを交換する方法を示す。

この方法は、私がWebをあさり、調べた方法であり、再度同じ作業を行うための、
備忘録である。
なお、行頭の、$、#は、それぞれ、ユーザー、管理者を意味するプロンプトである。
(当然知っているよね?)

この目的に使えるツールは、結構あるようだ。
要は、パーティション全体のコピーがとれればいいのだから。

ここでは、こういった目的には、伝統のあるdumpを使うことにする。


2.準備


2−1 本当の準備

まず、今の環境を整理しないといけない。

・現在使っているHDDの容量がどれだけか。
・どういうパーティションに切り分けたのか。
・それらを、どのディレクトリにマウントしたのか。

最低限、これくらいは、「紙に」メモして置いた方が良い。
出来れば、その順番も、実体に合わせて。

というのは、Linuxと言うでは、パーティションの順番によって、デバイス名が異なり、
記述の方法が異なるからである。
これは、規則によって決まっているため、そのまま再現すれば、以前の設定が、
そのまま使えて便利だからである。

具体的には、/etc/fstabに書かれているので、コピー開始直前に修正したりすればいいが、
危ない橋を渡る必要はない。

また、できれば、最低限のバックアップは、取っておこう。


2−2 起動ディスクの作成

新HDDに移行した際に、最初は、そのHDDから起動できないことが多い。
そこで、安全のため、FDDから起動できるようにしておこう。

この場合、既にHDDから起動できるようになっているので、ブートローダーだけ
FDに書き込めばいい。

MS-DOSフォーマット済みの1.44FD(新品が吉)を用意し、下記のようにすると、
良いらしい。

【LILOの場合】
#mount /dev/fd0 /mnt
#/sbin/lilo -b /dev/fd0
#umount /mnt

(JF LILO-README.txtより編集)

【GRUBの場合】
#grub-install '(fd0)'

(JF Multiboot-with-GRUB.txt)

普通は、インストール時に起動FDを作ったはずなので、この作業は、無用でしょう。
実際、私もそのFDを使ったので、この作業は、未確認です。
起動することを確認の上、次に進んでください。


2−3 dumpのインストール

これは、Debianだけの事かもしれないが、dumpは、インストールされていない。
さっそく入れよう。

#apt-get install dump

これでおしまい。
書き戻す時に必要な、restoreも、同時にはいる。
(RPM ? RedHat ?なにそれ?)


2−4 新HDDの接続、設定

新HDDを、「スレーブ設定にして」、プライマリ・スレーブに接続する。
その後いきなり、Linuxを起動させ、新HDDの設定に移る。
このとき、シングルユーザーモードで、起動することが推奨されている。
作業中に、ファイルが書き換えられてしまい、不整合が生じるのを、
防ぐためなんだろう。
liloなら、起動時に、カウントダウンが始まるので、それが終わらないうちに、

>linux 1
または、
>linux single

と入力する。

JFによると、再起動の必要はなく、

#init 1; exit

で、シングルユーザーモードになった後、umount、e2fsck、mountという手順を踏んで、
チェックするんだそうだ。
面倒なので、省略した。(^^;;

プライマリ・スレーブに接続した場合、新HDDは、/dev/hdbになっているはずである。

まず、パーティションを設定しよう。
例として、結構複雑なのを上げる。

hdb1  

swap

swap

hdb2

基本区画  

/

hdb5

拡張区画 /usr
hdb6拡張区画

/home

この場合、1と2は、素直に確保すればいい。
5と6は、前準備がいる。
一度、拡張区画で、残り全てを確保してから、5と6を作っていく。
拡張区画は、最初5として表示されるが、気にせずパーティションを確保すると、ちゃんと5から
確保されるので、上記のようになるはずだ。

実際には、
#fdisk /dev/hdb
とやって、メニューを表示させながら、やっていけばいい。
そうそう、この例でいくと、2に、ブートフラグを付けるのを忘れないように。

fdiskの使い方を知らない人は、素直に、入れ直しましょう。
危険です。

パーティションが確保できたら、それぞれを、フォーマットしよう。
上記の場合、

#mke2fs -c /dev/hdb2
#mke2fs -c /dev/hdb5
#mke2fs -c /dev/hdb6

ちなみに、-cは、不良ブロックのチェックを行うオプション。

スワップ・パーティションのフォーマットは、

#mkswap /dev/hda1

で良いようだ。(by JF)
freeで確認すると、ちゃんと確保されていた。
ちなみに、実際にswapを有効にするには、swapon -a を実行する必要があるが、普通は、
起動時に実行されているから、無用。


2−5 コピーの実際

あとは、マウントして、ディレクトリを移動。
dumpをするだけだ。

たとえば、ルートなら、

#mount /dev/hdb2 /mnt
#cd /mnt
#dump 0uaf - / | restore xf -
#cd /
#umount /mnt

この繰り返しをするだけだ。
で、/usrのバックアップは、

#dump 0uaf - /usr | restore xf -

となる。
そうそう、dumpの際に、最後の方で、なにやら聞いてくるが、「y」と答えておけば良いそうだ。

1行目:新区画をマウント。
2行目:restoreは、カレントディレクトリに展開するため、あらかじめ、カレントフォルダを
移動しておく。

3行目:コピーの実行。なんと、パイプで繋いで、いきなり展開させている。Linuxには、/procなど、
ファイルに見せているだけの特別なものが存在するので、単純にはコピーできない。
そこで、これらのスペシャルファイルを理解できるdumpの出番となる。

4行目:カレントを移動しておかないと、アン・マウント出来ないから。
5行目:アン・マウント

それぞれのオプションは、

dump

0:数字のゼロ。フル・ダンプの意
u:/var/lib/dumpdatesを、更新する。
a:auto-size。デフォだし、テープ用みたいだから、不要かも。
f:これの次が、ファイル名。
-:ファイル名の部分にこれが書いてあると、標準出力に出力する。

restore

x:指定したファイルだけをアーカイヴから取り出す
f:アーカイヴファイルを指定する。この次が、ファイル名。
-:ファイル名の部分にこれが書いてあると、標準出力から、得る。


2−6 HDDの付け替え

電源を切り、HDDを付け替える。
その際に、マスター/スレーブのスイッチを変えるのを、忘れないように。
出来れば、旧HDDは取り外して置いた方が良い。
理由は、後述。

起動させるために、起動FDを挿入し、電源を入れる。
ちゃんとコピーされていれば、起動できるはず。


2−7 ブートの設定

lilo
#lilo

GRUB
#grub-install /dev/hda

FDを抜き、HDDから起動できるか、チェックする。


2−8 旧HDDの保管

これは必須ではないです。
ただ、推奨します。

Linuxを、サーバーとして使っている場合、止まってしまっては困ります。
ですが、不測の事態は、常に起こりうるものです。
その中で、最も多いのが、HDDの故障ではないかと思います。

旧HDDを保管しておくのは、そのための措置です。
再インストールして、元の環境に戻すのは、最低でも半日は必要でしょう。

その点、旧HDDがあれば、交換するだけですので、1時間もあれば十分でしょう。
それまでに蓄えたデータは、消滅しますが、それはそれで、バックアップがある
はずなので、サーバー機能が使えないと言う事態は、避けることが出来ます。
とりあえず、サーバー機能だけは復旧させておいて、バックアップデータ類を書き戻し、
その後、ゆっくりと、HDDを買いに行けば、事足りることがほとんどだと思います。


3.さいごに

これは、私が、実際に行った手順です。
実行していないのは、起動FDの作成部分だけです。
今後も、この手順で行うつもりですので、非合理的な箇所があれば、是非教えてください。
速攻で更新します。(^^)

 

2002/10/10
by CRA