Hard Disk Upgrade Mini How-To Yves Bellefeuille yan@storm.ca Konrad Hinsen hinsen@cnrs-orleans.fr 日本語訳 / 長岡昭平 nagaoka@jttk.zaq.ne.jp v2.11, 13 April 2000 Linux システムをもう 1 つのハードディスクにコピーする方法 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Table of Contents 1. はじめに 2. ハードディスクのシステムへの接続 3. non-Linux パーティションとネットワークドライブのアンマウント 4. 新しい HD のパーティション 5. 新しい HD のフォーマット 6. 新しい HD のマウント 7. 元の HD から新しい HD へのファイルのコピー 8. /new-disk/etc/fstab の修正 9. 新しい HD を起動させる LILO の準備 10. ブートディスクの作成(オプション) 11. 元の HD の取り外し 12. システムの再起動と LILO 設定ファイルの修正 13. 謝辞 14. 日本語訳について 1. はじめに この文書では Linux システムを LILO と一緒にそっくりそのままハードディス クからハードディスクへ移植する方法について説明します。 以下の説明では /dev/hda (1 つ目の IDE ハードディスク) は元の HD 、 /dev /hdb (2 つ目の IDE ハードディスク) は新しい HD と呼ぶことにします。 元の HD の個々のパーティションは /dev/hda1、/dev/hda2 などの名前で参照 されます。新しい HD のそれは /dev/hdb1、 /dev/hdb2 などとなります。 ここでは Red Hat 6.0 に基づいて話を進めますが Debian 2.1、 Slackware 3.5 、SuSE 6.2 でも動作を確認しています。Red Hat 6.0 とこれらのディスト リビューションとの相違点は注釈として付けています。 コマンドがうまくはたらかないディストリビューションがあれば教えてくださ い。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2. ハードディスクのシステムへの接続 最近のシステムではハードディスクコントローラに EIDE デバイスを 4 台まで 接続できます。だから他の EIDE デバイスがあってもハードディスクをさらに 2 台接続するのはなにも問題はないでしょう。ハードディスクと CD-ROM ドラ イブが代表的な EIDE デバイスです。フロッピードライブとテープドライブは たいていハードディスクコントローラではなくてフロッピードライブコントロ ーラに接続されています。 SCSI アダプタはさらにゆとりがあって 7 台まで接続できます。運良く(お金も あって)既に SCSI アダプタを持っているならこのことは周知のことでしょうし そこにどんなSCSI デバイスが接続しているかもご存じのはずです。でももっと 詳しく知りたいときは SCSI How-To を参照してください。 旧式のシステムのハードディスクコントローラにはデバイスが 2 台しか接続で きませんがそれでもハードディスクだけなら 2 台同時に接続できるわけです。 もしハードディスクに加えてたとえば CD-ROM ドライブが接続してあれば元の HD と新しい HD を同時に接続するためには CD-ROM ドライブを取り外さねばな らないと言うことになります。 ハードディスクについてはジャンパスイッチを操作してマスターとスレーブの 設定をする必要があります。設定方法はたいていハードディスクに書いてあり ますがそこになければマニュアルを見るかメーカーに問い合わせてください。 次に BIOS に入ってハードディスクを認識させジオメトリを設定します。普通 BIOS 設定プログラムに入るにはシステムの立上げの時に特定のキーを押します 。以下に BIOS 設定プログラムに入る方法を示します - Acer notebooks 起動時の自己診断 (Power-On Self-Test:POST) 時に F2 キーを押す。 American Megatrends (AMI) POST 時に Del キーを押す。 Award Del、または Ctrl-Alt-Esc Compaq 起動して画面右隅に四角形が出てから F10 キーを押す。 Dell Ctrl-Alt-Enter DTK POST 時 Esc キー Hewlett-Packard Pavilion HP のブルーのスプラッシュ画面が表示中に F1 キーを押す。 IBM Aptiva 535 起動して画面右隅に四角形と波線が表示されているときに F1 キーを押す 。 [1] IBM PS/2 Ctrl-Alt-Del を押して画面右隅にカーソルが出てきたら Ctrl-Alt-Ins を 押す。 Mr. BIOS POST 時 Ctrl-Alt-S キー Packard Bell 2、3 のモデルでは POST 時に F1 キーまたは F2 キーを押す。 Phoenix Ctrl-Alt-Esc、 Ctrl-Alt-S または Ctrl-Alt-Enter 旧式のシステムの多くはインストールディスクかリファレンスディスクが 要ります。 これ以外にも付け加えた方が良いと思われる BIOS があれば連絡してください 。 システムをリブートして root でログインします。su コマンドで root になる ときは su - のようにハイフンのオプションをつけます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3. non-Linux パーティションとネットワークドライブのアンマウント Linux で使えるように他のオペレーティングシステム(DOS、Windows、OS/2 な ど) のパーティションをマウントしている場合があります。これらのパーティ ションはそれぞれのオペレーティングシステムで作成してコピーしなければな りませんので Linux をコピーする前にアンマウントします。たとえば DOS の パーティションを /dos にマウントしているならつぎのコマンドでアンマウン トしてください - umount /dos このコマンドのつづりは umount で unmount という単語の 1 つ目の n がない ことに注意してください。 同様にネットワークドライブもアンマウントします。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4. 新しい HD のパーティション 新しい HD のパーティションを作成するには次のコマンドを使います - fdisk /dev/hdb EIDE デバイスは /dev ディレクトリの下で各々 hda、 hdb、 hdc、 hdd とし て認識されます。各ハードディスクには 1 個から 16 個の範囲でパーティショ ンを置くことができます。 /dev/hda4 というとハードディスク a (つまり 1 つ目のEIDE ハードディスク)の、4 つ目のパーティションを指します。 SCSI デバイスは /devの下で各々 sda、 sdb、 sdc、 sdd、 sde、 sdf、 sdg として認識されます。各ハードディスクには同じく 1 個から 16 個の範囲でパ ーティションを置くことができます。 /dev/sda3とは 1 つ目の SCSI ハードデ ィスクの、3 つ目のパーティションを意味します。 Linux ファイルシステム ext2 のパーティション ID は 83、スワップパーティ ション ID は 82 にします。 パーティションの作成については Installation How-To と Partition Mini How-To を参照してください。 新しい HD のシリンダー数が 1024 を超えるときは Large Disk Mini How-To を参照してください。要するに Linux の起動に必要なファイルはハードディス クのシリンダー数が 1024 以内の場所にインストールされていなければなりま せん。1 つの方法としてハードディスクの最初の部分に5Mbかそこらの小さなパ ーティションを作って /boot ディレクトリを置くというのがあります。 (Slackware ではカーネルを /boot/vmlinuz ではなく /vmlinuz として置くの で / と /boot の両方をこのパーティションに作ります。) Linux 以外のシステムのパーティションは Linux の fdisk でなくそれ自身の fdisk かそれと同じ機能のコマンドを使って作成します。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5. 新しい HD のフォーマット 新しい HD の Linux パーティションを ext2 ファイルシステムでフォーマット するには次のコマンドを使います - mkfs.ext2 /dev/hdb1 ハードディスクの異常ブロック(物理的な破損)をチェックするには -c オプシ ョンを /dev/hdb1 の前に付けます。 新しい HD に 1 つ以上の Linux パーティションがあるのなら他のパーティシ ョンも次のコマンドで mkfs.ext2 /dev/hdb2、 mkfs.ext2 /dev/hdb3 のように フォーマットします。必要なら -c オプションを付けてください。 Note: Red Hat、Debian、Slackware の古いディストリビューションではマ ニュアルに書いてあるにもかかわらず mkfs -t ext2 -c /dev/hdb1 として も異常ブロックをチェックしませんでした。これはいまでは直っています 。 スワップパーティションのフォーマットには次のコマンドを使います - mkswap /dev/hdb1 異常ブロックをチェックする -c オプションも /dev/hdb1 の前に置いて使えま す。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6. 新しい HD のマウント 新しい HD をマウントするディレクトリたとえば /new-disk を作りそこにマウ ントします。 mkdir /new-disk mount -t ext2 /dev/hdb1 /new-disk 新しい HD の Linux パーティションが 1 つ以上になるならのちのちのそれと 同じ構造になるように /new-disk にマウントします。 例. 新しい HD の 4 つの Linux パーティションを次のように設定するものと します - /dev/hdb1: / /dev/hdb2: /home /dev/hdb3: /var /dev/hdb4: /var/spool 4 つのパーティションを /new-disk の下に次のようにマウントします - /dev/hdb1: /new-disk /dev/hdb2: /new-disk/home /dev/hdb3: /new-disk/var /dev/hdb4: /new-disk/var/spool パーティションをマウントする前に各々の階層ごとにマウントポイントを作り ます。 例. mkdir /new-disk [1 つ目の階層] mount -t ext2 /dev/hdb1 /new-disk mkdir /new-disk/home [2 つ目の階層] mount -t ext2 /dev/hdb2 /new-disk/home mkdir /new-disk/var [2 つ目の階層] mount -t ext2 /dev/hdb3 /new-disk/var mkdir /new-disk/var/spool [3 つ目の階層] mount -t ext2 /dev/hdb4 /new-disk/var/spool /new-disk/tmp をマウントポイントとしたときはそのディレクトリにだれでも アクセスできるようにパーミッションを次のように訂正します - chmod 1777 /new-disk/tmp ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7. 元の HD から新しい HD へのファイルのコピー ハードディスクをコピーする時はシングルユーザーモードで行います。これは システムデーモンをシャットダウンしログの状態を保ち他のユーザーのログイ ンを防ぐためです - /sbin/telinit 1 ディレクトリとファイルそれにリンクのすべてをコピーします。 しかし /new-disk をコピーする必要はありません。自分自身をコピーすること になるからです。 さらに新しい HD に /proc ディレクトリを作りますが内容をコピーする必要は ありません - これは 1 種のバーチャルファイルシステムで実際にはファイル はありませんが稼動中のシステムのプロセス情報を反映しています。 元の HD を新しい HD にコピーする方法は 3 つあります。ハードディスクが大 きかったりメモリが小さかったりすればかなり時間がかかります。コピー速度 は 1 分間 10 Mb かもう少し多いぐらいでしょう。 コピーの進行状況はほかのターミナルから df コマンドを使って分かります。 watch df か watch 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-disk は cp コマンドのコピー先でその他の ディレクトリはコピー元です。つまり列挙したすべてのディレクトリを / 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 コマンドでは適切なチェックはできません。このような"特別"なファ イルの検定方法についてなにかあれば教えてください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8. /new-disk/etc/fstab の修正 新しい HD が元の HD とパーティションや構成が異なっているときは新しい HD の /new-disk/etc/fstab をそれに合うように修正します。 元の HD が取り外されてしまったときにディスクのパーティションの記述 (fstab の 1 列目)が新しい HD の構成と一致しているか、また 2 列目に記述 されている / ディレクトリにパーティションが 1 つマウントされるだけだと いうことを確認してください。 /etc/fstab ファイルの書式については Linux System Administrator's Guide のセクション 4 Mounting and unmounting の項を参照してください。 スワップパーティションは次のようにします - /dev/hda1 swap swap defaults 0 0 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9. 新しい HD を起動させる LILO の準備 (この章に関して Rick Masters の助言 に感謝します) LILO はハードディスクのマスターブートレコード (MBR) にインストールして あるものとします。これが最も一般的な設定です。今は 2 つ目だがいずれは 1 つ目になるハードディスクに LILO をインストールします。 /new-disk/etc/lilo.conf を次のように編集します - disk=/dev/hdb bios=0x80 # 2 つ目のハードディスクを 1 つ目のハードディスク # として取り扱うよう LILO に指示する。 # (BIOS ID 0x80). boot=/dev/hdb # 2 つめのハードディスクに LILO を # インストールする。 map=/new-disk/boot/map # マップファイルの場所 install=/new-disk/boot/boot.b # このファイルから(LILO ブートレコードを) # ブートセクタへコピーする。 prompt # "LILO boot:"プロンプトの表示 # timeout=50 # デフォルトで 5 秒後に起動させる。 # (単位は 1/10 秒) # image=/new-disk/boot/vmlinuz # Linux カーネルの場所を示す。 # 実際の名称は次のようにバージョンナンバーが # 入っている。 # "vmlinuz-2.0.35" label=linux # 起動するシステムを識別するラベル root=/dev/hda1 # 新しい HD のルートパーティションの場所 # これはハードディスクを入れ替えた後の # システムに合うように修正する。 # いずれ元の HD は取り外されるので # 入れ替えたのちのハードディスクの場所を # 指定する。 read-only # 読み出し専用でまずマウントしファイルシステムの # チェックをする。 Slackware の場合. image=/new-disk/vmlinuz とします。 もし SCSI ディスクを使っているなら initrd がいるかも知れません。今ある /etc/lilo.conf を調べてみてください。 新しい HD にLILO をインストールします - /sbin/lilo -C /new-disk/etc/lilo.conf -C オプションはどの設定ファイルを使うかを LILO に指定します。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10. ブートディスクの作成(オプション) 新しい HD で起動しない場合に備えてブートディスクを作っておくこともでき ます。 なにも入っていないフロッピーディスクを挿入、フォーマットして、ファイル システムを作成、マウントします - fdformat /dev/fd0H1440 mkfs.ext2 /dev/fd0 mount -t ext2 /dev/fd0 /mnt Debian の場合. Debian 2.x では /dev/fd0H1440 のかわりに /dev/fd0u1440 を、 Debian 1.x では小文字の h にかえた /dev/fd0h1440 を使います。 Debian の場合. Debian 2.x では fdformat のかわりに superformat を使いま す。つぎのエラーが出ますが無視してください。 mformat: command not found. Debian 1.x でもし fdformat がないときフロッピーがすでにフォーマ ットされているならそれを省けます。この場合は mkfs.ext2 コマンドの後ろに -c オプションをつけて異常ブロックをチェックしておきます。 Slackware の場合. /dev/fd0H1440 のかわりに /dev/fd0u1440 を使います。古 いバージョンでは小文字の h にかえた /dev/fd0h1440 を試してください。 SuSE の場合. /dev/fd0H1440 のかわりに /dev/fd0u1440 を使います。 /boot にあるファイルをすべてフロッピーディスクにコピーします - cp -dp /boot/* /mnt Red Hat の場合. /boot に vmlinux と vmlinuz の両方のファイル(最後の文字 が違います)があるときは vmlinuz の方だけをコピーします。これは圧縮され ているだけで vmlinux と同じです。 Slackware の場合. 次のコマンドを使って /vmlinuz をブートディスクにコピ ーします - cp /vmlinuz /mnt /mnt/lilo.conf を以下のように編集します。 boot=/dev/fd0 # フロッピーディスクに LILO をインストールする。 map=/mnt/map # マップファイルの場所 install=/mnt/boot.b # このファイルから(LILO ブートレコードを) # フロッピーディスクのブートセクタへコピーする。 prompt # "LILO boot:"プロンプトの表示 # timeout=50 # デフォルトで 5 秒後に起動させる。 # (単位は 1/10 秒) # image=/mnt/vmlinuz # フロッピーディスク上のLinux カーネルの場所を示す。 # 実際の名称は次のようにバージョンナンバーが # 入っている。 # "vmlinuz-2.0.35" label=linux # 起動するシステムを識別するラベル root=/dev/hda1 # 新しい HD のルートパーティションの場所 # これはハードディスクを入れ替えた後の # システムに合うように修正する。 # いずれ元の HD は取り外されますので # 入れ替えたのちのハードディスクの場所を # 指定します。 read-only # 読み出し専用でまずマウントしファイルシステムの # チェックをする。 ブートディスクに LILO をインストールします - /sbin/lilo -C /mnt/lilo.conf -C オプションはどの設定ファイルを使うかを LILO に指定します。 フロッピーディスクをアンマウントします - umount /mnt ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11. 元の HD の取り外し システムをシャットダウンして元の HD を取り外します。ハードディスクのジ ャンパと BIOS を新しい環境にあわせて変更するのを忘れないようにしてくだ さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12. システムの再起動と LILO 設定ファイルの修正 システムを再起動します。もしなにか問題が起きたら先ほど作ったブートディ スクを使用します。このとき BIOS の起動順序を A:、 C: に変更する必要があ るかも知れません。 再度 LILO(/sbin/lilo) を実行する時のために /etc/lilo.conf を修正してお きます。どのようにするかの一例です - boot=/dev/hda # 1 つ目のハードディスクに LILO をインストールする。 # map=/boot/map # マップファイルの場所 install=/boot/boot.b # このファイルから(LILO ブートレコードを) # ブートセクタへコピーする。 prompt # "LILO boot:"プロンプトの表示 # timeout=50 # デフォルトで 5 秒後に起動させる。 # (単位は 1/10 秒) # image=/boot/vmlinuz # Linux カーネルの場所を示す。 # 実際の名称は次のようにバージョンナンバーが # 入っている。 # "vmlinuz-2.0.35" label=linux # 起動するシステムを識別するラベル root=/dev/hda1 # 新しい HD のルートパーティションの場所 # これは新しいシステムに合うように修正する。 # read-only # 読み出し専用でまずマウントしファイルシステムの # チェックをする。 Slackware の場合. image=/vmlinuz を使います。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13. 謝辞 以下の方々に感謝いたします。 Scott Christensen、 Frank Damgaard、 Alexandre Fornieles、 David Fullerton、 Igor Furlan、 Jerry Gaines、 Chris Gillespie、 Nicola Girardi、Per Gunnar Hansoe、 Richard Hawes、 Ralph Heimueller、 Gerald Hermant、 Andy Heynderickx、 Paul Koning、 Hannu Liljemark、 Claes Maansson、 Rick Masters、Jason Priebe、 Josh Rabinowitz、 Douglas Rhodes、 Valentijn Sessink、 Kragen Sitaker、 Stephen Thomas、 Gerald Willman この文書を翻訳する人はそのコピーを Konrad Hinsen < hinsen@cnrs-orleans.fr> に送ってください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14. 日本語訳について 翻訳につき助言を頂いたつぎの方々に感謝いたします - 武井伸光さん、千旦裕 司さん 日本語訳は Linux Japanese FAQ Project が作成しました。翻訳に関するご意 見は JF プロジェクト 又は、長岡昭平 < nagaoka@jttk.zaq.ne.jp> 宛に連絡してください。 (翻訳年月日 25 February 2001, v2.11) Notes [1] 他の Aptiva モデルでも同じなのかどうかはわかりません。