連載
» 2008年06月30日 00時00分 公開

実践でも役立つLPICドリル(3):ファイルシステムの管理と保守 (2/4)

[大竹龍史,ナレッジデザイン]

今回のディストリビューション: Fedora 8

問題を解く鍵 【4】〜【6】

【4】主なファイルシステムの作成方法を把握しておく

■ハードディスクにファイルシステムを作成する方法

 ディスクパーティションの中にファイルシステムを作成するには次のコマンドを使用します。ファイルシステムの種類ごとにコマンドが用意されています。

mkfs mkfs.ext2 mkfs.ext3 mkfs.ntfs mkfs.vfat
mkfs.msdos mkfs.cramfs mkfs.reiserfs mkfs.jfs mkfs.xfs

 mkfsは各ファイルシステムのmkfsへのフロントエンドです。

  -t オプションで指定したファイルシステムタイプに対応するmkfs.ファイルシステムタイプという名前のコマンドを、コマンド検索パスから探して実行します。例えば、 mkfs -t ext2 を実行すると mkfs.ext2が呼び出されます。

(例1)ext2ファイルシステムを作成する

   # mkfs -t ext2 /dev/sda1   または   # mke2fs /dev/sda1

(例2)ext3ファイルシステムを作成する

   # mkfs -t ext3 /dev/sda2   または   # mke2fs -j /dev/sda2

(例3)vfatファイルシステムを作成する

   # mkfs -t vfat /dev/sda3

(例4)reiserfsファイルシステムを作成する

   # mkfs -t reiserfs /dev/sda4   または、   # mkreiserfs /dev/sda4

(例5)jfsファイルシステムを作成する

   # mkfs -t jfs /dev/sda5

(例6)xfsファイルシステムを作成する

   # mkfs -t xfs /dev/sda6


■CD-ROMやDVDのファイルシステムを作成する方法

 CD-ROMのファイルシステムの規格としてISO9660があります。ISO9660はDVDでも使えます。また、ISO9660の拡張規格として、Rock Ridge、Jolietがあります。ISO9660に代わる新しい規格としては、UDFがあります。

各規格の特徴

ISO9660

CD-ROMファイルシステムの標準化案High Sierra Formatを基に定められた規格。ファイル名の文字数は8文字以下、拡張子3文字以下、大文字/小文字の区別なしなど、制限が多い

Rock Ridge

UNIX系OSのための拡張規格。ISO9660の上位互換。大文字/小文字の区別あり、ファイル名の文字数255文字まで。UNIX(POSIX)ファイルシステムと同じく、UID/GID、パーミッション、シンボリックリンク、ブロック/キャラクタデバイスをサポート

Joliet

マイクロソフトによる拡張規格。ISO9660の上位互換。文字コードは Unicodeベースの規格であるUCS-2。ファイル名の文字数64文字まで

UDF

Universal Disk Format。ISO9660に代わる光ディスクの標準ファイルシステムとしてOSTA(Optical Storage Technology Association)により規格化された。DVD、CD-ROMに対応し、フロッピーディスクの方式と似たパケット単位での書き込みが可能なので、ほかのリムーバブルメディアにも対応できる。ファイル名の文字数は255文字まで。128TB(2^40バイト)の容量まで対応


(注)LinuxカーネルのisofsモジュールはRock Ridge拡張に加えて、Joliet拡張もサポートしています。


 CD-ROMやDVDのISO9660ファイルシステムを作成するにはgenisoimageコマンドを実行します。なお、genisoimageはmkisofs から派生した新しいプログラムです。以下の例ではgenisoimageをmkisofsに置き換えても、そのまま実行できます。

(例)カレントディレクトリ以下に作成した階層構造を、親ディレクトリの下にmy-fs.isoというファイルにISOイメージとして作成する

   genisoimage -J -R -o ../my-fs.iso .

オプション  
-J MS Windowsからも読めるように、ISO9660にJoliet拡張を追加する
-R UNIX(POSIX)ファイルシステムに対応したRock Ridge拡張を追加する
-o 出力先ファイル名を指定する

 作成したISOイメージmy-fs.isoをCD-ROMに焼きます。(以下は8倍速で、デバイス/dev/sr0に書き込む例です。ほとんどの場合、デバイス名は“cdrecord -scanbus”で確認できます)。

(例) cdrecord -v speed=8 dev=/dev/sr0 my-fs.iso

【5】ファイルシステムのマウントの意味と、主なマウントオプションを把握しておく

 ファイルシステムはマウントポイントのディレクトリにマウントすることで、ルートから派生する木に接続され、アクセスできるようになります。

図2 /dev/sda1に作られたファイルシステムのルートを/mntディレクトリにマウントする 図2 /dev/sda1に作られたファイルシステムのルートを/mntディレクトリにマウントする

 マウントはmountコマンドで行い、マウントを取り外すアンマウントはumountコマンドで行います。

(例)/dev/sda1に作られたファイルシステムのルートを/mntディレクトリにマウントする

 # mount /dev/sda1 /mnt

(例)/mntにマウントされたファイルシステムをアンマウントする

# umount /mnt

■mountコマンドの主なオプション

-t マウントするファイルシステムのタイプは-tオプションで指定できます。

(例)# mount -t ext3 /dev/sda1 /mnt/sda1

 -tを指定しなかった場合、mountコマンドはblkidライブラリによってファイルシステムタイプを推測し、マウントします。

(注)blkidライブラリはデバイスのファイルシステムタイプなどを識別するライブラリです。mountコマンドやfsckコマンドから利用されます。man libblkid 参照。


 -a /etc/fstabに記述されたファイルシステムをすべてマウントします。

(例)# mount -a

 デバイスあるいはマウントポイントだけを指定した場合、/etc/fstabを参照して該当するファイルシステムをマウントします。

(例)# mount /home

■-oで指定するオプション

-o remount すでにマウントされているファイルシステムを、再度マウントし直します
-o rw read-write(読み書き可能)でマウントします

(例)read-onlyでマウントされたルートファイルシステム/dev/hdaをread-writeでマウントし直す。

# mount -o remount,rw /dev/hda1 /

 マウント情報を保持する/etc/mtabを更新できずにエラーが出る場合は-nオプションを付けて、/etc/mtabに書き込みを行わずにマウントします。

(例)# mount -n -o remount,rw /dev/hda1 /
-o loop 通常ファイルに格納されたファイルシステムをマウントするときにloopデバイスを使用するためのオプションです。ISOイメージファイル、フロッピーイメージファイル、仮想OS用のファイルシステムが格納されたファイルなどをマウントするときに使用します。

(例)# mount -o loop fs-image.iso /mnt

 カーネルがサポートしているファイルシステムタイプは/proc/filesystemsにあります。このファイル中にあるタイプに対応するファイルシステムモジュールがカーネルに静的あるいは動的に組み込まれています。

 このファイルには分散ファイルシステムや疑似ファイルシステムのタイプも書かれているので、次のようにするとハードディスクやCD-ROM/DVDなどの物理デバイス(ブロックデバイス)に作られるファイルシステムだけを表示できます。

(例)# grep -v nodev /proc/filesystems

 LinuxではMS Windows やSolaris 10など、ほかのOSのファイルシステムもサポートしています。複数のOSをインストールしたマルチブートのシステムや、ほかのOSのディスクを外部ディスクとして接続するなどした場合、Linuxからマウントしてアクセスできます。

(例)MS WindowsのNTFSをマウントする

 # mount -t ntfs /dev/sda8 /mnt/ntfs

 今回の記事の対象としたLinuxディストリビューションFedora 8ではNTFSへのアクセスにFUSE(Filesystem in Userspace)を利用します。FUSEはカーネルモジュールfuse.ko、ライブラリlibfuse.so、ユーティリティから構成され、非特権プロセスがマウントしてアクセスする仕組みを提供します。

 上記コマンドの実行により/sbin/mount.ntfsが呼び出され、mount.ntfsはファイルシステムタイプfuseblkとしてカーネルにmountリクエストを発行し、 NTFSへのアクセスはカーネルモジュールfuse.koにより行われます。

(例)SolarisのUFSファイルシステムをread-onlyでマウントする

 # mount -r -t ufs -o ufstype=sunx86 /dev/sda8 /mnt/testd

 Solarisの場合は1つのfdiskパーティションの中にSolarisの複数のパーティションが作られます。

 以下の例では、拡張パーティションsda4の中に論理パーティションsda5、sda6、sda7が作られ、Solarisパーティションはsda3の中にs0 -> sda8、s1 -> sda9、s2 -> sda10と3つ作られています。s1のファイルシステムをマウントする場合はデバイス名としてsda8を指定します。

# dmesg | grep sda
sda: sda1 sda2 sda3 sda4 < sda5 sda6 sda7 >
sda3: < solaris: [s0] sda8 [s1] sda9 [s2] sda10 >

【6】ファイルシステムの検査と修復方法を把握しておく

 fsckコマンドによりファイルシステムの整合性検査と修復ができます。次のようなfsckコマンドが提供されています。

fsck e2fsck dosfsck
fsck.cramfs fsck.ext2 fsck.ext3
fsck.msdos fsck.vfat fsck.reiserfs
fsck.jfs fsck.xfs  

(注)e2fsck、fsck.ext2、fsck.ext3は実体は同じプログラムです。dosfsck、fsck.msdos、fsck.vfatは実体は同じプログラムです。


 fsckは各ファイルシステムのfsckへのフロントエンドです。-t オプションで指定したファイルシステムタイプに対応するfsck.ファイルシステムタイプという名前のコマンドを、コマンド検索パスから探して実行します。

(例)fsck -t ext2 /dev/sda1

とすると、

fsck.ext2 /dev/sda1

が実行される

 -tオプションを指定しなかった場合、mountコマンドと同様にblkidライブラリによってファイルシステムタイプを推測します。ファイルシステムタイプが不明の場合は、ext2としてチェックを行います。

 デバイスの指定をしなかった場合は、/etc/fstabに記述されたファイルシステムのチェックを行います。

 EXT2/EXT3用のfsckプログラムであるe2fsckは5つの段階(pass)を順次実行することによりファイルシステムの整合性を検査、修復します。

Pass 1:Checking inodes、blocks、and sizes

 すべてのinodeについて、mode(パーミッション)の値が正当か、size(ファイルサイズ)とblock(使用しているブロック数)の値が正しいか、データブロックが複数のinodeによって参照されていないか、チェックします。

Pass 2:Checking directory structure

 すべてのディレクトリについて、そのデータ構造が正しいか(ディレクトリエントリが使用中のinodeを参照しているか、最初のエントリが「.」で2番目のエントリが「..」かなど)をチェックします。

Pass 3:Checking directory connectivity

 すべてのディレクトリがファイルシステムの木に接続されているかどうかをチェックします。ファイルシステムの木に接続されていないディレクトリを見つけるとlost+foundの下に置くかどうかを尋ねます。

Pass 4:Checking reference counts

 各inodeの参照カウント(リンク数)をチェックします。実際の参照カウントと異なる場合は修正するかどうか尋ねます。参照カウントが1以上にもかかわらず、どこからも参照されていないinodeを見つけるとlost+foundの下に置くかどうかを尋ねます。

Pass 5:Checking group summary information

 各ブロックグループのinodeビットマップとブロックビットマップをチェックします。

■主なオプション

-t ファイルシステムタイプの指定
-b スーパーブロックバックアップ(b:superblock backup)
指定したスーパーブロックバックアップを使ってfsckを実行します。オリジナルのスーパーブロック(ブロック番号1)が壊れたときに利用することができます。バックアップは各ブロックグループの先頭に置かれます。mke2fsで初期化時にそのブロック番号が表示されます
-f (f:force)。スーパーブロック中のファイルシステム状態フラッグがcleanのときも強制的にPass1〜5のチェックを行います。デフォルトでは、状態フラッグがcleanのときはPass1〜5のチェックは行いません
-p (p:preen)。軽微なエラー(参照カウントの相違など)は尋ねることなく自動修正します。それ以外のエラーがあった場合は尋ねることなく、修正はせずにそのまま終了します。-aオプションは-pと同じで、後方互換性のために残されています
-n (n:no)。fsckの質問に対して、すべてnoと答えます。ファイルシステムを修正せず、どのようなエラーがあるか調べるときに使います
-y (y:yes)。fsckの質問に対して、すべてyesと答えます。ファイルシステムのエラーはすべて整合性を保つ操作によって修正されます。その結果として不整合の原因となっているファイルが消されることがあります

 -p、-n、-yのいずれのオプションも付けない場合、fsckは検出したすべてのエラーについてどう対処するか尋ねてきます。

 e2fsckが実行結果として返す主な返り値には次の値があります。

0 - エラーなし
1 - ファイルシステムのエラーが修正された
2 - ファイルシステムのエラーが修正された
修正されたファイルシステムはルートファイルシステムであり、システムをリブートしなければならない
4 - ファイルシステムのエラーが修正されないまま残っている
8 - デバイス指定の間違いや/etc/fstabの記述ミスなど、操作対象についてのエラー

■システム起動時のfsck

 システム起動時にはランコントロールスクリプトrc.sysinitの中でfsckはpreenモードで実行され、/etc/fstabに登録されたファイルシステムをチェックします。その結果、fsckの返り値に従い、ランコントロールスクリプトは次のような処理を行います。

0、1 - システムはそのまま立ち上がる
2、3(1+2)- システムは自動的にリブートする
4以上 - シングルユーザーモードでsuloginコマンドが実行され、rootのパスワードが要求される。パスワードを入力すればログインできるが、ルートファイルシステムはカーネルがinitrdによってread-onlyで/(ルート)にマウントしたままになっている

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。