Partition Rescue mini HOWTO Jean-Daniel Dodin July 27, 2000 翻訳:中谷千絵 (jeanne@mbox.kyoto-inet.or.jp) 日本語訳: Sep. 15,2000 パーティション救助のための mini-HOWTO うわっ!ディスクが空っぽだ。Linux が消えてしまった。そんなことに遭遇し た、あるいはまた、ある日突然別の問題に遭遇してしまうのが恐いなら、ぜひこ の文書を読みましょう。 何が書かれているか

この mini-HOWTO は``パーティションテーブルの消失''問題についてだけ書かれ ています。こんな場合のことです。

``オペレーティングシステムがありません''(``no operating system'')というメッ セージが出て、もうコンピュータにアクセスできない。 新しいシステム(たとえば、windows のような)をインストールしたら、 Linux がどこかに行ってしまい、windows がディスク容量の全部をのっとって しまった。

この文書を読んで、正確な知識を持って、ちゃんと行う方法を学びましょう。 そうすれば、Linux ではそのような出来事を心配しなくてよいのです。 Windows では正しい知識がなくてもなんとかやれるかもしれませんが、 それはその人がたまたま幸運だっただけのことです。

修復しなくてはいけなくなった時にゆとりを持ってできるように、問題が起き る前にやっておくこと、そして、実際に問題が起きて修復しなくてはいけなく なった時にやらなくてはいけないことを、まず確認していきましょう。 ディスクのなかみを消してしまうのは防ぎようがありませんが、こういうこと はいつも、自動化された windows で起こるか、Linux のインストールがよくな い状態で行われたとか、あるいはユーザのミスで起こるのです。 注意してや る以外ほとんど防ぐ手段はありませんが、あなたはすでに注意していますよね。

このようなことは、MSDOS や Windows の fdisk の使用で起こることもあります。 避けることもできますが、たぶん無理でしょう。

私は自分のコンピュータや友人のコンピュータで何回もやってしまいました。 Linux はたいてい修復して、windows はときどき修復しました。 あなたに幸運がありますように。

何をしなくてはいけないか

好奇心や何か情報を探すためにこの文書を読んでおり、 Linux システムを使っ ているなら、すぐに次のようなことをやってみましょう。

root でログインし xterm を開きます。 訳注:/sbin/fdisk -l は、root で実行してください。 bash# /sbin/fdisk -l /sbin/fdisk -l を実行します。最後の文字は l (エル)です。

お使いのコンピュータのすべてのディスクの現在の状態を表示します。 訳注:もしディスク情報がこの文書に示したように表示されない時は、 fdisk のバージョンを調べてください。 fdisk v2.10f 以前、たとえば v2.9y の場合、 /sbin/fdisk -l では、fdisk のヘルプを表示しますので、 bash# /sbin/fdisk -l Usage: fdisk [-l] [-b SSZ] [-u] device E.g.: fdisk /dev/hda (for the first IDE disk) or: fdisk /dev/sdc (for the third SCSI disk) or: fdisk /dev/eda (for the first PS/2 ESDI drive) or: fdisk /dev/rd/c0d0 or: fdisk /dev/ida/c0d0 (for RAID devices) たとえば、次のようにディスクデバイスを書いてやります。 bash# /sbin/fdisk -l /dev/sda fdisk のバージョンは次のコマンドで調べてください。 bash# /sbin/fdisk -version

紙にこれをメモして(あるいは /sbin/fdisk -l | lpr というように入力すれ ば印刷します)必要なときに使うために安全な場所にしまっておいてください。

あなたが管理者でない場合は、心配しなくてよいでしょうから、 この文書を読むのをやめてもよいですよ。

著作権について

この mini-HOWTO は Jean-Daniel Dodin の2000年の著作です。すべての権利 を有しています。この文書についてあなたが望むこと全部(あるいは大部分)を 行ってもかまいません。どうぞご自由に。しかし、私の名前はそのまま残し ておいてください。Linux のコミュニティに関わるどんな人にも役に立つもので ありますように。

この HOWTO を読んで行ったことで、誰かのどのようなコンピュータ上のどん な損害にも私には責任は持ちません。何らかの損害があっても、それは ** あ なた ** の責任であって、私の責任ではありません。ディスクの分割をすると きは、致命的なことになりますからミスをしないように十分に注意してくださ い。重要なデータをすべてバックアップし、行うことすべてが正しいことを チェックしてください。ここに書かれているすべてのことは、私のコンピュー タではちゃんとできましたが、もちろんあなたのコンピュータではちゃんとで きるでしょうが、もしかしたらできないかもしれません。ほとんどの場合、動 くはずですが、私は保証はできません。これが最後の忠告です。** 重要なデー タはバックアップしましょう。** つまり、自分自身の責任でやってください、 ということです。

きちんと知らないといけないことは何か

お使いのハードディスクで何か重大な問題があるなら、少なくとも何が起こっ ているのかを理解するまでは絶対に write モードで使用してはいけません。 データはなくしやすいものです。

ある朝、突然、コンピュータが、``ロードできません。システムがインストー ルされていません''と言っても、なかみ全部を再インストールしはじめてはい けません。

windows をインストールしているなら、データを回復できるという約束はでき ませんが、ディスクの最初のほうに置かないように配置しているなら、おそら く Linux 部分をすべて修復できるかもしれません。windows ウイルスのある ものは最初のディスクシリンダーを消してしまうので、影響を受ける場所にあ れば、そういうことが起こります。しかし、私はわざわざウイルスを持ち込む ような実験をしたことはありませんし、確かだとはいえません。なんとしても 修復を試してみましょう。

私がこの文書で提供している情報は、情報でしかないということを知っておい てください。この文書を利用することで、あなたのデータに何か問題が起きて も、私にもまた他の誰かも責任はありません。世界中にはあまりに多くの違っ たシステムがありますから、誰かに何かを約束することはできません。私のよ うにデータを修復する好運に与ったように、私はあなたにも幸運があるように 願うだけです。

ディスク

ハードディスクは 0 から最大までの数字を振られたセクターを持っています。

たとえば dmesg で次のように表示されます。

hdb: ST34321A, 4103MB w/128kB Cache, CHS=523/255/63

CHS は シリンダー(C)、ヘッド(H)、セクター(S) を意味します。

512 バイト の 523*255*63=8401995 セクター、したがって 4103 メガバイト です。これは論理的にマップされているだけで、必ずしもディスクの外装に書 かれている数字ではありません(トータルな容量をのぞいては)。

何かを変更したいのではなく、いままでの状態に修復をしたいので、セクター の本当のサイズはほとんど関心がありません。われわれにとっては fdisk に よって与えられたデフォルトサイズが確かなものです。

システムによって調べられたサイズは、BIOS(Basic Input/Output System - the PC's ROM)の働きに直接依存します。BIOS で示されたハードディスクのモー ドは重要なものです。新しいディスクに関しては BIOS 自動ハードディスク認 識を使い、``yes''となるものを使うほうがよいでしょう。とにかく、BIOS の レベルでのどんな変更もディスクのデータ全てを壊すかもしれませんから、特 別な理由がないなら、これで遊ばないほうがよろしい。

これがおそらくお使いのディスクが使用しているモードですから、 恐がらなくても大丈夫です。

パーティション

いまやディスクは巨大になり、13 Gb も珍しくはありませんから、たったひと つの区画に全部を詰め込んでしまうのは実際には便利ではありません。あなた が Linux を使うのは、windows だけがそういう風にしていて、いかに効率が よくないかに気がついているからかもしれませんね。

したがって、ハードディスクは通常は``パーティション''と呼ばれるいくつかの 区画に切られます(詳細は、partition mini HOWTO を参照してください。ある いは /usr/doc/package/util/README.fdisk というファイルも見てください)。 訳注:/usr/doc/pacage/util/README.fdisk は、ご使用のディストリビューションに よっては異なるディレクトリに、保存されているかもしません。 たとえば /usr/doc/packages/util-linux-*VERSION/README.fdisk, /usr/doc/util-linux/README.fdisk などです。 ここで、*VERSION はお使いの fdisk のバージョン番号が入り、 /usr/doc/packages/util-linux-2.10f/README.fdisk のようになります。

fdisk -l での私のディスク状況のプリントの一部を見てみましょう。

ディスク /dev/hdb: ヘッド 255, セクタ 63, シリンダ 523 ユニット = シリンダ数 of 16065 * 512 バイト

デバイス ブート 始点 終点 ブロック ID システム

/dev/hdb1 1 153 1228941 83 Linux

/dev/hdb2 154 166 104422+ 82 Linux swap

/dev/hdb3 * 167 291 1004062+ 83 Linux

/dev/hdb4 295 523 1839442+ 5 Extended

/dev/hdb5 295 422 1028128+ 83 Linux

/dev/hdb6 423 523 811251 6 FAT16

これは私の2番目のハードディスクで、推定と実際の結果は一致しています。 (1 つ目のディスクは構造が単純すぎておもしろくないので、ここでは2つ 目のディスクを例にしました)。

/dev/hdb は2番目の ide ディスクです(プライマリインタフェース上のスレーブ)

/dev/hdb1 は最初の基本パーティションで、ブロックは、1 から 153 までです。

このような基本パーティションを4つ作ることができます。4つ以上欲しい なら、基本パーティションのひとつは拡張パーティションになります(それは 4番目である必要はありませんが)。すべてのその他のパーティションは論理 パーティションと呼ばれ、拡張領域の内側に置かれます。パーティション番号 の5に注目してください。パーティション番号4と同じシリンダ番号ではじ まっています。5番は論理パーティションであり、4番は拡張パーティショ ンです。論理パーティションは、たとえ基本パーティションが4つなくても いつも5番からはじまります。

なぜ問題があるのか

問題はインストールされたオペレーティングシステムがディスクを共有するという ことで、bios が起動するときに最初のひとつだけを調べますから、ディスクの 最初の部分に``パーティションテーブル''と呼ばれるものが存在しないといけな いのです。パーティションテーブルはブートローダーと一緒にマスターブート レコード(MBR)に置かれます。

どれかの OS による MBR の間違った使い方が問題を引き起こすのです。何か システムをインストールしようとするとき、あなたは ``自動的にパーティショ ンを作りますか''というような問いに yes と答えると問題を起こすかもしれ ません。これは windows に当てはまることです。とりわけ特別仕様 の PC 用 カスタム windows (本物の ``windows''CD が含まれていない時) のインストー ルに特徴的です。しかし、最近の``賢い''(とはいえ、それは賢くはない!) Linux のインストールにも当てはまることです。

問題を解決する

どうぞ注意深くやってください。これから行う説明は、最近何かをインストールし たなら、それをあきらめて、以前のシステムに戻してしまいますから。 選択をしなくてはいけません。

より単純な場合

fdisk -l の結果が手元にある場合

fdisk をするために Linux を起動できるディスク(フロッピーあるいは CD )を 使います。ディストリビューションのレスキューディスクのほとんどはできま す。 fdisk -l というコマンドを使って紙に書き出しておきます。 訳注:ディスクが壊れてからfdisk -l してもあまり役に立たないですから。 正常に動作しているときにやっておきましょう。

それで十分です。

linux を起動します。 fdisk /dev/hda (あるいは救助するディスク) を起動します。 fdisk で、損傷を受けたディスク上にあるすべてのパーティションを 削除(d オプション)します。 fdisk で基本パーティション(1-4)を作ります。 パーティションに適切なタグ(t オプション)を与えます。 Linux のスワップパーティションには 82 。 Linux のメインパーティションには 83 (L はリストを表示します)。 5 は拡張領域で、論理パーティションを作る前に領域を確保しなければなりません。 論理パーティションを作ります。

fdisk は小さいですが、とてもよくできたプログラムです。別の種類の fdisk もありますが、私はシンプルなものをお勧めします(もちろん、Linux の fdisk です。ほかの OS の fdisk はお勧めしません)。 訳注:fdisk プログラムには同じ機能を持ったものが複数あります。 cfdisk、sfdisk があります。 Linux を使っているなら man fdisk,cfdisk,sfdisk で確認してみてください。

fdisk は w (書き込みコマンド)を入力してリターンキーを入れるまではディス クには何も書き込みません。間違いを恐れるなら、安全に終了するために、q を入力するか、Ctrl C を使ってください。

新しいパーティションテーブルを書きこんで Linux を再起動します。もしか したらいつものように起動してこないかもしれません。lilo が壊れてしまっ たなら、起動ディスクを使うか、CD (``インストールしたパーティションから 起動する''を選択します)から起動する必要があります。

lilo で起動するなら、root でログインして、``lilo''を入力し、 お好みのブートローダを再インストールするためにリターンキーを入れます。

Linux がすべてそこにあるはずです。テストしましょう。問題がないなら、 windows もちゃんと起動するか試しておきましょう。もしうまくいかないなら、 セクターの読み取りで生のセクターを読むことで、もしかすると Linux から あなたのデータを読めるかもしれません(ほとんどないかもしれませんが)。ディ スクのセクターにあなたのデータがあるのを確認したら、dd を使ってファイ ルにそれをコピーします。こういうことはテキストデータだけにしておくほう がよいでしょうが。これを復旧するのは、この mini-HOWTO の範囲ではありま せんのであしからず。

それほど単純ではない場合 手動で行う

先に述べた方法が使えない時、たとえば、fdisk の結果を書いた紙がない、あ るいは古いマシンなので動かないなら、この方法でやりましょう。

まず、ディスクに書きこまない( fdisk をする以外に)限りはデータを消すこ とはできませんから、ブロックごとに試してみることができます。つまり、パー ティションの開始番号を知っている必要があるということです。153 がうまく いかないというなら、154 を試します。以下同様。 訳注:fdisk でパーティションを作成する時、作成するパーティションについ て先頭シリンダの番号を入力します。さらに、パーティションの容量は + 記 号に続けて容量と単位を入力、またはそのパーティションの最終シリンダ番号 を直接入力することで指定できます。

やっかいなことになりますが、Linux パーティションのだいたいのサイズを覚 えているなら、うまくやれるでしょう。

gpart

ネットにアクセスできるか、gpart を持っているならよい方法があります。

``gpart 、 PC-type ハードディスクパーティションを推測する''については、 gpart のオンラインマニュアルの最初の行に書いてあります。

``gpart はハードディスク上にあるパーティションを推測してみるものです。 基本パーティションテーブルが失われていたり、上書きされてしまっている、 あるいは、壊されてしまっていると、ディスク上にまだパーティションが存在 するにもかかわらず、オペレーティングシステムはそれにアクセスできなくなっ てしまいます。''この gpart がまさにわれわれが必要としていたものです。

gpart はまだβ版ですが、とてもよくできたツールです。

問題は次のようなことです。どのパーティションの最初のブロックも特徴的な データを持っており、新たに上書きされない限りそのデータを消すことができ ません。このため、たいていの``パーティションにある最初のブロック''は以前 のままでディスク上に残っており、gpart はどこがよい部分であるかをうまく 推測できるよう最善を尽してくれます。実際のところ、gpart がディスクを上 書きすることはありませんから、納得いくまで試してみましょう。

これは hdb に見えた gpart の結果です。

root@charles:/home/jdd > gpart /dev/hdb

Begin scan...

Possible partition(Linux ext2), size(1200Mb), offset(0Mb)

Possible partition(Windows NTFS), size(1200Mb), offset(1200Mb)

Possible partition(Linux ext2), size(1004Mb), offset(2402Mb)

Possible partition(Windows NTFS), size(1600Mb), offset(4102Mb)

End scan.

Checking partitions...

* Warning: partition(OS/2 HPFS, NTFS, QNX or Advanced UNIX) ends beyond disk end .

Partition(Linux ext2 filesystem): primary

Partition(OS/2 HPFS, NTFS, QNX or Advanced UNIX): primary

Partition(Linux ext2 filesystem): primary

Partition(OS/2 HPFS, NTFS, QNX or Advanced UNIX): invalid primary

Ok.

Guessed primary partition table:

Primary partition(1)

type: 131(0x83)(Linux ext2 filesystem)

size: 1200mb #s(2457880) s(63-2457942)

chs: (0/1/1)-(152/254/61)d (0/1/1)-(152/254/61)r

Primary partition(2)

type: 007(0x07)(OS/2 HPFS, NTFS, QNX or Advanced UNIX)

size: 1200mb #s(2457880) s(2457944-4915823)

chs: (152/254/63)-(305/253/60)d (152/254/63)-(305/253/60)r

Primary partition(3)

type: 131(0x83)(Linux ext2 filesystem)

size: 1004mb #s(2056256) s(4919781-6976036)

chs: (306/61/49)-(434/60/47)d (306/61/49)-(434/60/47)r

Primary partition(4)

type: 000(0x00)(unused) size: 0mb #s(0) s(0-0) chs: (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r

ご覧の通り、基本パーティションは修復できていますが、 拡張パーティションの修復にはまだやるべきことが残っています。

訳注:gpart-0.1b のgpart README も参照してください。 現在のところ、gpart は基本パーティションの修復には有効ですが、 論理パーティションの修復には、まだ改良されるべきことが残っています。

Windows 2000(これは恐ろしい体験だった!) をインストールしようとしたと きに作られた DOS パーティションは、``Windows NTFS''とラベルされています。 ``invalid''(よくない)のは、実際のところ拡張パーティションです。

この結果をもとに fdisk を使うことで、パーティションテーブルを再生する ことができます。(もとのパーティションテーブルがすでに失われてしまって いるのであれば、この作業によって失われるものはもうなにも無いのだという ことを覚えておいてください)。

訳注:gpart は Gpart is a small tool which tries to guess what partitions are on a PC type harddisk in case the primary partition table was damaged. 2000年7月現在の最新版は gpart-0.1f.tar.gz などで入手できます。

裕福な人の場合

パーティションマジックは商用の製品で、それほどお安くはないので使ってい る人は少ないですが(フランスでは約 100 ドルほど)、あちこちで高い評価を 得ています。しかし、私は使用していませんので、よくわかりません。パーティ ションの修復も含めて、パーティションに何かをすることができると言われて います。

Ralf 氏のオリジナルの partition-rescue mini HOWTO はパーティションマジッ クを使用するのを前提にしています。あなたが Linux パーティション上に貴 重なデータを置いているが、Linux には初心者であるならこれを使うのはよい 解決方法であると思います。しかし、パーティションマジックにはつい最近出 た新しいバージョンがあるので、マニュアルを読むことをお勧めしたいと思い ます。

著者

この HOWTO の著者は Jean-Daniel Dodin です。 著者宛のメールは、 (jdanield@dodin.net) または (jdanield@linux-france.org)

私の web サイトは次のところです。 または、

Rolf Klausen (E-mail: rolfk@romsdal.vgs.no < ) に感謝します。 Rolf Klausen はpartition-rescue mini HOWTO の旧版を書きました。 私は旧版をほとんど書きかえていますが、彼が最初によい考えを提供しました。

Linux コミュニティのその他のメンバーと Linux をサポートしているすべて の人たち、そして、Linux の文書とプログラムを書く人たちすべて、LDP の著 者の方々、さらに Linux で行うどんなことにも関わりのある人、とりわけ Linus B. Torvalds さん、彼は本当にコミュニティのなかでとても重要な人で す。多くの方々に感謝。

さらに、gpart の著者 Michail Brzitwa <mb@ichabod.han.de> に感謝。

最新版

この mini-HOWTO の最新版は、私の Linux web サイトにあります。 または、

日本語訳について

翻訳に関するご意見は JF プロジェクト <JF@linux.or.jp> 宛に連絡 してください。 校正: Tsutomu Kawashima <kawawa@mail.interq.or.jp> Hiroyuki YAMAMORI <h-yamamo@db3.so-net.ne.jp> Yoshiyuki YAMASHITA <dica@eurus.dti.ne.jp> TAKEI Nobumitsu <takei@webmasters.gr.jp> Taketoshi Sano <kgh12351@nifty.ne.jp> Tsutomu Kawashima <kawawa@mail.interq.or.jp> Hiroshi MIURA <moh@aa.mbn.or.jp> Taketoshi Sano <kgh12351@nifty.ne.jp>