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 にあるすべてのファイルが覆い隠された状態になり、 ファイルシステムがマウント解除されるまで利用できなくなります。

次の 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]
    呼び出し側がスーパユーザではありません。

[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 によって記述された情報の一部が、 プロセスに割り当てられたアドレス空間の範囲外を指しています

次のエラーは mfs ファイルシステムについて起きる可能性があります。

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

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

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

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

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

unmount() 関数は、次のエラーの 1 つでも起きたときには処理を失敗します。

[EPERM]
    呼び出し側がスーパユーザではありません。

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

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

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

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

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

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

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

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

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

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

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