日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
FS(5) FreeBSD ファイルフォーマットマニュアル FS(5) 名称 fs, inode -- ファイルシステムボリュームの形式 書式 #include <sys/param.h> #include <ufs/ffs/fs.h> #include <sys/types.h> #include <sys/lock.h> #include <sys/extattr.h> #include <sys/acl.h> #include <ufs/ufs/quota.h> #include <ufs/ufs/dinode.h> #include <ufs/ufs/extattr.h> 解説 ファイル <fs.h> と <inode.h> は、ランダムアクセスデバイス (ディスク) の ファイルシステムオブジェクトの基本的な形式を作成し、管理するために使用さ れる、いくつかの構造体、定義された変数とマクロを宣言しています。 ファイルシステムを構成するブロックサイズとブロックの数は、ファイルシステ ムのパラメータです。BBLOCK で始まり BBSIZE まで続きセクタは、disklabel と いくつかのハードウェアのプライマリとセカンダリのブートストラッププログラ ムのために使用されます。 実際のファイルシステムは、サイズ SBLOCKSIZE であるスーパブロックがあるセ クタ SBLOCK で始まります。次の構造体は、スーパブロックを記述し、ファイル <ufs/ffs/fs.h> にあります: /* * FFS ファイルシステムのためのスーパブロック */ struct fs { int32_t fs_firstfield; /* コア内のスーパブロックのために */ int32_t fs_unused_1; /* 使用される歴史的なファイルシステムの リンクリスト */ int32_t fs_sblkno; /* filesys のスーパブロックの オフセット */ int32_t fs_cblkno; /* filesys のシリンダブロックの オフセット */ int32_t fs_iblkno; /* filesys の inode ブロックの オフセット */ int32_t fs_dblkno; /* cg 後の最初のデータのオフセット */ int32_t fs_old_cgoffset; /* シリンダのシリンダグループの オフセット */ int32_t fs_old_cgmask; /* mod fs_ntrak の計算のために 使用される */ int32_t fs_old_time; /* 最後に書き込まれた時刻 */ int32_t fs_old_size; /* filesys のブロックの数 */ int32_t fs_old_dsize; /* filesys のデータブロックの数 */ int32_t fs_ncg; /* シリンダグループの数 */ int32_t fs_bsize; /* filesys の基本的なブロックのサイズ */ int32_t fs_fsize; /* filesys のフラグメントブロックの サイズ */ int32_t fs_frag; /* filesys の 1 つのブロックの フラグメントの数 */ /* これらは, 設定パラメータです */ int32_t fs_minfree; /* 空きブロックの最小のパーセンテージ */ int32_t fs_old_rotdelay; /* 最適な次のブロックのための ms の数 */ int32_t fs_old_rps; /* 1 秒ごとのディスクの回転 */ /* 他のフィールドから, これらのフィールドを計算することができます */ int32_t fs_bmask; /* ``blkoff'' ブロックオフセット の計算 */ int32_t fs_fmask; /* ``fragoff'' フラグメントオフセット の計算 */ int32_t fs_bshift; /* ``lblkno'' 論理ブロック番号の計算 */ int32_t fs_fshift; /* ``numfrags'' フラグメント数の計算 */ /* これらは, 設定パラメータです */ int32_t fs_maxcontig; /* 連続するブロックの最大数 */ int32_t fs_maxbpg; /* シリンダグループごとのブロックの 最大数 */ /* 他のフィールドから, これらのフィールドを計算することができます */ int32_t fs_fragshift; /* シフトするフラグメントへのブロック */ int32_t fs_fsbtodb; /* fsbtodb と dbtofsb のシフト定数 */ int32_t fs_sbsize; /* スーパブロックの実際のサイズ */ int32_t fs_spare1[2]; /* 古い fs_csmask */ /* 古い fs_csshift */ int32_t fs_nindir; /* NINDIR の値 */ int32_t fs_inopb; /* INOPB の値 */ int32_t fs_old_nspf; /* NSPF の値 */ /* 別の設定パラメータ */ int32_t fs_optim; /* 最適化の選択, 下記参照 */ int32_t fs_old_npsect; /* 予備を含んでいるセクタ/トラック の数 */ int32_t fs_old_interleave; /* ハードウェアセクタのインタリーブ */ int32_t fs_old_trackskew; /* トラックごとのセクタ 0 スキュー */ int32_t fs_id[2]; /* ユニークなファイルシステム ID */ /* シリンダグループの数とサイズにより決められるサイズ */ int32_t fs_old_csaddr; /* シリンダグループ要約領域のブロック アドレス */ int32_t fs_cssize; /* シリンダグループ要約領域のサイズ */ int32_t fs_cgsize; /* シリンダグループのサイズ */ int32_t fs_spare2; /* 古い fs_ntrak */ int32_t fs_old_nsect; /* トラックごとのセクタ */ int32_t fs_old_spc; /* シリンダごとのセクタ */ int32_t fs_old_ncyl; /* ファイルシステムのシリンダ */ int32_t fs_old_cpg; /* グループごとのシリンダ */ int32_t fs_ipg; /* グループごとの inode */ int32_t fs_fpg; /* グループごとのブロック数 * fs_frag */ /* このデータは, クラッシュ後に再計算されなければなりません */ struct csum fs_old_cstotal; /* シリンダ要約情報 */ /* これらのフィールドは, マウント時にクリアされます */ int8_t fs_fmod; /* スーパブロック修正フラグ */ int8_t fs_clean; /* ファイルシステムがクリーン, フラグ */ int8_t fs_ronly; /* 読み込み専用でマウントされた, フラグ */ int8_t fs_old_flags; /* 古い FS_ フラグ */ u_char fs_fsmnt[MAXMNTLEN]; /* マウントされた名前 */ u_char fs_volname[MAXVOLLEN]; /* ボリューム名 */ uint64_t fs_swuid; /* システム全体の uid */ int32_t fs_pad; /* fs_swuid の整列のため */ /* これらのフィールドは, 現在のブロックの割り付け情報を保持しています */ int32_t fs_cgrotor; /* 最後に検索された cg */ void *fs_ocsp[NOCSPTRS]; /* 詰め物; fs_cs バッファのリスト でした */ uint8_t *fs_contigdirs; /* 連続的に割り付けされた dir の数 */ struct csum *fs_csp; /* fs_cs のための cg 要約情報バッファ */ int32_t *fs_maxcluster; /* 各シリンダグループの最大のクラスタ */ u_int *fs_active; /* fs を追跡するスナップショットによって 使用されます */ int32_t fs_old_cpc; /* postbl のサイクルごとのシリンダ */ int32_t fs_maxbsize; /* 許可された最大のブロックファクタ */ int64_t fs_unrefs; /* 参照されない inode の数 */ int64_t fs_sparecon64[16]; /* 古いローテーションブロックリストの ヘッド */ int64_t fs_sblockloc; /* 標準のスーパブロックのバイト オフセット */ struct csum_total fs_cstotal; /* シリンダ要約情報 */ ufs_time_t fs_time; /* 最後に書き込まれた時刻 */ int64_t fs_size; /* fs のブロックの数 */ int64_t fs_dsize; /* fs のデータブロックの数 */ ufs2_daddr_t fs_csaddr; /* シリンダグループ要約領域の ブロックアドレス */ int64_t fs_pendingblocks; /* 解放中のブロック */ int32_t fs_pendinginodes; /* 解放中の inode */ int32_t fs_snapinum[FSMAXSNAP]; /* スナップショット inode 数の リスト */ int32_t fs_avgfilesize; /* 期待される平均ファイルサイズ */ int32_t fs_avgfpdir; /* 期待されるディレクトリごとの ファイル数 */ int32_t fs_save_cgsize; /* fs_bsize を使用する実際の cg サイズ を保存 */ int32_t fs_sparecon32[26]; /* 将来の定数のために予約 */ int32_t fs_flags; /* 下記の FS_ フラグ参照 */ int32_t fs_contigsumsize; /* クラスタ要約配列のサイズ */ int32_t fs_maxsymlinklen; /* 内部のシンボリックリンクの最大長 */ int32_t fs_old_inodefmt; /* ディスク上の inode の形式 */ uint64_t fs_maxfilesize; /* 最大の表示可能なファイルサイズ */ int64_t fs_qbmask; /* 64 ビットサイズで使用するための ~fs_bmask */ int64_t fs_qfmask; /* 64 ビットサイズで使用するための ~fs_fmask */ int32_t fs_state; /* fs_clean フィールドを有効にします */ int32_t fs_old_postblformat; /* 位置のレイアウトテーブルの形式 */ int32_t fs_old_nrpos; /* 回転の位置の数 */ int32_t fs_spare5[2]; /* 古い fs_postbloff */ /* 古い fs_rotbloff */ int32_t fs_magic; /* マジックナンバ */ }; /* * ファイルシステム識別 */ #define FS_UFS1_MAGIC 0x011954 /* UFS1 ファーストファイルシステムの マジックナンバ */ #define FS_UFS2_MAGIC 0x19540119 /* UFS2 ファーストファイルシステムの マジックナンバ */ #define FS_OKAY 0x7c269d38 /* スーパブロックのチェックサム */ #define FS_42INODEFMT -1 /* 4.2BSD inode 形式 */ #define FS_44INODEFMT 2 /* 4.4BSD inode 形式 */ /* * 最適化のための選択 */ #define FS_OPTTIME 0 /* 最小割り付け時間 */ #define FS_OPTSPACE 1 /* 最小ディスクフラグメンテーション */ 各ディスクドライブは、いくつかのファイルシステムを含んでいます。ファイル システムは、多くのシリンダグループから成ます。各シリンダグループには、 inode とデータがあります。 ファイルシステムは、シリンダグループを順番に記述する、スーパブロックに よって記述されます。スーパブロックは、重要なデータであり、壊滅的な損失か ら保護するために、各シリンダグループに複製されます。これは、ファイルシス テムの作成時に行われ、重要なスーパブロックのデータは、変更されないので、 災害に襲われないなら、コピーは、さらに参照される必要はありません。 inode に格納されたアドレスは、`ブロック' のフラグメントをアドレス指定する ことができます。多くてもサイズ MAXBSIZE のファイルシステムのブロックは、 オプションで、それぞれがアドレス指定できる、2、4 または 8 つの部分に分割 することができます。これらの部分は、DEV_BSIZE または DEV_BSIZE 単位の倍数 を指定することができます。 大きなファイルは、排他的に大きなデータブロックから成ます。ディスク空間の 過度の消費を避けるために、小さなファイルの最後のデータブロックは、必要な 数だけ大きなブロックのフラグメントとしてのみ割り付けられます。ファイルシ ステムの形式は、分割された単一の大きなブロックの部分であるそのようなフラ グメントへの単一のポインタだけを保持します。そのようなフラグメントのサイ ズは、blksize(fs, ip, lbn) マクロを使用して、inode の情報から決定できま す。 ファイルシステムは、フラグメントのレベルで利用可能な空間を記録します。ブ ロックの利用可能性を決定するために、整列されたフラグメントが、調査されま す。 ルート inode は、ファイルシステムのルートです。inode 0 は、通常の目的のた めに使用することができず、歴史的にバッドブロックは、inode1 にリンクされま した、したがって、ルート inode は、2 です (inode 1 は、もはや、この目的の ために使用されませんが、多数のダンプテープが、この仮定を行うので、それに 行き詰まります)。 fs_minfree 要素は、空いているかもしれないファイルシステムのブロックの最小 の受け付け可能なパーセンテージを与えます。空きリストがこのレベルより下回 るなら、スーパユーザだけは、ブロックを割り付けることを続けます。 fs_minfree 要素は、空きブロックの予約が必要と見なされないなら、0 に設定さ れますが、ファイルシステムが、90% 以上を越えて実行されているなら、深刻な 性能劣化が観察されます。したがって、fs_minfree のデフォルト値は、8% で す。 経験的に、ブロックのフラグメンテーションと 90% のロードで全体のディスク利 用率の間の最もよいトレードオフは、8 つのフラグメンテーションを備えます。 したがって、デフォルトのフラグメントサイズは、ブロックサイズの 8 分の 1 です。 要素 fs_optim は、ファイルシステムが、割り付けているブロックを費す時間を 最小化することを試みるべきかどうか、またはディスクの空間のフラグメンテー ションを最小化することを試みるべきであるかどうかを指定します。fs_minfree (上記参照) の値が、8% 未満であるなら、ファイルシステムは、完全なサイズの ブロックを使い果たすことを避けるために空間を最適化することをデフォルトと します。minfree の値が 8% 以上であるなら、フラグメンテーションは、問題と なりそうもなく、ファイルシステムは、時間を最適化することをデフォルトとし ます。 シリンダグループに関連する制限: 最小の回転の待ち時間でシーケンシャルブ ロックをレイアウトできるように、各シリンダは、異なる回転位置でブロックの 利用可能性の経過を追います。8 つの区別された回転位置のデフォルトで、要約 情報の解像度は、典型的な 3600 rpm のドライブに対して 2ms です。 要素 fs_old_rotdelay は、同じシリンダの別のディスク転送を開始するために、 最小の数ミリ秒を与えます。それは、ファイル内のディスクブロックのための回 転の最適なレイアウトを決定するために使用されます。fs_old_rotdelay のため のデフォルト値は、2ms です。 各ファイルシステムは、inode の静的に割り付けられた数があります。inode は、ディスク空間の NBPI バイトごとに割り付けられます。inode の割り付けの 戦略は、極めて保守的です。 MINBSIZE は、最小の許可されるブロックサイズです。4096 の MINBSIZE で、間 接的な 2 つのレベルだけでサイズ 2^32 のファイルを作成することができます。 MINBSIZE は、シリンダグループのブロックを保持するために十分に大きくなけれ ばなりませ、したがって、(struct cg) への変更は、MINBSIZE 内のサイズを保持 しなければなりません。スーパブロックは、サイズ SBLOCKSIZE より決して大き くないことに注意してください。 ファイルシステムがマウントされるパス名は、fs_fsmnt に保持されます。 MAXMNTLEN は、この名前のためのスーパブロックに割り付けられた空間の量を定 義します。ファイルシステムごとに要約情報の量の制限は、MAXCSBUFS によって 定義されます。4096 バイトブロックサイズについて、現在、最大 200 万シリン ダに対してパラメータ化されています。 シリンダグループ情報ごとに、最初のシリンダグループのデータブロックから割 り付けられたブロックで要約されます。これらのブロックは、スーパブロックに 加えて fs_csaddr (サイズ fs_cssize) から読み込まれます。 注意: sizeof(struct csum) は、動作する fs_cs() マクロのために 2 のべき乗 でなければなりません。 ファイルシステムのためのスーパブロック: 回転レイアウトテーブルのサイズ は、スーパブロックがサイズ SBLOCKSIZE であるという事実によって制限されま す。これらのテーブルのサイズは、ファイルシステムのブロックサイズと逆に比 例しています。テーブルのサイズは、回転パターンの繰り返し (fs_cpc) の前に 含まれるシリンダの数を増加するので、セクタサイズが 2 のべき乗ではないと き、増加されます。回転レイアウトテーブルのサイズは、(struct fs) に残って いるバイトの数から算出されます。 シリンダグループごとのブロックの数は、シリンダグループは、多くても 1 ブ ロックであるので、制限されます。inode と空きブロックテーブルは、シリンダ グループ構造体 (struct cg) のための空間を差し引いた後に、単一のブロックに 適合していなければなりません。 inode: inode は、UNIX ファイルシステムのすべてのファイルのアクティビティ (活動) の中心です。アクティブファイル、カレントディレクトリ、マウントされ たファイル、テキストファイルとルートごとに割り付けられたユニークな inode があります。inode は、そのデバイス / i 番号ペアによって '指定' されます。 されなる詳細については、インクルードファイル <ufs/ufs/inode.h> を参照して ください。 外部属性の形式は、次の extattr 構造体によって定義されています: struct extattr { int32_t ea_length; /* この属性の長さ */ int8_t ea_namespace; /* この属性の名前空間 */ int8_t ea_contentpadlen; /* 属性の終りのパディング */ int8_t ea_namelength; /* 属性の名前の長さ */ char ea_name[1]; /* ヌル文字で終了する属性名 */ /* 拡張された属性の内容が続く */ }; いくつかのマクロが、これらの構造体を操作するために定義されています。各マ クロは、extattr 構造体へのポインタを取ります。 EXTATTR_NEXT(eap) eap に続き、次の拡張属性へのポインタを返 します。 EXTATTR_CONTENT(eap) eap によって参照される拡張属性の内容への ポインタを返します。 EXTATTR_CONTENT_SIZE(eap) eap によって参照される拡張属性の内容のサ イズを返します。 EXTATTR_SET_LENGTHS(eap, size) 拡張属性の構造体の ea_length, ea_namelength と ea_contentpadlen フィー ルドを計算して、設定するために属性名を初 期化した後の属性内容のサイズを付けて呼び 出します。 次のコードは、ACL を識別します: if (eap->ea_namespace == EXTATTR_NAMESPACE_SYSTEM && !strcmp(eap->ea_name, POSIX1E_ACL_ACCESS_EXTATTR_NAME) { aclp = EXTATTR_CONTENT(eap); acllen = EXTATTR_CONTENT_SIZE(eap); ... } 次のコードは、構造体 mygif のコピーを含んでいる拡張属性を作成します: eap->ea_namespace = EXTATTR_NAMESPACE_USER; strcpy(eap->ea_name, "filepic.gif"); EXTATTR_SET_LENGTHS(eap, sizeof(struct mygif)); memcpy(EXTATTR_CONTENT(eap), &mygif, sizeof(struct mygif)); 歴史 filsys と名前が付けられたスーパブロック構造は、Version 6 AT&T UNIX で登場 しました。このマニュアルに記述されたファイルシステムは、4.2BSD で登場しま した。 FreeBSD 11.4 April 23, 2016 FreeBSD 11.4