Windows から Linux へのロードマップ: 第 6 回 パーティションとファイルシステムを扱う

Linux でディスクとデバイスを使う

IBM e ビジネス・アーキテクトである Chris Walden が、9 回の developerWorks シリーズで読者の運用スキルを Windows 環境から Linux 環境へ移行する道案内をしていきます。今回は Linux の階層ディレクトリ構造について説明し、またデバイスのマウントについて調べます。

Chris Walden, e-business Architect, IBM

Chris Walden は IBM Developer Relations Technical Consulting (dragonslayers としても知られています) の e ビジネス・アーキテクトです。テキサス州オースチン在住で教育、設置使用指導、IBM ビジネス・パートナーへのコンサルティングにあたっています。自他共に認める半 Linux 狂発症途中で、聞く耳持つ人がいれば誰にでも良い知らせを広めています。e ビジネス・アーキテクトとしての仕事以外に彼の地域にある、すべて Linux による基幹サーバーを管理しており、そこでは多種多様なユーザー環境でのファイル、印刷その他のアプリケーション・サービスを扱っています。コンピューター業界でフィールド・サポートから Web アプリケーション開発やコンサルティングまで 10年の経験があります。



2003年 11月 11日

Linux でのファイル操作とストレージ・デバイスの扱いは Windows とは異なります。ファイルと階層ディレクトリ構造があるところまでは同じですが、そこから先は別の考え方をしなければなりません。

リスト 1. ディレクトリ構造
/
|-- bin
|-- boot
|-- dev
|-- etc
|-- mnt
|-- opt
|   |-- IBM
|   |   |-- WebSphereStudio
|   |   `-- db2
|   |-- IBMHttpServer
|-- root
|-- sbin
|-- tmp
|-- usr
|   |-- X11R6
|   |   |-- bin
|   |   |-- include
|   |   |-- lib
|   |   |-- man
|   |   `-- share
|   |-- bin
|   |-- dict
|   |-- doc
|   |-- etc
|   |-- include
|   |-- lib
|   |-- libexec
|   |-- local
|   |   |-- OpenOffice
|   |   |   |-- sbin

ドライブ名はありません!

Linux にはドライブ名はありません。実はこれは非常に便利なのです。デバイスを何台も内蔵した堅牢なマシンを使い、複雑なネットワーク環境に対して Windows システムで作業したことがある人ならば、アルファベットが足りなくなった経験があるでしょう。Linux では一つのファイル構造しかありません。ファイル構造は root(/)で始まり、すべてのローカル・ファイルシステム、すべてのローカル・デバイス、すべてのリモート・ファイルシステムはこの構造のサブディレクトリとして表されるのです。

Linux が最初に起動すると、/etc/fstab file ファイルにある情報に基づいてこのファイル構造を構築します。Windows がハード・ドライブのパーティションや他のストレージ・デバイスにドライブ名を割り当てるのに対して、Linux では root ファイル構造でディレクトリを割り当てます。階層構造は自由に設定可能で、変更も簡単にできます。


マウントせよ!

/proc とは何か?

/proc ファイルシステムは Windows 流の考え方と Linux 流の考え方の違いを示す好例です。/proc は実行中のシステムを仮想表示できるのです。例えば IRQ の設定、メモリー使用、ロードされているデバイス・ドライバ、ネットワークの状態、その他システムに関するありとあらゆるシステム状態が分かります。/proc/kcore と呼ばれるファイルまでありますが、これは使用中のシステムメモリすべて状態の仮想表示です。しかもこうした各ファイルは普通のテキスト・ファイルまたはバイナリ・ファイルとして構文解析できるのです。一部のファイルを手直しすることで、再起動することなく実行中のカーネルの振る舞いを変えることもできます。例えば最初のアクティブ・イーサネット・デバイスの IP 転送をオンにするには次のファイルコマンドを使います。

echo 1 > /proc/sys/net/ipv4/conf/eth0/forwarding

こうしたシステムの一番の利点は、実行中のシステムに対して簡単なスクリプトのテクニックで、非常に深くまで突っ込んだ、強力な設定ができることです。

ファイルシステムにデバイスを追加することをマウントする と言います。Linux は自動的に / (root) ファイルシステムをマウントしますが、これとは別に、核となるカーネル・ブート・ファイルを持った /boot ファイルシステムもあるかもしれません。Linux は特別なファイルシステムもいくつかマウントします。swap space はファイルシステムの一部としては表示されませんが、カーネルが操作します。他の特別なファイルシステム、例えば proc などはファイルシステムの普通の部分として見え、その内容も普通のファイルと同じように扱うことができます。

他のファイルシステム、例えば取り外し可能メディアやリモート・ファイルシステムなどは手動でマウントする必要があります。ファイルシステムをマウントする時にはそのファイルシステムを Linux から正しく参照する方法を知っておかなければなりません。またマウント・ポイントとして使う、空のディレクトリが必要です。取り外し可能メディアに対してはおそらく、Linux がインストールの際に自動的にマウント・ポイントを作ってくれるはずです。Red Hat Linux の例では、cdrom デバイスは /mnt/cdrom ディレクトリにマウントされるように設定されています。つまり CDROM デバイスに CD を入れた時には次のコマンドを入力します。

mount /mnt/cdrom

これで CD がファイルシステムに追加され、誤ってイジェクトされないように CDROM デバイスはロックされます。CD の中身にアクセスするには単純に /mnt/cdrom ディレクトリを使います。CD を使い終わったら次のコマンドでドライブから取り出します。

umount /mnt/cdrom

このロックは一体何のため?

Linux はマルチ・ユーザーなだけでなく、マルチ・セッションでもあることを思い出してください。これは複数のユーザーが全員同時にシステムにログインしており、同時にプロセスを実行し、リソースを使っているかもしれないということです。これは Window でファイル共有をするためにログインするのとは違います。あたかも全ユーザーが、同時に一つのコンソールからシステムを操作しているかのようなことができるのです。Linux では使用中のファイルシステムを適当に解放したりせず、またファイルシステムがアンマウントされ誰もそのファイルシステムを使わなくなるまで CD をロックしておくことで安定性を維持するのです。

/mnt/cdrom ディレクトリは空になり、CDROM デバイスはロックが解除されます。これで安全に CD を取り出すことができます。他の取り外し可能メディアでも方法は同じです (例えばフロッピー・ドライブなら /mnt/floppy です)。

引数無しで mount を実行すると、現在マウントされているファイルシステムが表示されます。


/etc/fstab ファイル

デバイスとそのマウント・ポイントの関連付けは/etc/fstab ファイルで設定されます。このファイルは人が編集することもできますし、管理ツールで維持管理することもできます。/etc/fstab の例を次に示します。

/etc/fstab を理解する
デバイス位置タイプオプションフラグ
/dev/hda5 ext3defaults1 1
/dev/hda2/bootext3exec,dev,duid,rw1 2
/dev/hda6swapswapdefaults0 0
/dev/scd0/mnt/cdromautoro,noauto,exec0 0
none/dev/ptsdevptsid=5,mode=6200 0
none/procprocdefaults0 0
none/dev/shmtmpfsdefaults0 0

各行がマウントすべきファイルシステムを表します。最初の列はマウントすべきデバイスを表します。2 列目はマウント・ポイントで、ファイルシステム中のデバイスの位置です。3 列目はファイルシステムのタイプ、4 列目はそのファイルシステムをどう扱うべきかのオプションを示します。最後の列はそのファイルシステムのフラグです。最初の番号は 1 か 0 で、システムがダンプ (システム・バックアップのオプション) でコピーされるかどうかを表します。2 番目の数字は 0、1、2 のどれかで、起動時にファイルシステムがチェックされる順番を示します。0 は全くチェックされません。1 は最初にチェックされ、root ( / ) ファイルシステムに対して使われます。他のファイルシステムは 2 です。

上のリストにある fstab ファイルでは、root ファイルシステムは 5 番目のパーティションの最初の IDE ドライブにあります。ここは拡張パーティションの最初の論理ドライブです。 (カーネルの起動ファイルのある) /boot ファイルシステムは、2 番目の基本パーティションの最初の IDE ドライブにあります。swap space は 6 番目のパーティションの最初の IDE ハードディスク・ドライブにありますが、これは拡張パーティションの 2 番目の論理ドライブです。他のファイルシステムはデバイスが「none」として示されています。これに関してはすぐ後で説明します。とりあえず物理ドライブに集中しましょう。

すべてがファイルです

Linux ではファイルシステムをファイルのような名前で表します。/dev ディレクトリにあるすべてのファイルは nodes と呼ばれる特別なファイルで、デバイス・ドライバが物理デバイスにリンクします。これでちょっと面白いことができます。例えば CD の ISO イメージを作るに cp (copy) コマンドが使えるのです。

cp /dev/cdrecorder MyCD.iso

CD のファイル構造ではなく、バイナリ・イメージがコピーされるのです。

こうしたファイル中心の手法のおかげで、デバイスに対してより意味のあるエイリアス (別名) を付けることもできるのです。例えば、物理 CDROM デバイスが /dev/hdc の場合がよくありますが、これに対して /dev/cdrom と呼ばれるエイリアスがあるのが普通です。一旦このエイリアスが作られれば、いつでも物理 CDROM デバイスを、覚えやすい /dev/cdrom と呼ぶことができるのです。また、物理構成が異なる場合もあるシステムの全体でスクリプトを統一するのにもエイリアスが役に立ちます。

4 列目にあるオプションはファイルシステムのタイプによって異なります。上の例では / と /boot は「default」オプションでマウントされています。つまり、これらは自動的に非同期 I/O、リード・ライトとしてマウントされるのです。root だけがデバイスをマウント/アンマウントできますが、ユーザーもバイナリを実行して「sticky bit」を使うこともできます (これについては後で説明します)。ファイルシステムはブロック文字デバイスとして扱われます。ただし /mnt/cdrom ではオプションが異なります。自動的にはマウントされず、読み取り専用 (read-only) ファイルシステムとしてマウントされます。ユーザーはこのファイルシステムのスクリプトやプログラムを実行することができます。

ファイルシステムを追加する

/etc/fstab にファイルシステムを追加するには、fstab ファイルに新しい行を追加します。実際的な例として、ある部署が使用しているファイル・リソースを持つ RAID デバイスがあるとしましょう。このデバイスはデータ・ファイルしか持たずオペレーティング・システムとは分離されているので、ハードウェア・トラブルの際にはこのデバイスを別のシステムに簡単に移動できます。RAID は既に設定されており、Linux には /dev/sdc (3 番目の SCSI デバイス) として認識されています。ジャーナル化された ext3 ファイルシステムが最初のパーティションに作られているので、/dev/sdc1 としてアクセスできます。コンピューターが起動した時にこの RAID を自動的にファイルシステムにマウントされるようにしたいと思います。

/etc/fstab に次の行を追加します。

/dev/sdc1 /data ext3 defaults 0 0

これで RAID が / や /boot システムと同じように、起動時にマウントされます。ここで単純にマウント・ポイントとして指定したディレクトリを作ります。

mkdir /data

この空ディレクトリが作られると、ここにファイルシステムをマウントすることができます。

mount /data

これで RAID が /data と関連付けられました。システムが再起動すると、/data が自動的にマウントされます。


パーティション

Linux でのパーティションは Windows の場合と基本的に同じです。パーティションを作ったり操作したりするには fdisk コンソール・コマンドを使います。fdisk を実行するにはデバイスを指定する必要があります。どんなデバイスがあるかを見るには fdisk -l コマンドを使います。

リスト 2. fdisk を使う
[root@cmw-t30 root]# fdisk -l Disk /dev/hda: 240 heads,
63 sectors, 7752 cylinders Units = cylinders of 15120 *
512 bytes Device Boot Start End Blocks Id System
/dev/hda1 1 8 60448+ 8e Linux LVM /dev/hda2 9 15 52920
83 Linux /dev/hda3 * 16 1403 10493280 c Win95 FAT32
(LBA) /dev/hda4 1404 7751 47990880 f Win95 Ext'd (LBA)
/dev/hda5 1404 5565 31464688+ 83 Linux /dev/hda6 5566
5635 529168+ 82 Linux swap /dev/hda7 5636 7751 15996928+
b Win95 FAT32

上のリストはラップトップで生成されたものなので、サーバーとして典型的とは言い難い構成を示しています。いくつかパーティションを持った IDE ハード・ドライブが一つあります。他にもデバイスがあれば同じようにリストに載ってきます。例えば 2 番目の IDE ハード・ドライブであれば /dev/hdb のようにリストに載ります。

デバイスに対して fdisk を再度実行すると短いプロンプトが表示されます。

リスト 3. デバイスに対する fdisk
[root@cmw-t30 root]# fdisk /dev/hda
The number of cylinders for this disk is set to 7752.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)
Command (m for help):

「m」を入力するとコマンドのメニューが見られます。現在のパーティション・テーブルを表示するには「p」を入力します。パーティションを作成することも削除することも、既存のパーティションのタイプを変更することもできます。「l」は使用可能なパーティション・タイプの全リストを表示します。パーティション・テーブルへの変更を書き込むには「w」を入力し、fdisk を終了または保存せずに閉じる場合には「q」を入力します。変更の種類によって即座に反映されるものもあれば、再起動しないと反映されないものもあります。

Linux でのパーティションの規則は Windows の場合と同じです。4 つの基本パーティションが許されますが、そのどれも拡張パーティションにすることもできます。


ファイルシステム・タイプ

Linux ではカーネルが知っているファイルシステム・タイプならどれでも扱うことができます。かなりの数のファイルシステム・タイプがデフォルトでコンパイルされてきますし、新しいものを追加することもできます。面白いものとして次のようなものがあります。

  • ext2 : 標準の Linux ファイルシステム
  • ext3 : 標準の Linux ファイルシステムにジャーナリングを追加したもの
  • vfat : マイクロソフトの Fat32 ファイルシステム
  • jfs : IBM のジャーナル・ファイルシステム
  • reiserfs : 普及している、別のジャーナル・ファイルシステム

ジャーナリングが時間とデータを節約

ジャーナル・ファイルシステムを使うと不測の電源断からデータを保護することができます。あるボリュームがディスマウントされずに電源が切られると、作業が終了せず、ファイルが中途半端な状態に置かれてしまう可能性があります。こうしたことが起きた場合、典型的なファイルシステムではボリュームを完全チェックする必要がありますが、大きなボリュームでは長い時間がかかってしまいます。ジャーナル・ファイルシステムでは、一定時間 (例えば 5 秒) 内のディスクへの書き込み毎にトランザクションを記録するのです。ボリュームが不完全な状態でアンマウントされると、ファイルシステムは単純に最後の正常状態にまで戻ります。バックアップから戻すのに 20 分間かかるボリュームが数秒で元に戻るのです!


パーティションをフォーマットする

作られたパーティションは正しいバージョンの mkfs コマンドでフォーマットします。ファイルシステムにはそれぞれ固有の mkfs (例えば mkfs.ext2mkfs.ext3 など) があります。これらのヘルパー・スクリプトでパーティションを指定するだけでファイルシステムを作ることができます。いくつかの例を次に挙げます。

リスト 4. mkfs を使う
# Create an ext2 file system on the third # parition of
the first IDE hard drive mkfs.ext2 /dev/hda3 # Create an
ext3 file system on the first # partition of the 2nd
SCSI hard drivemkfs.ext2 mkfs.ext3 /dev/sdb1 # Create a
jfs file system in an extended # partition on the first
IDE hard drive. mkfs.jfs /dev/hda5

いろいろ高度なパラメーターを使ってパーティションのフォーマットすることもできますが、一般的にはデフォルトで構いません。パーティションがフォーマットできれば、/ ファイルシステムにマウントすることができます。ファイルシステムを再フォーマットするにはアンマウントしなければなりません。


他のファイルシステム・ツール

他の便利なツールも見てみましょう。

コンソール・ツール

ディスクやファイルシステムの状態を見るためのツールがいくつかあります。

df
df は「disk free」を表し、マウントされているファイルシステムのディスク容量と空き容量をレポートします。便利なスイッチとして次のようなものがあります。

ディスク容量を調べる

  • df -h : 人が読める形式で。バイト単位ではなく、分かりやすい k、M、G の単位でファイルサイズを表示します。
  • df -l : 表示をローカルのファイル・システムに限る。デフォルトではリモートのファイルシステムも表示されます。

du
du は「disk usage」を表し、指定したファイルと各ディレクトリ (またはディレクトリ引数) が使用しているディスク容量をレポートします。便利なスイッチとして次のようなものがあります。

ディスク使用量を確認する

  • du -a : ディレクトリだけでなく、すべてのファイルを含めて表示します。
  • du -h : 人が読める形式で。バイト単位ではなく、分かりやすい k、M、G の単位でファイルサイズを表示します。
  • du -c : すべての引数が処理された後、すべての引数の総合計を出力します。指定のファイルまたはディレクトリ一式の合計ディスク使用量を調べるのに使えます。
  • du -s : 各引数の合計だけを表示します。

fsck
これはファイルシステムをチェック、修復するプログラムで、Windows の chkdsk に相当します。mkfs と同様、ファイルシステムのタイプによって異なるバージョンがあります。fsck はファイルシステムが正常にアンマウントされなかった場合を除けばほとんど必要ありませんが、実行する場合にはマウントされていないボリューム上で実行する必要があります。man fsckinfo fsck には詳細が説明されており、この記事の終わりにある参考文献でも説明しています。

Webmin

Webmin にはファイルシステムやパーティションを操作するいくつかのツールがあります。

図 1. Webmin のパーティション・ツール
Webmin のパーティション・ツール

ハードウェアとローカル・ディスクのパーティション

各ディスクとパーティションは現在の使用量と共に表示されます。詳細を見るにはファイルシステムの上でマウスをクリックします。マウントされていないパーティションのパーティション・タイプを変更でき、またファイルシステムをフォーマットすることもできます。

システム、ディスク、ネットワーク・ファイルシステム

/etc/fstab にリストアップされているファイルシステムをマウント、アンマウントすることができます。一般的なファイルシステム・タイプにはエントリーを作成するためのウィザードがあります。認識されないタイプもここでマウント、アンマウントすることができますが、/etc/fstab で手動編集する必要があります。大部分のサーバー・ファイルシステムは充分ここで操作することができます。


全体はパーティションの和

パーティションやファイルシステムの扱いに関して Windows と Linux に類似点がたくさんありますが、ドライブ名を使うシステムから完全に階層ツリー構造のシステムに慣れきるにはしばらく時間がかかるかもしれません。毎度繰り返しますが、上で説明したような機能や/etc ディレクトリにある設定ファイルを操作するための堅牢なコンソール・ツールが用意されています。また Webmin のようなブラウザ・ベースのフロントエンドにも便利なツールがあります。

参考文献

  • Windows から Linux へのロードマップシリーズの他の記事も参考にしてください。 (developerWorks , 2003 年 11 月)
  • Linux Administration Made Easyは古くなっていますが、Linux の一般的な手順や手法は変わっていないので、今でも有益な資料です。
  • Multi Disk System Tuning HOWTOでは Linux で複数のディスク、パーティションを最高に利用する方法を説明しています。
  • Linux System Administrator's Guideは初心者向けの、Linux システムを使ったシステム管理入門です。
  • IBM developerWorks の「デュアル・ブート Linux」では、いかに簡単に Windows と Linux を同じマシンにインストールできるかを説明しています。
  • IBM developerWorks の記事、「最大スワップ・ページ」が Linux サーバーのスワップ・パフォーマンスを向上するのに役立つでしょう。
  • IBM developerWorks の「Linux で CD を焼く」を読めば Linux で簡単に CD が焼けます。
  • ファイル・パーミッションとセキュリティについては Linux Documentation Project の Introduction to Linux、Chapter 3でとり上げられています。
  • developerWorks Linux ゾーンでは、Linux に関する豊富な資料をご覧いただけます。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=230451
ArticleTitle=Windows から Linux へのロードマップ: 第 6 回 パーティションとファイルシステムを扱う
publish-date=11112003