mkproto 命令

用途

构造一个原型文件系统。

语法

mkproto 特殊 原型

描述

mkproto 命令用来构造一个新文件系统的原型。 它仅与 Berkeley 软件分发 (BSD) 兼容。

Special 参数可以是 一个块设备名、raw 设备名或文件系统名。 Prototype 参数为原型文件名称,该文件指定了要创建的文件系统的结构和内容。 mkproto 命令调用 mkfs 命令使用 prototype parameter 参数。

原型文件

mkprotomkfs 命令要求一个扩展的原型文件来 创建一个日志文件系统(JFS)。 原型文件 是一个文件系统内容和结构的格式化清单。 原型文件通过一系列以空格和换行隔开的标记来描述文件系统。 原型文件的主体定义了文件系统的对象。

一个 JFS 原型文件包含主体,它由 proto 命令创建,前面有五个特殊标记。 这五个标记定义如下:

原型文件
描述
第一个标记 要作为引导程序或特殊令牌复制到块 0 的文件的名称<noboot>.
第二个标记 文件系统大小。 对一个 JFS,大小用512字节块单位来表示。 如果第二个标记为0,mkfs 命令 创建文件系统来填充整个逻辑卷。
第三个标记 文件系统中 i-nodes 的数目。 JSF 不使用这个标记,但是必须提供以保留改位置。
第四个标记 文件系统片的大小,单位字节。 如果第四个标记是0 (zero),mkfs 命令使用缺省片大小。 对 JFS 而言,该标记必须为0(缺省使用值)、512、1024、2048或 4096。 对 JFS 而言,缺省段大小为 4096。 一个无效的片 大小导致 mkfs 命令失败。
第五个标记 每个 i-node(nbpi)的字节数。 如果该标记为0, mkfs 命令使用缺省的 nbpi。 对 JFS 来说,该标记必须为 0(缺省使用值)、512、1024、2048、4096、8192 或 16384。 对 JFS 而言,每个 i-node 的缺省字节数为4096。 无效的 nbpi 会导致 mkfs 命令失败。

剩下的标记定义了文件系统的内容和结构。 这些标志分组成集合,其中每个集合定义文件系统的一个对象。 每个集合的语法如下:

{ [ 名称 ] { - | { - | d | B | C | L || P } { - |} { - | G } { - |} 方式 所有者 { 主要次命令 | 源文件 | 目录列表 } } | { $ }

其中:

标记
描述
名称 将对象名称指定为将在新文件系统中出现的名称。 除了根目录定义,每个对象都需要Name 标志。
  { - | d | B | C | L || P } { - |} { - | G } { - |} 代表有4个位置字符的字符串,其中:
{ - | d | b | c | l | L | p }
定义了对象类型。 有效的类型为:
-
常规文件
目录
块特殊文件
c
字符特别文件
L
符号链接
L
硬链路
p
命名管道
{ - | u }
切换该对象的设置用户 ID 位,如下所示:
u
设置 UID 为执行
-
设置 UID 为不执行
{ - | g }
切换该对象的设置组 ID(GID)为,如下所示:
g
设置 GID 为执行
-
设置 GID 为不执行
{ - | t }
切换该对象的粘滞位,如下所示:
t
开启粘滞位
-
关闭粘滞位

所有对象都需要4字符标志。

方式 表示为3位8进制字符,这些字符定义了对象的读、写和执行许可权。 每个对象都需要 Mode 标记。 有关许可权的更多信息,请参阅 chmod 命令。
所有者 指定对象所有者的 UID。 每个对象都需要 owner 标记。
指定了对象所有者的 GID。 每个对象都需要 group 标记。
主次命令 如果对象的类型为块或字符特殊文件,指定了它的主要和次要设备号码。 如果对象不是块或字符特殊文件,将省略这些标记。
SourceFile 仅应用于常规文件、硬链路和符号链路对象。 对常规文件而言,该标记为到文件的路径名,从该路径名初始化对象文件。 对符号和硬链接而言,该标记为链路源。 对硬链路而言,链路源相对于新文件系统。
DirectoryListing 如果它是一个目录,定义了该对象的内容。 使用此处描述的标记语法定义目录的内容。 例如,一个目录列表可以包含一个或多个常规文件、一个或多个块文件和一个或多个目录列表。 mkfs 命令创建了目录项。 (点)和 .. (点点)。 每个目录列表用特殊的 $ 标记终止。
$ 终止当前目录列表或表示原型文件的结束。

示例原型规范

以下原型规范描述了一个 JFS,它在0号块没有引导程序并且占据了整个设备。 忽略了第三个标记。 第四和第五个标记定义片大小为1024字节,定义每个 i-node 的字节数为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对象值得进一步检查:

dir2 对象
描述
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
    此命令创建名为protolvSomeVGname卷组。 逻辑卷的大小为5逻辑分区。
  4. 将相应的节添加到/etc/filesystem中。 一个最小的示例节为:
    /protofs:
      dev             = /dev/protolv
      vfs             = jfs
      log             = /dev/loglv00
      mount           = false
  5. 运行以下 mkproto 命令:
    mkproto /dev/protolv /tmp/ProtoFile 
    此命令在protolv逻辑卷。 JFS 的大小为5逻辑分区,其片段大小为1024字节,并且其 nbpi 比率为2048.文件系统的结构和内容如原型文件中所指定/tmp/ProtoFile.

文件

文件
描述
/usr/sbin/mkproto 包含 mkproto 命令。