スポンサーリンク

MOUNT(2) FreeBSD システムコールマニュアル MOUNT(2)

名称

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

ライブラリ

標準 C ライブラリ (libc, −lc)

書式

#include <sys/param.h>
#include <sys/mount.h>

int

mount(const char *type, const char *dir, int flags, void *data);

int

unmount(const char *dir, int flags);

#include <sys/uio.h>

int

nmount(struct iovec *iov, u_int niov, int flags);

解説

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

nmount() システムコールは、マウントオプション (ファイルシステムタイプ名 称、マウントされるデバイス、マウントポイントなど) が、 niov 個の要素を持 つ iov 配列によって名前と値の組の配列として渡されることを除いては、 mount() と同様に動作します。以下のオプションは全てのファイルシステムで要 求されます:

fstype

ファイルシステムタイプ名称 (例えば ‘‘procfs’’)

fspath

マウントポイントのパス名 (例えば ‘‘/proc’’)

ファイルシステムタイプに依存して、その他のオプションが認識あるいは要求さ れます。例えば、殆どのディスクベースのファイルシステムは、上記のオプショ ンに加えてスペシャルデバイスのパス名を格納する ‘‘from’’ オプションを要求 します。

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

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

       MNT_RDONLY

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

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

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

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

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

MNT_SNAPSHOT
ファイルシステムのスナップショットを作成します。これは現 状では UFS2 ファイルシステムのみをサポートします。詳細に ついては mksnap_ffs(8) を参照して下さい。

MNT_SUIDDIR
SUID ビットが設定されたディレクトリは、新しいファイルの 所有者をディレクトリと同じに設定します。このフラグに効果 を持たせるためには、カーネルが SUIDDIR オプションを付け てコンパイルされていることが必要です。より多くの情報のた め mount(8) および chmod(2) のマニュアルページを参照して ください。

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

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

MNT_FORCE
ファイルシステムがクリーンでないように見えても、読み書き 可でマウントを強行します。危険です。 MNT_UPDATE および MNT_RDONLY と一緒に指定することで、たとえ幾つかのファイ ルが書込みのためにオープンされていたとしても、ファイルシ ステムは強制的に読込み専用にダウングレードされます。

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

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

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

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

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

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

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

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

MNT_BYFSID フラグが指定されている場合には、 dir は ‘‘FSID:val0:val1’’ と してエンコードされたファイルシステム ID に置き換えられるべきです。ここで val0 および val1fsid_t val[] 配列の内容の 10 進数表現です。明示された ファイルシステム ID を持っているファイルシステムは、マウント解除されま す。

戻り値

成功して終了したときには値 0 を返します。そうでない場合、値 -1 が返され、 グローバル変数 errno が設定されてエラーを示します。

エラー

mount() および nmount() システムコールは、次のうちの 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() の呼び出 しを実行したユーザでもありません。

[ENAMETOOLONG]
パス名の長さが 1023 文字を越えていました。

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

[ENOENT]
MNT_BYFSID を使用して指定されたファイルシステム ID が マウントテーブルの中に見つかりませんでした。

[EINVAL]
MNT_BYFSID を使用して指定されたファイルシステム ID が デコードされることができませんでした。

[EINVAL]
指定されたファイルシステムがルートファイルシステムでは ありません。

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

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

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

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

関連項目

lsvfs(1), mksnap_ffs(8), mount(8), umount(8)

バグ

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

歴史

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

FreeBSD 10.0 February 23, 2005 FreeBSD 10.0

スポンサーリンク