ファイルシステムの管理と保守:実践でも役立つLPICドリル(3)(2/4 ページ)
本連載は、Linux 認定試験 LPICに対応しています。一般的なLinuxユーザーレベルのトピックは省略し、システム管理とサーバ管理の内容を取り上げています。また、LPIC対策だけでなく、関連するトピックについて系統的な理解を問う問題も出題しています。連載の特徴は、対象となるプログラムのバージョンを可能な限り明記していること、比較的新しくまとまった解説がまだ少ないトピック、重要だが理解しにくいトピックを優先して取り上げていることです。問題を解き、その解説を読むことにより実践でLinuxを活用できる力を身に付けます。
■今回のディストリビューション: 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に置き換えても、そのまま実行できます。
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”で確認できます)。
【5】ファイルシステムのマウントの意味と、主なマウントオプションを把握しておく
ファイルシステムはマウントポイントのディレクトリにマウントすることで、ルートから派生する木に接続され、アクセスできるようになります。
マウントはmountコマンドで行い、マウントを取り外すアンマウントはumountコマンドで行います。
# mount /dev/sda1 /mnt
# umount /mnt
■mountコマンドの主なオプション
-t | マウントするファイルシステムのタイプは-tオプションで指定できます。 (例)# mount -t ext3 /dev/sda1 /mnt/sda1 |
---|
-tを指定しなかった場合、mountコマンドはblkidライブラリによってファイルシステムタイプを推測し、マウントします。
(注)blkidライブラリはデバイスのファイルシステムタイプなどを識別するライブラリです。mountコマンドやfsckコマンドから利用されます。man libblkid 参照。
-a /etc/fstabに記述されたファイルシステムをすべてマウントします。
デバイスあるいはマウントポイントだけを指定した場合、/etc/fstabを参照して該当するファイルシステムをマウントします。
■-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などの物理デバイス(ブロックデバイス)に作られるファイルシステムだけを表示できます。
LinuxではMS Windows やSolaris 10など、ほかのOSのファイルシステムもサポートしています。複数のOSをインストールしたマルチブートのシステムや、ほかのOSのディスクを外部ディスクとして接続するなどした場合、Linuxからマウントしてアクセスできます。
# 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により行われます。
# 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.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.