mkproto コマンド

目的

プロトタイプ・ファイルシステムを構成します。

構文

mkproto Special Prototype

説明

mkproto コマンドは、新規ファイルシステムのプロトタイプを構成するのに使用されます。 このコマンドは、Berkeley Software Distribution (BSD) の互換性を確保するために提供されています。

Special パラメーターは、ブロック・デバイス名、ロウ・デバイス名、ファイルシステム名です。 Prototype パラメーターは、作成するファイルシステムの構造と内容を指定するプロトタイプ・ファイルの名前です。 mkproto コマンドは、 Prototype および Special パラメーターを使って、 mkfs コマンドを呼び出します。

プロトタイプ・ファイル

mkprotomkfs コマンドは、 ジャーナル・ファイルシステム (JFS) を作成するために拡張プロトタイプ・ファイルを必要とします。 プロトタイプ・ファイル とは、ファイルシステムの内容と構造がフォーマットされたリストです。 プロトタイプ・ファイルは、スペースと改行で区切った一連のトークンによってファイルシステムを記述します。 プロトタイプ・ファイルの本体は、ファイルシステムのオブジェクトを定義します。

JFS プロトタイプ・ファイルは本体から構成され、その本体は 5 つの特殊トークンに続く proto コマンドで作成できます。 この 5 つのトークンは次のように定義されています。

プロトタイプ・ファイル
項目 説明
第 1 のトークン ブートストラップ・プログラムまたは特殊なトークン <noboot> としてブロック 0 にコピーするファイルの名前。
第 2 のトークン ファイルシステムのサイズ。 JFS の場合、サイズは 512 バイトのブロック単位で表されます。 第 2 のトークンが 0 であれば、mkfs コマンドは論理ボリュームいっぱいに入るファイルシステムを作成します。
第 3 のトークン ファイルシステム上の i ノード数。 このトークンは JFS では使用しませんが、位置を保存するために与えなければなりません。
第 4 のトークン バイト数で表すファイルシステムのフラグメント・サイズ。 第 4 のトークンが 0 (ゼロ) であれば、mkfs コマンドはデフォルトのフラグメント・サイズを使用します。 JFS の場合、トークンは 0、512、1024、2048、4096 のいずれかです (デフォルトの使用値は 0)。 JFS の場合、デフォルトのフラグメント・サイズは 4096 です。 無効なフラグメント・サイズを指定すると、mkfs コマンドが異常終了します。
第 5 のトークン i ノード 1 個当たりのバイト数 (nbpi)。 このトークンが 0 であれば、mkfs コマンドはデフォルトの nbpi を使用します。 JFS の場合、このトークンは 0、512、1024、2048、4096、8192、16384 のいずれかです (デフォルトの使用値は 0)。 JFS の場合、i ノード 1 個当たりのデフォルトのバイト数は 4096 です。 無効な nbpi を指定すると、mkfs コマンドが異常終了します。

残りのトークンは、ファイルシステムの内容と構造を定義します。 これらのトークンはセットとしてグループ化されており、各セットはファイルシステムのオブジェクトを 1 つずつ定義します。 各セットの構文は次のとおりです。

{ [ Name ] { - | { - | d | b | c | l | L | p } { - | u } { - | g } { - | t } Mode Owner Group { Major Minor | SourceFile | DirectoryListing } } | { $ }

ここで、

トークン
項目 説明
Name 新しいファイルシステム内に表示されるとおりのオブジェクト名を指定します。 Name トークンは、ルート・ディレクトリー定義を除くすべてのオブジェクトに必要です。
  { - | d | b | c | l | L | p } { - | u } { - | g } { - | t } 4 つの定位置文字の文字列を表します。この場合、各文字の意味は次のとおりです。
{ - | d | b | c | l | L | p }
オブジェクト型を定義します。 有効な値は次のとおりです。
-
正規ファイル
d
ディレクトリー
b
ブロック・スペシャル・ファイル
c
キャラクター・スペシャル・ファイル
l
シンボリック・リンク
L
ハード・リンク
p
名前付きパイプ
{ - | u }
オブジェクトのセット UID ビットを次のように切り替えます。
u
実行時に UID を設定します。
-
実行時に UID を設定しません。
{ - | g }
オブジェクトのセット・グループ ID (GID) を次のように切り替えます。
g
実行時に GID を設定します。
-
実行時に GID を設定しません。
{ - | t }
オブジェクトのスティッキー・ビットを切り替えるには、次のように設定します。
t
スティッキー・ビット・オン
-
スティッキー・ビット・オフ

この 4 文字のトークンは、すべてのオブジェクトに必須です。

Mode オブジェクトの読み取り、書き込み、実行の許可を定義する 3 つの 8 進文字からなる文字列を表します。 Mode トークンは、すべてのオブジェクトに必須です。許可についての詳細は、chmod コマンドを参照してください。
Owner オブジェクトのオーナーの UID を指定します。 オーナー・トークンは、すべてのオブジェクトに必須です。
Group オブジェクトのオーナーの GID を指定します。 グループ・トークンは、すべてのオブジェクトに必須です。
Major Minor タイプがブロック・スペシャル・ファイルまたはキャラクター・スペシャル・ファイルの場合に、オブジェクトのメジャー・デバイス番号とマイナー・デバイス番号を指定します。 オブジェクトがブロック・スペシャル・ファイルまたはキャラクター・スペシャル・ファイルでない場合、これらのトークンは省略されます。
SourceFile 正規ファイル、ハード・リンク、およびシンボリック・リンクのオブジェクトにのみ適用されます。 正規ファイルの場合、このトークンはオブジェクト・ファイルを初期化するファイルへのパス名です。 シンボリック・リンクとハード・リンクの場合、このトークンはリンク・ソースです。 リンク・ソースは、ハード・リンク向けの新しいファイルシステムを基準にしています。
DirectoryListing オブジェクトがディレクトリーであれば、その内容を定義します。 ディレクトリーの内容は、ここで説明するトークンの構文を使用して定義します。 例えば、ディレクトリー・リストには 1 つ以上の正規ファイル、1 つ以上のブロック・ファイル、および 1 つ以上のディレクトリー・リストを入れることができます。 mkfs コマンドは、ディレクトリー・エントリー . (ドット) と .. (ドット - ドット) を作成します。 各ディレクトリー・リストは、特殊 $ トークンで終了します。
$ 現行ディレクトリー・リストを終了させるか、またはプロトタイプ・ファイルの終わりを示します。

プロトタイプ仕様の例

次のプロトタイプ仕様は、ブロック 0 にブート・プログラムが入っておらず、デバイス全体を占めている JFS を記述します。 第 3 のトークンは無視されます。 第 4 と第 5 のトークンは、フラグメント・サイズを 1024 バイト、i ノード 1 個当たりのバイト数を 2048 に定義します。 このプロトタイプの本体は、ファイルシステムの内容を定義します。

<noboot> 0 0 1024 2048
d---  755 0 0
 dir1    d--- 755 0 2
  block_dev   b--- 644 0 0   880 881
  char_dev    c--- 644 0 0   990 991
  named_pipe  p--- 644 0 0
  regfile3    ---- 644 0 0   /tmp/proto.examp/dir1/regfile3
  regfile4    ---- 644 0 0   /tmp/proto.examp/dir1/regfile4
  $
 dir2    d--- 755 205 300
  regfile6   ---- 644 0 0    /tmp/proto.examp/dir2/regfile6
  symlnOutofFS l--- 644 0 0  /tmp/proto.examp/dir2/regfile6
  symlnNoExist l--- 644 0 0  /home/foobar
  symlnInFs  l--- 644 0 0    /dir2/regfile6
  regfile5   ---- 644 0 0    /tmp/proto.examp/dir2/regfile5
  hardlink   L--- 644 0 0    /dir2/regfile5
  $
 dir3   d--- 755 0 0
  setgid     --g- 755 0 0    /tmp/proto.examp/dir3/setgid
  setuid     -u-- 755 0 0    /tmp/proto.examp/dir3/setuid
  sticky     ---t 755 0 0    /tmp/proto.examp/dir3/sticky
  $
 dir4   d--- 755 0 0
  dir5  d--- 755 0 0
   dir6 d--- 755 0 0
    $
   dir7 d--- 755 0 0
    $
   $
  regfile7   ---- 644 0 0    /tmp/proto.examp/dir4/regfile7
  $
 regfile1    ---- 555 205 1  /tmp/proto.examp/regfile1
 regfile2    ---- 744 0 0    /tmp/proto.examp/regfile2
 $
$

dir2 オブジェクトに関する 3 つのエントリーは、さらに検査されます。

dir2 object
項目 説明
symlnOutofFS l—- 644 0 0 /tmp/proto.examp/dir2/regfile6 このエントリーは、作成されるファイルシステムの外側にあるファイルへのシンボリック・リンクを定義します。 コマンド ls -l は、symlnOutofFS -> /tmp/proto.examp/dir2/regfile6 のような行をリストします。
symlnNoExist l—- 644 0 0 /home/foobar このエントリーは、作成されるファイルシステムの外側にあるファイルへのシンボリック・リンクを、存在しないファイルに対して定義します。 コマンド ls -l は、symlnNoExist -> /home/foobar のような行をリストします。
symlnInFs l—- 644 0 0 /dir2/regfile6 このエントリーは、作成されるファイルシステム内のファイルへのシンボリック・リンクを定義します。 コマンド ls -l は、symlnInFS -> /dir/regfile6 のような行をリストします。

"プロトタイプ・ファイル仕様の例"で説明しているプロトタイプ・ファイルを使用してプロトタイプ JFS を作成する方法は、 次のとおりです。

  1. proto コマンドまたはテキスト・エディターを使用してプロトタイプ・ファイルの本体を生成します。 この例では、/tmp/ProtoFile ファイルを呼び出します。
  2. JFS に必要な最初の 5 つのトークンを追加します。 先の例のプロトタイプ・ファイルでは、各トークンは次のとおりです。
    <noboot> 0 0 1024 2048
  3. ファイルシステムを保留する論理ボリュームを次のように作成します。
    mklv -y protolv -t jfs SomeVGname 5
    このコマンドは、ボリューム・グループ SomeVGname 内で protolv という名の理論ボリュームを作成します。 この論理ボリュームのサイズは、論理区画 5 個分です。
  4. /etc/filesystem ファイルに適切なスタンザを追加します。 最小のサンプル・スタンザは次のとおりです。
    /protofs:
      dev             = /dev/protolv
      vfs             = jfs
      log             = /dev/loglv00
      mount           = false
  5. 次の mkproto コマンドを実行します。
    mkproto /dev/protolv /tmp/ProtoFile 
    このコマンドは、論理ボリューム protolv 上で JFS を作成します。 JFS のサイズは論理区画 5 個分で、そのフラグメント・サイズは 1024 バイト、nbpi 比は 2048 です。 ファイルシステムの構造と内容は、プロトタイプ・ファイル /tmp/ProtoFile 内で指定されています。

ファイル

ファイル
項目 説明
/usr/sbin/mkproto mkproto コマンドが入っています。