Category Archives: 11.マニュアル

fstabのマニュアル


アニメ『あまんちゅ!』

あまさんになって海賊をたくさん獲るのかなあ、とタイトルから勝手に想像してたんですが、スキューバダイビングが楽しいアニメなんですね。牡蠣が好きなので、牡蠣をたくさん獲って焼いて食べるシーンがあるに違いないと誤解してました。トン汁はありましたけど。まだ数話しか見てないのでこれから期待します。
主人公の二人は対照的です。おとなしい双葉と、明るい光。光は歩きながら笛を吹いていて、時々、というか、いつも目がまんまるになって、どこかの上のぽにょみたいになってます。光の行動が面白いので、2期まで一気に見ようと思っていますが、双葉が光のペースに巻き込まれて、どういう成長をするのか楽しみです。

さて、私はブログタイトルにあるようにLinuxの達人を目指していますが、LinuxだけでなくWindowsも学習しています。Windowsや他のOSで新しいことを知ると、似たような機能は、きっとLinuxにもあるに違いないと考えて、夢中になって本を漁ります。夢中になって調べる、さらに調べたいことが増える、を繰り返すことで学習意欲が継続しているようです。
最近だと「LastAccessTime更新されるされない切り替え」で初めて知った(ように思えた)アクセス時刻の更新disableは、当然Linuxにもありました。やはり夢中になって本を読み返してたのですが、昔読んだLPICのレベル1の参考書に堂々と書いてあるじゃないですか。基本も基本fstabでした。使わないと忘れてしまうもんですねえ。まあ、忘れるということは、訓練不足って言えるかもしれません。調べるのと訓練は別ものですから。

忘れてしまった場合でも、すぐに資料が見られるのがLinuxです。Linuxはカーネルを指すので、UNIXというべきでしょうか。使っているコンピュータの一番近くにドキュメントが存在するので、私の周囲の本の干潟に埋まっている技術本を一冊一冊掘り起こす必要がありません。

一番近くのドキュメントとはmanです。man fstabを見ていきましょう。

takk@deb9:~/tmp$ man fstab
FSTAB(5)                   Linux Programmer's Manual                  FSTAB(5)

名前
       fstab - ファイルシステムの静的な情報

書式
       #include <fstab.h>

説明
       このファイル fstab には様々なファイルシステムに関する情報が記述されてい
       る。 fstab ファイルはプログラムによって読みこまれるだけで書き込まれるこ
       とはない。 このファイルを適切に作り、保守するのはシステム管理者の責任で
       ある。 それぞれのファイルシステムは一行単位で記述され、  各行のフィール
       ドは  TAB 文字もしくは空白 (spaces) で区切られる。 '#' で始まる行はコメ
       ントである。 fsck(8), mount(8),  umount(8)  などのプログラムは、  fstab
       ファイルを先頭から順に読み込んで処理するため、 fstab に記述されるレコー
       ド (ファイルシステム) の順序は重要である。

/etc/fstabで設定する項目を確認するのに、ヘッダを見るのが手っ取り早いですね。
fstab.hに書いてある構造体のメンバを見てみましょう。

takk@deb9:~/tmp$ cat /usr/include/fstab.h | grep ^struct -A10
struct fstab
  {
    char *fs_spec;			/* block special device name */
    char *fs_file;			/* file system path prefix */
    char *fs_vfstype;			/* File system type, ufs, nfs */
    char *fs_mntops;			/* Mount options ala -o */
    const char *fs_type;		/* FSTAB_* from fs_mntops */
    int	fs_freq;			/* dump frequency, in days */
    int	fs_passno;			/* pass number on parallel dump */
  };

takk@deb9:~/tmp$ 
       最初のフィールド (fs_spec) は、マウントしたいブロックスペシャルデバイス
       もしくはリモートファイルシステムを記述する。

       通常のマウントでは、これはマウントされるブロックスペシャルデバイスノー
       ド  (またはそれへのリンク)  である。これは  mknod(8)   によって作成され
       る。たとえば  `/dev/cdrom' や `/dev/sdb7' といったものになる。 NFS マウ
       ントの場合は <host>:<dir> という書式になる。 たとえば  `knuth.aeb.nl:/'
       などである。 procfs の場合は `proc' を使う。

       デバイスを明示する代わりに、  マウントされる (ext2 または xfs) ファイル
       システムを UUID とボリュームラベルで指定することもできる (e2label(8) ま
       たは   xfs_admin(8)  を参照のこと)。  この場合は  LABEL=<label>  または
       UUID=<uuid> のように書く。  たとえば  `LABEL=Boot'  や  `UUID=3e6be9de‐
       -8139-11d1-9106-a43f08d823a6' のようになる。 こうするとシステムはより強
       固になる。 SCSI  ディスクを追加・削除してディスクデバイスの名前が変わっ
       ても、 ファイルシステムのボリュームラベルは変化しないからである。

私の環境でもUUIDで指定されていました。

takk@deb9:~/tmp$ cat /etc/fstab | grep UUID
# device; this may be used with UUID= as a more robust way to name devices
UUID=21bc353e-c445-4e84-a389-c629ab59d569 /               ext4    errors=remount-ro 0       1
UUID=87cac40b-6204-44c3-8694-c9f62b1d1a34 none            swap    sw              0       0
takk@deb9:~/tmp$ 

以降のフィールドについても、上記の設定値を見ながら、manを読んでいくことにします。

UUIDの次、2番目のフィールドには、/が指定されています。これは、マウントポイントですね。

       2 番目のフィールド (fs_file) は、ファイルシステムのマウントポイントを記
       述する。 スワップパーティションの場合、 このフィールドは `none'  と明記
       する必要がある。  マウントポイントに含まれている空白は、`\040' のように
       エスケープできる。

3番目のフィールドは、ext4となっていましたが、説明を読むと、

       3  番目のフィールド  (fs_vfstype)  は、ファイルシステムのタイプを記述す
       る。  Linux  では  adfs,  affs, autofs, coda, coherent, cramfs, devpts,
       efs, ext2, ext3, hfs, hpfs, iso9660, jfs,  minix,  msdos,  ncpfs,  nfs,
       ntfs,  proc,  qnx4,  reiserfs,  romfs,  smbfs,  sysv,  tmpfs, udf, ufs,
       umsdos, vfat, xenix, xfs,  更にそれ以外の多くのファイルシステムタイプを
       サポートする。  詳細は mount(8) を参照すること。 稼働中のカーネルが現在
       サポートしているファイルシステムについては、 /proc/filesystems を見よ。
       エントリ  swap はスワップに使われるファイルまたはパーティションを表す。
       swapon(8) を参照。 エントリ ignore により、その行は無視される。  これは
       現在使用されていないディスクパーティションを表示するのに役立つ。

ん?
manの記述にext4がありません。mount(8)を参照とあるので、そちらを見てみます。

takk@deb9:~/tmp$ man mount

?省略?

       -t vfstype
              -t    に続く引き数はファイルシステムタイプを指定するのに用いられ
              る。  現在サポートされているファイルシステムのタイプには、以下の
              ものが含まれる。  adfs,  affs,  autofs,  coda, coherent, cramfs,
              devpts, efs, ext, ext2, ext3, hfs, hpfs,  iso9660,  jfs,  minix,
              msdos,  ncpfs,  nfs,  ntfs,  proc, qnx4, ramfs, reiserfs, romfs,
              smbfs, sysv, tmpfs, udf, ufs, umsdos, usbfs, vfat,  xenix,  xfs,
              xiafs.   coherent,  sysv,  xenix  の 3 つは等価であり、 xenix と
              coherent は将来削除される ? 代りに sysv を用いること。  カーネル
              のバージョン  2.1.21  以降では、  ext  および xiafs というタイプ
              は、もはや存在しない。 usbfs は、以前は usbdevfs  として知られて
              いた。

どういうことでしょう。ext4がありません。原文で確認してみます。

takk@deb9:~/tmp$ (LANG=C;man mount)

?省略?

       -t, --types fstype
              The argument following the -t is used to indicate the filesystem
              type.  The filesystem types which are currently supported depend
              on the running  kernel.   See  /proc/filesystems  and  /lib/mod-
              ules/$(uname  -r)/kernel/fs  for a complete list of the filesys-
              tems.  The most common are ext2, ext3, ext4, xfs,  btrfs,  vfat,
              sysfs, proc, nfs and cifs.

英語だと書いてありました。まあ、日本語の方でも読んでいけば、/proc/filesystemsにたどり着きますので、対応しているファイルシステムの確認は、コマンドを叩けば良いです。

takk@deb9:~/tmp$ cat /proc/filesystems

~省略~

	ext3
	ext2
	ext4

~省略~

次の4番目のフィールドには、errors=remount-roでした。

       4  番目のフィールド  (fs_mntops)  は、 ファイルシステム毎のマウントオプ
       ションを記述する。

       これはカンマで区切られたオプションのリストである。 少なくともマウントの
       タイプを書く必要がある。  加えてファイルシステムのタイプに応じた 適切な
       オプションが書かれていることが多い。 NFS 以外のファイルシステムで使用可
       能なオプションについては、 mount(8) を参照のこと。 nfs 固有のオプション
       については nfs(5) を参照のこと。 どのようなファイルシステムにも適用でき
       るオプションは、  ``noauto'' ("mount -a"  を実行したとき (ブート時など)
       にマウントしない), ``user'' (ユーザにマウントを許可する), ``owner'' (デ
       バイスの所有者にマウントを許可する),  ``comment'' (例えば、fstab 管理プ
       ログラムで使用するため) である。 ``owner'' と ``comment'' は Linux 独自
       のオプションである。 詳細は mount(8) を参照のこと。

error=について説明はありませんでした。mountに書いてあるのかもしれません。別の機会に見てみます。

半分以上man fstabを載せたので、最後まで載せておきます。

       5  番目のフィールド (fs_freq) は、これらのファイルシステムを dump(8) コ
       マンドが  ダンプする必要があるかを決定するために用いられる。  5  番目の
       フィールドがなければ、 0 が戻り値となり、 dump はそのファイルシステムを
       ダンプする必要が無いとみなす。

       6 番目のフィールド (fs_passno) は fsck(8) プログラムが用い、 ブート時に
       ファイルシステムのチェックを実行する順序を   決定するために参照される。
       ルートファイルシステムは fs_passno を 1 と明記する必要があり、 その他の
       パーティションは、 fs_passno を 2 とする必要がある。 1 つのドライブ中の
       ファイルシステムは順番にチェックされる。 しかし、異なるドライブのファイ
       ルシステムは   ハードウェアの並列性を役立たせる為に  同時にチェックされ
       る。 6 番目のフィールドが存在しないか  0  である場合には  0  値が返り、
       fsck はそのファイルシステムをチェックする必要がないとみなす。

       fstab  ファイルからレコードを読む正しい方法は、 getmntent(3) ルーチンを
       用いることである。

ファイル
       /etc/fstab

関連項目
       getmntent(3), mount(8), swapon(8), fs(5) nfs(5)

履歴
       この fstab ファイルフォーマットの原型は 4.0BSD で導入された。

Linux 2.2                        15 June 1999                         FSTAB(5)

次回は、マウントオプションがどのようなものがあるか確認してから、アクセス時刻を更新しない設定を試みます。