7. 元の HD から新しい HD へのファイルのコピー

ハードディスクをコピーする時はシングルユーザーモードで行います。これはシステムデーモンをシャットダウンし ログの状態を保ち他のユーザーのログインを防ぐためです -
/sbin/telinit 1

ディレクトリとファイルそれにリンクのすべてをコピーします。

しかし /new-disk をコピー する必要はありません。自分自身をコピーすることになるからです。

さらに新しい HD に /proc ディレクトリを作りますが内容をコピーする必要はありません - これは 1 種の バーチャル ファイルシステムで実際にはファイルはありませんが稼動中のシステムのプロセス情報 を反映しています。

元の HD を新しい HD にコピーする方法は 3 つあります。ハードディスクが大きかったり メモリが小さかったりすればかなり時間がかかります。コピー速度は 1 分間 10 Mb かもう少し多い ぐらいでしょう。

コピーの進行状況はほかのターミナルから df コマンドを使って分かります。 watch dfwatch ls -l /new-disk を使うと 2 秒毎に更新された状態を見ることができます - 表示を中止させたいときは Ctrl-C を押します。 watch コマンドを使うとコピーの速度が遅くなります。

cp -ax / /new-disk

これが 1 番簡単な方法ですが元の Linux システムのパーティションが 1 つの時だけ有効です。

なるべく元のファイル構成と属性を保つため -a オプションを使います。 -x は単一のファイルシステムをコピーするために使います - これは /new-disk/proc を コピーさせない ために要ります。

SuSE の場合. この方法に限り新しい HD に /dev/pts を 次のコマンドを使って作っておく必要があります。 mkdir /new-disk/dev/pts

Note: cp コマンドの最近のバージョンでは -x オプションを付けると /new-disk/new-disk/new-disk/proc ができます。ディレクトリの中身はありません。この 2 つができた時は /new-disk/new-disk を 消去して /new-disk/proc を残しておきます。

cd / && echo cp -a `/bin/ls -1Ab | egrep -v "^new-disk$|^proc$"` /new-disk | sh

( 1 行で記述してください)

このコマンドはまずルートディレクトリに入り次に /new-disk/proc を除く すべてのファイルとディレクトリを /new-disk にコピーします。 ls の後ろの最初のオプションは アルファベットの L ではなく数字の 1 です。

このコマンドはどんなときでもたぶん有効です。

cp -a /bin /boot /dev /etc /home /lib /lost+found /mnt /root /sbin /tmp /usr /var /new-disk

( 1 行で記述してください)

1 番後ろのディレクトリ /new-diskcp コマンドのコピー先でその他のディレクトリはコピー元です。 つまり列挙したすべてのディレクトリを /new-disk にコピーすることになります。

この方法ではコピーする必要のあるディレクトリを自分で単にリストアップするだけです。 ここでは /new-disk/proc を除いて すべてのディレクトリをリストアップしています。なんらかの理由でほかの方法が使えないときは このコマンドを使ってマニュアルでコピーしたいディレクトリを指定します

この方法の場合ルートディレクトリ自身になにかファイルがあるときは次のコマンドを使って コピーします。特に Debian と Slackware ではルートディレクトリにファイルを 置くのでその必要があります -
cp -dp /* /.* /new-disk

この Mini How-To の以前のバージョンではハードディスクをコピーするのに tar コマンドも使えると書きましたがこの方法にはバグがあります。その他にも当然いろいろな方法がありますが この 3 つが最も簡単で速くて確かです。

3 つの方法のどれかでコピーした後もし新しい HD に /proc ディレクトリが無ければ作成します -
mkdir /new-disk/proc

ここで必要なら新しい HD のファイル構造を検定します -
umount /new-disk
fsck.ext2 -f /dev/hdb1
mount -t ext2 /dev/hdb1 /new-disk

もし新しい HD に 1 つ以上のパーティションがあるなら fsck.ext2 を走らせる前に下の階層からアンマウントします - 前に述べた例ではまず 3 層目のパーティションをアンマウントしてつぎに 2 層目 1 層目と続きます。

ファイルが間違いなくコピーされたかどうかを確かめるため2つのハードディスクを照合して おくこともできます -
find / -path /proc -prune -o -path /new-disk -prune -o -xtype f -exec cmp {} /new-disk{} \;
      

( 1 行で記述してください)

Slackware の場合. 最小限のファイルだけを含む Slackware の基本インストール("A" シリーズだけ)では cmp は含まれて来ないのでこのコマンドは実行できません。 これは "AP1" シリーズには入ってきます。

このコマンドは普通のファイルだけを照合します。 /dev ディレクトリにある特殊な キャラクタ デバイス ファイルやブロック デバイス ファイル、ソケットなどは cmp コマンドでは適切なチェックはできません。このような"特別"なファイルの検定方法についてなにかあれば教えてください。