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コマンドで利用可能。
またファイルシステムの種類は以下の通り。
| タイプ | 説明 | 
|---|---|
| ext2 | Linuxファイルシステムextの拡張したシステム | 
| ext3 | ext2にジャーナリングシステムを追加したもの | 
| ext4 | ext3の機能拡張をしたもの | 
| ReiserFS | Linux用のジャーナリングシステム | 
| JFS | IBMにより開発されたジャーナリングシステム | 
| XFS | SGIにより開発されたジャーナリングシステム | 
| Btrfs | Linux向け堅牢ファイルシステム | 
| ISO9660 | CD-ROM向けのファイルシステム | 
| UDF | DVDのファイルシステム | 
| F2FS | SSDなどフラッシュメモリ向け | 
| msdos | MS-DOS向けファイルシステム | 
| FAT/FAT32 | フラッシュメモリなどで使われる | 
| NTFS | windows NT/2000向け | 
| hpfs | OS/2のファイルシステム | 
| HFS | MacOS向けのシステム | 
| HFS+ | MacOS8.1以降 | 
| NFS | ネットワークファイルシステム | 
| CIFS | Windows2000以降 | 
| procfs | プロセス情報を扱う仮想ファイルシステム | 
| sysfs | デバイス情報を扱う仮想ファイルシステム | 
| tmpfs | 仮想メモリベースの仮想ファイルシステム | 
| devpts | 疑似端末を制御するための仮想ファイルシステム | 
| usbfs | USBデバイス監視用ファイルシステム | 
| cramfs | 組み込みデバイス向けの圧縮ファイルシステム | 
マウントオプションは以下の通り。
| オプション | 説明 | 
|---|---|
| async | ファイルシステムのすべての入出力を非同期で行う | 
| sync | ファイルシステムのすべての入出力を同期で行う | 
| atime | ファイルへのアクセスごとにinodeのアクセス時刻を更新する | 
| relatime | ファイル更新/アクセスの一定時間後にアクセス時刻を更新する | 
| noatime | inodeのアクセス時刻を更新しない(ディスクアクセス高速化) | 
| auto | -aオプションでmountコマンドを実行したときにマウントする | 
| noauto | -aオプションでmountコマンドを実行したときにマウントしない | 
| defaults | デフォルト(async, auto, dev, exec, nouser, rw, suid) | 
| dev | ファイルシステム上のデバイスファイルを利用できる | 
| group | ユーザのグループがデバイスファイルの所有グループと一致すればマウント許可 | 
| exec | バイナリ実行の許可 | 
| noexec | バイナリ実行の禁止 | 
| suid | SUID, SGIDビットを有効化する | 
| nosuid | SUID,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 したりするために利用できるコマンド。 具体的にはどのプロセスがそのファイルシステムを利用中なのかも調べられる。
fuser4.1.3. ファイルの書き込み動作
ファイルに書き込み処理をしてもすぐには書き込まれず、メモリ上のディスクバッファ領域に書き込まれる。 これはディスクアクセスがメモリアクセスに比べて格段に遅いためである。 そのためデータをまとめてディスクに書き込むことでパフォーマンスを向上させる。
syncコマンド
ディスクバッファ領域にあるデータをディスクに書き込むコマンド。
syncキャッシュの種類
キャッシュにはいくつか種類があり、代表的なものにはバッファキャッシュとページキャッシュがある。
| 種類 | 説明 | 
|---|---|
| バッファキャッシュ | ディスク書き込み終了時にディスクバッファのデータを保存することで、再読出しの際に高速化する | 
| ページキャッシュ | ページ単位で管理されているメモリ上の情報を保持しておくタイプのキャッシュ | 
4.1.4. スワップ領域
スワップ領域はブロックデバイス上の仮想的なメモリ領域のこと。
スワップ領域はシステム構成時に作成するが、後から作成も可能でmkswapコマンドでできる。
mkswapコマンド
スワップ領域を作成するコマンド。
mkswap [オプション] [デバイスファイル名/ファイル名]| オプション | 説明 | 
|---|---|
| -c | スワップ作成前に不良ブロックのチェックを行う | 
| -L ラベル | ラベルの作成 | 
swaponコマンド
スワップ領域を有効にするコマンド。
swapon [オプション] [デバイスファイル名/ファイル名]| オプション | 説明 | 
|---|---|
| -a | /etc/fstab内のスワップ領域すべての有効化 | 
| -s | スワップ領域を表示する | 
swapoffコマンド
スワップ領域を無効にするコマンド
swapoff [オプション] [デバイスファイル名/ファイル名]| オプション | 説明 | 
|---|---|
| -a | /etc/fstab内のスワップ領域すべての無効化 |