Unix-system-calls-mount

提供:Dev Guides
移動先:案内検索

[top]#

[[File:]]

[[File:]]

|Web |This Site

  • 初心者向けのUnix *
  • 高度なUnix *

選択した読書

Copyright©2014 by finddevguides

  Home     References     Discussion Forums     About TP  

mount()-Unix、Linuxシステムコール

[[File:]] image :http://www.finddevguides.com/images/next.gif [next] image:http://www.finddevguides.com/add- this.gif [AddThisソーシャルブックマークボタン]

広告

NAME

mount、umount-ファイルシステムのマウントとアンマウント

概要

#include <sys/mount.h> int mount(const char* source, const char *target, const char *filesystemtype, unsigned long mountflags, const void *data); int umount(const char *target); int umount2(const char *target, int flags);

説明

*mount* ()は、_source_(多くの場合デバイス名ですが、ディレクトリ名またはダミーにすることもできます)で指定されたファイルシステムを_target_で指定されたディレクトリにアタッチします。
*umount* ()および *umount2* ()は、_target_にマウントされた(最上位の)ファイルシステムの添付ファイルを削除します。

ファイルシステムをマウントおよびアンマウントするには、適切な特権(Linux: CAP_SYS_ADMIN 機能)が必要です。

Linux 2.4以降では、複数のマウントポイントで単一のファイルシステムを表示でき、同じマウントポイントに複数のマウントをスタックできます。

カーネルがサポートする_filesystemtype_引数の値は、_/proc/filesystems_にリストされています(「minix」、「ext2」、「msdos」、「proc」、「nfs」、「iso9660」など)。 適切なモジュールがロードされると、さらにタイプが利用可能になる場合があります。

_mountflags_引数には、上位16ビットにマジック番号0xC0ED( MS_MGC_VAL )があります(これは2.4より前のカーネルバージョンでは必須でしたが、指定された場合は不要で無視されます)。 linux/fs.h>(libc4およびlibc5の場合、およびglibc2の<sys/mount.h>の下位16ビット):

Tag

説明

*MS_BIND*

(Linux 2.4以降)バインドマウントを実行し、ファイルシステム内の別のポイントでファイルまたはディレクトリサブツリーを表示します。 バインドマウントは、ファイルシステムの境界を越え、 chroot (2)の刑務所にまたがることがあります。 filesystemtype _、 mountflags_、および_data_引数は無視されます。

*MS_DIRSYNC* (Linux 2.5.19以降)

このファイルシステムのディレクトリを同期的に変更します。 (このプロパティは、個々のディレクトリまたはサブツリーに対して chattr (8)を使用して取得できます。)

*MS_MANDLOCK*

このファイルシステム内のファイルの強制ロックを許可します。 ( fcntl (2)で説明されているように、ファイルごとに強制ロックを有効にする必要があります。)

*MS_MOVE*

サブツリーを移動します。 source_は既存のマウントポイントを指定し、_target_は新しい場所を指定します。 移動はアトミックです。サブツリーはマウント解除されません。 _filesystemtype _、 mountflags_、および_data_引数は無視されます。

*MS_NOATIME*

このファイルシステム上の(すべてのタイプの)ファイルのアクセス時間を更新しないでください。

*MS_NODEV*

このファイルシステム上のデバイス(特殊ファイル)へのアクセスを許可しないでください。

*MS_NODIRATIME*

このファイルシステム上のディレクトリのアクセス時間を更新しないでください。

*MS_NOEXEC*

このファイルシステムからプログラムの実行を許可しないでください。

*MS_NOSUID*

このファイルシステムからプログラムを実行するときは、set-user-IDおよびset-group-IDビットを尊重しないでください。

*MS_RDONLY*

ファイルシステムを読み取り専用でマウントします。

*MS_REMOUNT*

既存のマウントを再マウントします。 これにより、ファイルシステムをアンマウントおよび再マウントせずに、既存のマウントの_mountflags_および_data_を変更できます。 _source_と_target_は、最初の mount ()呼び出しで指定された値と同じでなければなりません。 _filesystemtype_は無視されます。

次の_mountflags_を変更できます: MS_RDONLYMS_SYNCHRONOUSMS_MANDLOCK 。カーネル2.6.16より前では、次も変更できます。 MS_NOATIME および MS_NODIRATIME 。さらに、カーネル2.4より前では、 MS_NOSUIDMS_NODEVMS_NOEXEC も変更できます。

*MS_SYNCHRONOUS*

このファイルシステムへの書き込みを同期的に行います( open (2)への O_SYNC フラグが、このファイルシステムへのすべてのファイルオープンに対して指定されているように)。

Linux 2.4以降、 MS_NODEVMS_NOEXEC 、および MS_NOSUID フラグは、マウントポイントごとに設定可能です。 カーネル2.6.16以降では、 MS_NOATIME および MS_NODIRATIME もマウントポイントごとに設定可能です。

_data_引数は、さまざまなファイルシステムによって解釈されます。 通常、このファイルシステムで認識されるコンマ区切りオプションの文字列です。 各ファイルシステムタイプで利用可能なオプションの詳細については、 mount (8)を参照してください。

Linux 2.1.116は umount2 ()システムコールを追加しました。これは、 umount ()と同様に、ターゲットをアンマウントしますが、操作の動作を制御する追加の_flags_を許可します。

*MNT_FORCE* (Linux 2.1.116以降)

ビジー状態でも強制的にアンマウントします。 (NFSマウントのみ。)

*MNT_DETACH* (Linux 2.4.11以降)

遅延アンマウントを実行します。マウントポイントを新しいアクセスで使用できないようにし、マウントポイントがビジーでなくなったときに実際にアンマウントを実行します。

*MNT_EXPIRE* (Linux 2.6.8以降)

マウントポイントを期限切れとしてマークします。 マウントポイントが現在使用されていない場合、このフラグを指定した umount2 ()の最初の呼び出しはエラー EAGAIN で失敗しますが、マウントポイントに有効期限切れのマークを付けます。 マウントポイントは、どのプロセスからもアクセスされない限り、期限切れのままです。 MNT_EXPIRE を指定する2回目の umount2 ()呼び出しは、期限切れのマウントポイントをアンマウントします。 このフラグは、 MNT_FORCE または MNT_DETACH と一緒に指定することはできません。

返り値

成功すると、ゼロが返されます。 エラーの場合、-1が返され、_errno_が適切に設定されます。

エラー

以下に示すエラー値は、ファイルシステムタイプに依存しないエラーの結果です。 各ファイルシステムタイプには、独自の特別なエラーと独自の特別な動作があります。 詳細については、カーネルのソースコードを参照してください。

Tag

説明

*EACCES*

パスのコンポーネントは検索できませんでした。 ( path_resolution (2)も参照してください。)または、 MS_RDONLY フラグを指定せずに読み取り専用ファイルシステムをマウントしようとしました。 または、ブロックデバイス_source_は、 MS_NODEV オプションでマウントされたファイルシステムにあります。

*EAGAIN*
*MNT_EXPIRE* を指定する *umount2* ()の呼び出しは、使用されていないファイルシステムを期限切れとしてマークしました。
*EBUSY*

_source_はすでにマウントされています。 または、書き込み用にファイルを開いたままにするため、読み取り専用に再マウントすることはできません。 または、_target_はまだビジーであるため、_target_にマウントできません(タスクの作業ディレクトリ、別のデバイスのマウントポイント、開いているファイルなど)。 または、ビジー状態であるため、アンマウントできませんでした。

*EFAULT*

ポインター引数の1つがユーザーアドレス空間の外側を指しています。

*EINVAL*

_source_に無効なスーパーブロックがありました。 または、再マウント( MS_REMOUNT )が試行されましたが、_source_は_target_にまだマウントされていませんでした。 または、移動( MS_MOVE )が試行されましたが、_source_がマウントポイントではなかったか、「/」でした。 または、アンマウントが試行されましたが、_target_はマウントポイントではありませんでした。 または、 MNT_EXPIREMNT_DETACH または MNT_FORCEumount2 ()が呼び出されました。

*ELOOP*

パス名の解決中に検出されたリンクが多すぎます。 または、_target_が_source_の子孫であるときに、移動が試行されました。

*EMFILE*

(ブロックデバイスが必要ない場合:)ダミーデバイスのテーブルがいっぱいです。

*ENAMETOOLONG*

パス名がMAXPATHLENよりも長かった。

*ENODEV*

カーネルで_filesystemtype_が構成されていません。

*ENOENT*

パス名が空か、存在しないコンポーネントがありました。

*ENOMEM*

カーネルは、ファイル名またはデータをコピーするための空きページを割り当てることができませんでした。

*ENOTBLK*

_source_はブロックデバイスではありません(デバイスが必要でした)。

*ENOTDIR*

2番目の引数、または最初の引数のプレフィックスはディレクトリではありません。

*ENXIO*

ブロックデバイス_source_のメジャー番号が範囲外です。

*EPERM*

呼び出し元に必要な特権がありません。

準拠

これらの関数はLinux固有であり、移植性を目的としたプログラムでは使用しないでください。

歴史

元の umount ()関数は_umount(device)_として呼び出され、ブロックデバイス以外で呼び出されるとENOTBLKを返します。 Linux 0.98p4では、匿名デバイスをサポートするために、_umount(dir)_呼び出しが追加されました。 Linux 2.3.99-pre7では、_umount(device)_の呼び出しが削除され、_umount(dir)_のみが残りました(デバイスを複数の場所にマウントできるようになったため、デバイスの指定では不十分です)。

元のMS_SYNCフラグは、別のMS_SYNCが<mman.h>に追加されたときに1.1.69でMS_SYNCHRONOUSに名前が変更されました。

Linux 2.4より前では、 MS_NOSUID でマウントされたファイルシステムでset-user-IDまたはset-group-IDプログラムを実行しようとすると、 EPERM で失敗しました。 Linux 2.4以降では、この場合、set-user-IDおよびset-group-IDビットは黙って無視されます。

関連項目

[[File:]] image :http://www.finddevguides.com/images/next.gif [next] [[File:]]

広告

  
Advertisements