4.1. ファイルシステムの操作

ファイルシステムはハードディスクやフロッピーディスクなどの記憶媒体にファイル保存し管理する仕組みのこと。
ファイルシステムはOSごとに異なる

VFS

VFS(仮想ファイルシステム)はファイルシステムとユーザプログラムの中間にありファイルシステムの差異を吸収する仕組み。
このシステムによりユーザプログラムはファイルシステムの違いを気にせずに統一して扱える。

4.1.1. ファイルシステムの情報

システムで利用するファイルシステムは/etc/fstabに記載される。
書式は以下の通り。

/dev/sda1 /boot ext2 default 0 2
# デバイスファイル名/ラベル マウントポイント ファイルシステムの種類 マウントオプション dumpコマンドの対象 ブート時にfsckがチェックする順序

デバイスファイル名はUUIDで識別されるケースもある。
またUUIDはblkidコマンドや/dev/disk/by-uuidファイルで確認可能。
UUIDの変更はtune2fsコマンド、作成はuuidgenコマンドで利用可能。

またファイルシステムの種類は以下の通り。

タイプ説明
ext2Linuxファイルシステムextの拡張したシステム
ext3ext2にジャーナリングシステムを追加したもの
ext4ext3の機能拡張をしたもの
ReiserFSLinux用のジャーナリングシステム
JFSIBMにより開発されたジャーナリングシステム
XFSSGIにより開発されたジャーナリングシステム
BtrfsLinux向け堅牢ファイルシステム
ISO9660CD-ROM向けのファイルシステム
UDFDVDのファイルシステム
F2FSSSDなどフラッシュメモリ向け
msdosMS-DOS向けファイルシステム
FAT/FAT32フラッシュメモリなどで使われる
NTFSwindows NT/2000向け
hpfsOS/2のファイルシステム
HFSMacOS向けのシステム
HFS+MacOS8.1以降
NFSネットワークファイルシステム
CIFSWindows2000以降
procfsプロセス情報を扱う仮想ファイルシステム
sysfsデバイス情報を扱う仮想ファイルシステム
tmpfs仮想メモリベースの仮想ファイルシステム
devpts疑似端末を制御するための仮想ファイルシステム
usbfsUSBデバイス監視用ファイルシステム
cramfs組み込みデバイス向けの圧縮ファイルシステム

マウントオプションは以下の通り。

オプション説明
asyncファイルシステムのすべての入出力を非同期で行う
syncファイルシステムのすべての入出力を同期で行う
atimeファイルへのアクセスごとにinodeのアクセス時刻を更新する
relatimeファイル更新/アクセスの一定時間後にアクセス時刻を更新する
noatimeinodeのアクセス時刻を更新しない(ディスクアクセス高速化)
auto-aオプションでmountコマンドを実行したときにマウントする
noauto-aオプションでmountコマンドを実行したときにマウントしない
defaultsデフォルト(async, auto, dev, exec, nouser, rw, suid)
devファイルシステム上のデバイスファイルを利用できる
groupユーザのグループがデバイスファイルの所有グループと一致すればマウント許可
execバイナリ実行の許可
noexecバイナリ実行の禁止
suidSUID, SGIDビットを有効化する
nosuidSUID,SGIDビットの無効化
ro読み出し専用のマウント
rw読み書きを許可してマウント
uid=UIDすべてのファイル所有者を指定したUIDのユーザにする
gid=GIDすべてのファイルの所有グループを指定したGIDのグループにする
user一般ユーザのマウントを許可、マウントしたユーザのみがアンマウントできる
users一般ユーザのマウントを許可、マウントしたユーザ以外もアンマウントができる
nouser一般ユーザのマウントを禁止
ownerデバイスファイルの所有者によりマウントを許可する

なおカーネルがサポートしているファイルシステムは/proc/filesystemsで確認が可能。

また現時点でどのファイルシステムがマウントされているか、またどのようなマウントオプションが使われているかは/etc/mtabで確認可能。
なお/etc/mtabは直接編集してはならない。間違って編集した場合は/proc/mountsを利用し復旧が可能。 また/proc/mountsにも同様の情報がある。

4.1.2. マウントとアンマウント

ファイルシステムを利用するためには任意のディレクトリにマウントポイントとしてマウントする必要がある
ファイルシステムのマウントにはmountコマンドを使用する。

mountコマンド

ファイルシステムのマウント、マウントされたデバイスの確認ができるコマンド。

mount [オプション]

mount /dev/sda1 /data # /dataをマウントポイントとしてマウントする
オプション説明
-a/etc/fstabで指定されているファイルシステムをマウントする
-f/etc/mtabの情報を書き換えるだけでマウントなし
-o オプションマウントオプションの指定(remount: 再マウント, noexec:バイナリ実行の不許可, nosuid:SUID,SGIDの無視, loop: イメージファイルのマウント)
-n/etc/mtabのマウント情報を書き込まない
-r読み取り専用でマウントする
-t タイプファイルシステムの種類を指定する
-w読み書き可能でマウントする

unmountコマンド

ファイルシステムをアンマウントするコマンド。

unmount [オプション] [デバイスファイル名/マウントポイント]
オプション説明
-a/etc/mtabで指定されているシステムすべてアンマウントする
-t タイプ指定した種類のファイルシステムをアンマウントする

fuserコマンド

指定のファイルを利用しているプロセスの一覧を得たり、そのプロセスをまとめて kill したりするために利用できるコマンド。 具体的にはどのプロセスがそのファイルシステムを利用中なのかも調べられる。

fuser

4.1.3. ファイルの書き込み動作

ファイルに書き込み処理をしてもすぐには書き込まれず、メモリ上のディスクバッファ領域に書き込まれる。 これはディスクアクセスがメモリアクセスに比べて格段に遅いためである。 そのためデータをまとめてディスクに書き込むことでパフォーマンスを向上させる。

syncコマンド

ディスクバッファ領域にあるデータをディスクに書き込むコマンド。

sync

キャッシュの種類

キャッシュにはいくつか種類があり、代表的なものにはバッファキャッシュページキャッシュがある。

種類説明
バッファキャッシュディスク書き込み終了時にディスクバッファのデータを保存することで、再読出しの際に高速化する
ページキャッシュページ単位で管理されているメモリ上の情報を保持しておくタイプのキャッシュ

4.1.4. スワップ領域

スワップ領域はブロックデバイス上の仮想的なメモリ領域のこと。 スワップ領域はシステム構成時に作成するが、後から作成も可能でmkswapコマンドでできる。

mkswapコマンド

スワップ領域を作成するコマンド。

mkswap [オプション] [デバイスファイル名/ファイル名]
オプション説明
-cスワップ作成前に不良ブロックのチェックを行う
-L ラベルラベルの作成

swaponコマンド

スワップ領域を有効にするコマンド。

swapon [オプション] [デバイスファイル名/ファイル名]
オプション説明
-a/etc/fstab内のスワップ領域すべての有効化
-sスワップ領域を表示する

swapoffコマンド

スワップ領域を無効にするコマンド

swapoff [オプション] [デバイスファイル名/ファイル名]
オプション説明
-a/etc/fstab内のスワップ領域すべての無効化