Linuxのファイルシステム

ファイルシステムとは、記憶装置上に格納されたデータやディバイスのリソース等、情報を持つ対象に対して透過的に同じインタフェースでアクセスを可能とするオペレーティングシステムの機能の一つである。

元は文書データやバイナリデータなど2次記憶装置上に配置されたデータを扱う機能を指す語であったが、Unix上でプロセス間通信を容易に行う為のしくみとしてプロセスファイルシステム(/proc)が実装されるようになり、情報への操作を行う為の共通かつ標準的なインタフェースとしての意味を持つようになった。

現在は、オペレーティングシステムが、ディスク上の情報からプロセスの情報、カーネルパラメータの情報に至るまで、様々な情報をユーザに対して提供する際のインタフェースとして用いている。
このように、様々な情報を抽象的に扱うための用途として用いられるファイルシステムは、VFS(Virtual File System)と呼ばれる。

linux_03.gif

キャラクタディバイス

1文字ずつデータを送受信するディバイスに対応している。manではキャラクタ・スペシャル・ディバイスとして紹介される。
端末やプリンタ等をファイルシステムとして扱う場合に利用される。
シーケンシャルにデータアクセスを行い、逆にランダムアクセスには対応しないのが普通である。

ブロックディバイス

データの取り出しをブロック単位で行うディバイスに対応している。
ハードディスクやCD-ROM等をファイルシステムとして扱う場合に利用される。
ランダムアクセスに対応し、バッファを持つのが普通である。

擬似ディバイス

Linuxにおいては、OSの提供するサービスをファイルシステムのインタフェースにより提供するというものである。

設定・調整


ディバイスファイルの種類の確認

コンピュータに接続されたディバイスをファイルとして扱うため、システムディレクトリ「/dev」以下には、接続されたディバイスに対応するディバイスファイルが配置される。
「/dev」以下をコマンド「ls -l」で確認すれば、その種類を判別することが可能である。

# ls -l /dev
合計 0
・・・(略)
crw-rw----. 1 root root    254,   0 2009-12-10 01:22 rtc0
brw-rw----. 1 root disk      8,   0 2009-12-10 01:22 sda
brw-rw----. 1 root disk      8,   1 2009-12-10 01:22 sda1
brw-rw----. 1 root disk      8,   2 2009-12-10 01:22 sda2
・・・(略)

フラグを確認し、一番左が「c」であればキャラクタディバイス、「b」であればブロックディバイスであると判断できる。

マウントされるファイルシステムの確認

ファイルシステムは、ディスクからシステム上に至るまで、様々な情報を既定のフォーマットに従い解釈し、ユーザ側へそれを意識させないよう隠蔽する。
これを紐付ける設定ファイルが、設定ファイル「/etc/fstab」である。

# cat /etc/fstab
/dev/sda3               /                       ext3    defaults        1 1
/dev/sda1               /boot                   ext3    defaults        1 2
/dev/sdb1               /home                   ext3    defaults        1 2
/dev/sda2               swap                    swap    defaults        0 0
/dev/cdrom              /media/cdrom            udf,iso9660  noauto,owner,ro 0 0
/dev/fd0                /media/floppy           auto    noauto,owner,ro 0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0

この設定ファイルは、スペースをディリミタとして6つのカラムで構成され、以下のような意味を持つ。

カラム番号(左から) 意味
1 2次記憶システム上の情報であればディバイスファイル、システム上の情報であればそれを表すラベルを指定する。
2 マウントポイントといい、ファイルシステムとしてアクセスできる入口となるディレクトリを指す。
3 ファイルシステム・フォーマットの種類を指定する。
4 マウントオプションを指定する。複数の場合は、スペース無しカンマをディリミタとして使用する。
5 バックアップ対象であるか否かを判別するために使用する。
6 ブート時にfsckされる対象を表す。0は無視される。

ディバイスファイルは、ディレクトリ「/dev」に配置されるディバイスを特定するファイルである。
なお、ディバイスファイルについては、UUID(Universally Unique Identifier)で指定することも可能である。
UUIDとは、ディバイスを一意に識別するためのIDである。

UUID=9ad9ad22-5923-403b-b933-af4a4640f992 /                       ext3    defaults        1 1
UUID=5c57dab6-fb41-41c3-9e4d-038ea25c9f30 /boot                   ext3    defaults        1 2
UUID=fc6832bd-1025-420f-9b17-d52f95ea8c4f /home                   ext3    defaults        1 2
UUID=ca29919c-a408-41cb-9c07-07b6736d5853 swap                    swap    defaults        0 0

マウントオプションは、ファイルシステム側のサポートが必要となる。

マウントオプション 意味
defaults デフォルトのオプション「rw,suid,dev,exec,auto,nouser,async」を指定する。
async I/Oを非同期で行う。
sync I/Oを同期して行う。
dirsync ディレクトリに対する操作を同期して行う。
suid SUID、SGIDビットを有効にする
nosuid SUID、SGIDビットを無効にする。
exec バイナリプログラムの実行を許可する。
noexec バイナリプログラムの実行を許可する。
atime アクセスされるごとにinodeのアクセス時間を更新する。
noatime アクセス時間を更新しない。
auto コマンド「mount -a」を実行時にマウントされる。
noauto コマンド「mount -a」を実行時にマウントされない。
dev キャラクタディバイス、ブロックディバイスのサポート。
nodev キャラクタディバイス、ブロックディバイスをサポートしない。
mand 強制ロックを許可する。
nomand 強制ロックを許可しない。
user 一般ユーザによるマウントを許可し、アンマウントはマウントを行ったユーザのみに許可する。
owner ディバイスの所有者によるマウントを許可する。
users 全ユーザによるマウントを許可する。
group ユーザがディバイスのグループとマッチした場合のみアクセスを許可する。
nouser 一般ユーザによるマウントを禁止する。
remount 再マウント。マウントオプションのみを変更したい場合等に用いられる。
ro リードオンリーでマウントする。
rw 読み書き可能でマウントする。
_netdev ネットワークが必要なディバイスであることを明示する。
uid=UID 全てのファイルの所有者をUIDのユーザとする。
gid=GID 全てのファイルの所有者をGIDのユーザとする。

システムファイル「/proc/filesystems」

「/proc/filesystems」を用いると、カーネルのサポートしているファイルシステムを確認できる。

# cat /proc/filesystems
nodev   sysfs
nodev   rootfs
nodev   bdev
nodev   proc
nodev   cgroup
nodev   cpuset
nodev   binfmt_misc
nodev   debugfs
・・・(略)

ファイル「/etc/mtab」

指定されたマウントオプションは、ファイル「/etc/mtab」へ記述される。

# cat /etc/mtab
/dev/sda3 / ext3 rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
・・・(略)

システムファイル「/proc/mounts」

指定されたマウントオプションは、システムファイル「/proc/mounts」からも確認可能できる。

# cat /proc/mounts
rootfs / rootfs rw 0 0
/proc /proc proc rw,relatime 0 0
/sys /sys sysfs rw,relatime 0 0

コマンド「mount/umount」

任意のディレクトリに対してファイルシステムをマウントするには、以下のコマンドを実行する。

# mount /dev/sdb2 /media/share

アンマウントには、以下の2つの方法がある。

# mount -o remount /media/share

# umount /media/share

設定ファイル「/etc/fstab」に記述された設定情報を元に、一括してマウントを実行できる。

# mount -a

また逆に、アンマウントすることも可能である。

# umount -a

指定されたマウントオプションは、コマンド「mount」によって確認できる。

# mount
/dev/sda3 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
・・・(略)

コマンド「sync」

ファイルシステムが非同期である場合、データはメモリ上へキャッシュされている。
コマンド「sync」を用いれば、キャッシュ上の情報をディスクへ反映できる。

# sync

マウントオプションの再設定

ディバイスのマウントオプションを変更するには、オプションへremountを与えmountを実施する。
オプション「remount」は他のオプションとは若干毛色が異なり、コマンド自体の動作に影響を与える。

コマンド「mount」「umount」を利用してオプションを指定し直す場合は、ファイルシステムを一度ディバイスから切り離す必要がある。
しかし、オプションで「remount」を指定しmountを実行した場合は、ディバイスから切り離すことなく新たなオプションを指定することが可能となる。

# mount -o remount,rw /dev/sdc1

ファイルシステム・フォーマットの種類


▼ディバイス
  • ext
  Linux用ファイルシステム。
  • ext2
  extを拡張したもの
  • ext3
  ext2へジャーナリング機能を加えたもの
  • ext4
  ext3を拡張したもの
  • iso9660
  CD/DVDのディスクイメージ用フォーマット
  • fuseblk
  NTFS
  • jfs
  IBM製ジャーナリングファイルシステム
  • reiserfs
  Linux用ジャーナリングファイルシステム
  • xfs
  SGI製ジャーナリングファイルシステム
  • udf
  DVDのファイルシステム
  • msdos
  MS-DOS用ファイルシステム(FAT)
  • vfat
  Windows 95/98用ファイルシステム
  • ntfs
  Windows NT/2000以降用ファイルシステム
  • hpfs
  OS/2用ファイルシステム
  • hfs
  MacOS8以降用ファイルシステム
  • smbfs
  samba/Windowsネットワークファイルシステム
  • cifs
  Windows2000以降のネットワークファイルシステム


▼非ディバイス
  • anon_inodefs
  • bdev
  • binfmt_misc
  • cgroup
  • cpuset
  • debugfs
  • devpts
  • fuse
  • fusectl
  • hugetlbfs
  • inotifyfs
  • mqueue
  • pipefs
  • proc
  • ramfs
  • rootfs
  • rpc_pipefs
  • securityfs
  • selinuxfs
  • sockfs
  • sysfs
  • tmpfs
  • usbfs

  • 最終更新:2009-12-26 19:41:41

このWIKIを編集するにはパスワード入力が必要です

認証パスワード