MOUNT(2)

名称
mount, unmount - ファイルシステムをマウントまたはマウント解除する

ライブラリ
libc

書式
<sys/param.h> <sys/mount.h> int mount(const char *type, const char *dir, int flags, void *data) int unmount(const char *dir, int flags)

解説
mount() システムコールは、ファイルシステムオブジェクトをシステムファイルツリーの マウントポイント dir に付けます。 引数 data はマウントされるファイルシステムオブジェクトを記述します。 引数 type は data をどのように解釈するかをカーネルに通知します (後述の type を参照)。 ファイルシステムの内容は、新しいマウントポイント dir を通して利用できるようになります。 マウントが成功すると dir にあるすべてのファイルが覆い隠された状態になり、 ファイルシステムがマウント解除されるまで利用できなくなります。

デフォルトではスーパユーザのみが mount() システムコールを呼び出すことができます。 この制約は sysctl(8) の vfs.usermount 変数を 0 ではない値に設定することで解除することが可能です。

次の flags は、ファイルシステムアクセスに影響のあるデフォルト値を抑制するように 指定できます。

MNT_RDONLY
    ファイルシステムを読取り専用として取り扱います。 スーパユーザでさえこれに書き込むことはできません。 このオプションなしに MNT_UPDATE を指定すると、 読取り専用ファイルシステムが読取り / 書込みにアップグレードされます。

MNT_NOEXEC
    そのファイルシステムからファイルを実行できないようにします。

MNT_NOSUID
    実行するときに、ファイルについての setuid ビットまたは setgid ビットを 尊重しません。 このフラグは、呼び出し側がスーパユーザでないときに、自動的に設定されます。

MNT_NOATIME
    ファイルアクセス時刻の更新を行いません。

MNT_NODEV
    ファイルシステム上の特殊ファイルを解釈しません。 このフラグは、呼び出し側がスーパユーザでないときに、自動的に設定されます。

MNT_SUIDDIR
    SUID ビットが設定されたディレクトリは、新しいファイルの所有者を ディレクトリと同じに設定します。

MNT_SYNCHRONOUS
    ファイルシステムへの入出力はすべて同期的に行われます。

MNT_ASYNC
    ファイルシステムへの入出力はすべて非同期的に行われます。

MNT_FORCE
    ファイルシステムがクリーンでないように見えても、読み書き可でマウントを 強行します。 危険です。

MNT_NOCLUSTERR
    クラスタ読取りを無効にします。

MNT_NOCLUSTERW
    クラスタ書込みを無効にします。

フラグ MNT_UPDATE は、マウントコマンドがすでにマウントされたファイルシステムに 適用されていることを示します。 これによって、ファイルシステムをマウント解除および再マウントする必要なしに、 マウントフラグを変更できます。 ファイルシステムによっては、すべてのフラグの変更を許容しない場合もあります。 たとえば多くのファイルシステムが、 読み書き可から読取り専用への変更を許容しません。

vfs サブシステムは、フラグ MNT_RELOAD によってすでにマウントされているファイルシステムに 関係するデータ構造体を更新します。

type 引数でファイルシステムを指定します。 システム上で既知なファイルシステムのタイプは lsvfs(1) で得ることができます。

data 引数は、マウントするタイプに固有の引数が入った構造体を指すポインタです。 これらの引数構造体についての形式は各ファイルシステムに ついてのマニュアルページに記載されています。 慣習によりファイルシステムのマニュアルページは、 lsvfs(1) によって返されたファイルシステム名に ``mount_'' の接頭辞を付けて 命名されます。 それゆえ、 NFS ファイルシステムは mount_nfs(8) マニュアルページに記述されています。

unmount() システムコールは、ファイルシステムを指定のマウントポイント dir から対応付け解除します。

flags 引数で MNT_FORCE を指定することで、ファイルがアクティブであっても、 ファイルシステムが強制的にマウント解除または 読取り専用 (MNT_UPDATE と MNT_RDONLY も指定されている場合) に される必要があることを示します。 アクティブな特殊デバイスは機能し続けますが、 他のアクティブなファイルへのそれ以降のアクセスは、 たとえファイルシステムが後に再マウントされたとしてもエラーを引き起こします。

MNT_SUIDDIR オプションを機能させるためには、SUIDDIR オプションがカーネル内に 組み込まれていることが必要です。 詳細については mount(8) ページと chmod(2) ページを参照してください。

戻り値

エラー
mount() システムコールは、次のうちの 1 つでも起きたときには処理を失敗します:

[EPERM]
    呼び出し側がスーパユーザでも dir の所有者でもありません。

[ENAMETOOLONG]
    パス名の構成要素が 255 文字を越えているか、 またはパス名全体が 1023 文字を越えています。

[ELOOP]
    パス名を変換するときに検出されたシンボリックリンクが多すぎます。

[ENOENT]
    dir の構成要素が存在しません。

[ENOTDIR]
    name の構成要素がディレクトリでないか、または special のパスの構成要素中にディレクトリ以外のものが含まれています。

[EBUSY]
    別のプロセスが現時点で dir 引数への参照を保持しています。

[EFAULT]
    dir はプロセスに割り当てられたアドレス空間の範囲外を指しています。

次のエラーは、 ufs ファイルシステムのマウントについて発生する可能性があります。

[ENODEV]
    ufs_args の構成要素 fspec が存在しません。

[ENOTBLK]
    fspec 引数はブロックデバイスではありません。

[ENXIO]
    fspec のメジャーデバイス番号が範囲外です (これはハードウェアに 対応するデバイスドライバが存在しないことを示します)。

[EBUSY]
    fspec は既にマウントされています。

[EMFILE]
    マウントテーブル空間が枯渇しました。

[EINVAL]
    ファイルシステムのスーパブロックに 不都合なマジック番号または範囲外のブロックサイズがありました。

[ENOMEM]
    ファイルシステムについてのシリンダグループ情報を読み取るのに十分な メモリがありませんでした。

[EIO]
    スーパブロックまたはシリンダグループの情報を読み取る間に 入出力エラーが発生しました。

[EFAULT]
    fspec がプロセスに割り当てられたアドレス空間の範囲外を指しています。

次のエラーは nfs ファイルシステムマウントについて起きる可能性があります:

[ETIMEDOUT]
    nfs がサーバと接触しようとして時間切れになりました。

[EFAULT]
    nfs_args によって記述された情報の一部が、 プロセスに割り当てられたアドレス空間の範囲外を指しています

unmount() システムコールは、次のエラーの 1 つでも起きたときには処理を失敗します:

[EPERM]
    呼び出し側がスーパユーザでも該当する mount() の呼び出しを実行したユーザでもありません。

[ENOTDIR]
    パスの構成要素中にディレクトリ以外のものが含まれています。

[ENAMETOOLONG]
    パス名の構成要素が 255 文字を越えているか、 またはパス名全体が 1023 文字を越えています。

[ELOOP]
    パス名を変換するときに検出されたシンボリックリンクが多すぎます。

[EINVAL]
    指定されたディレクトリがマウントテーブル内にありません。

[EBUSY]
    プロセスがファイルシステム上にあるファイルへの参照を保持しています。

[EIO]
    キャッシュされたファイルシステム情報を書き込んでいる間に 入出力エラーが起きました。

[EFAULT]
    dir 引数がプロセスに割り当てられたアドレス空間の範囲外を指しています。

ufs マウントは、最大数のファイルシステムが現時点でマウントされている場合にも 処理を失敗します。

関連項目
lsvfs(1), mount(8), umount(8)

バグ
エラーコードには、明瞭なメッセージにするために変更が必要なものがあります。

歴史
mount() 関数と unmount() 関数は AT&T UNIX で登場しました。