fsdb 命令

用途

调试文件系统。

语法

fsdb FileSystem [ - ]

描述

fsdb 命令允许您对 FileSystem 参数指定的文件系统进行检查、修改和调试。 此命令向文件系统对象提供访问,例如块、索引节点或者目录。 您可以使用 fsdb 命令检查并且修复已经被破坏的文件系统。 文件系统的关键组成部分可以象征性的引用。 这个功能为修改控制块的条目和降序文件系统树简化过程。

为了检查一个文件系统,要通过一个块设备的名称、一个原始设备名称或者一个已经安装的文件系统名称来指定它。 在最后一种情况下, fsdb 命令通过读取 /etc/filesystems 文件来确定关联的文件系统名称。 安装的文件系统不能被修改。

对于 JFS 文件系统和 JFS2 文件系统,fsdb 命令有不同的接口。 下面解释如何将 fsdb 命令用于 JFS 文件系统。 有关 JFS2 子命令的信息,请参阅 JFS2 子命令

如果这个指定的文件系统是一个 JFS2 快照,那么 fsdb 命令启用检查和修改快照高级块、快照映射、块映射 x 树副本和节头。 有关 JFS2 快照子命令的信息,请参阅 JFS2 快照子命令

fsbd 命令的 子命令 允许您访问,查看或更改文件系统中的信息。 在子命令中,您输入的任何数字被缺省默认为十进制,除非您在它的前面加前缀“0”表示八进制或者加“0x”表示十六进制。 所有的地址都显示成十六进制。

因为 fsdb 命令在一个时间读写一个块,它使用 raw 工作就像使用 block I/O。

标志

描述
- 禁用那些用于检验索引节点和块地址的错误检查例程。 O 子命令打开和关闭这些例程。 当这些例程在运行的时候, fsdb 命令从高级块中读取关键的文件系统数据。 获取的信息允许 fsdb 命令成功地访问不同的文件系统对象并且做出不同的错误检查。

子命令

fsdb 子命令是在文件系统中定位和显示,或者修改信息的请求。 子命令主要的类别是:

描述
类别 FUNCTION
位置 访问文件系统中的信息。
显示 查看文件系统中的信息。
修改 更改文件系统中的信息。

此外,还有一些 杂项 子命令。

位置子命令

有两种类型的位置子命令:

Number[ I | M | i | b ]
OR
dDirectorySlot

第一种包括一个数字,后面跟着一个地址说明(可选)。 这个地址说明定义了前面的数字如何被解释。 有四种地址说明对应四种不同的 Number 变量的解释:

描述
i 索引节点映射块数字
M 磁盘映射块数字
i 索引节点号
片段数字

依靠地址规范(或者缺少它),这种类型的位置子命令访问信息如下所示:

描述
编号 Number 变量指定的绝对字节偏移量处访问数据。
地图块编号I 访问通过 MapBlockNumber 变量指定的索引节点映射块。
地图块编号M 访问通过 MapBlockNumber 变量指定的磁盘映射块。
InodeNumberi 访问通过 InodeNumber 变量指定的索引节点。
片段编号b 访问通过 FragmentNumber 变量指定的文件系统块。 一个片段号包括一个块地址和一个编码长度。 一个完整的段地址在长度上是一个 32 位数字。 前面 28 位是起始段地址。 段的长度在剩余的 4 位被编码;它作为一个少于一个满块的段数目被编码。 例如,在由 1024 字节片段组成的文件系统上,地址0x2000010f引用以 1KB 块号开头的块0x10f长度为 2KB 。 相比之下,在由 512 字节片段构成的文件系统上,地址0x2000010f引用以 512 字节块开头的块0x10f长度为 3072 (512 * 6) 字节。

第二种位置子命令是用来访问目录条目的。 这个子命令包括一个字符 d ,这个字符后面紧跟着一个目录口数字。 对于每一个相关的索引节点块,目录数字都以 0 开始。

这种位置子命令访问信息如下所示:

描述
d目录插槽 访问目录条目,这个条目为当前索引节点被 DirectorySlot 变量索引。 使用这个子命令,只有分配的目录条目才能被操作。

display 子命令

为了查看与地址规范相关的信息,要使用一个显示子命令,这个子命令要包含在一个与一种显示格式相关联的显示设备当中。

P[数字]{ | d | | E | C | B | | M | | X | S | D. }

F[数字]{ | d | | E | C | B | | M | | X | S | D. }

显示设备是:

描述
p 指定一个常规的设备。 使用常规的显示子命令来显示与当前地址相对应的数据。 如果您在符号 p 之后输个数字,fsdb 命令显示这个条目的数字。 要做一个检查以检测块的边界溢出。 如果您输入“0”或“*”(星号),fsdb 命令会显示到当前段末的所有条目。
f 指定一个文件设备。 使用这个文件显示子命令来显示同当前索引节点关联的数据块。 如果您在符号 f 后输入一个数字,fsdb 命令会显示这个文件的块。 块编号从 0 开始。 显示格式跟在块号后面。 如果您输入 f 而不输入一个块号,那么 fsdb 命令会默认显示当前索引节点的块 0。

对于每个设备显示的格式是:

描述
i 作为索引节点显示。
作为目录显示。
o 作为八进制的字来显示。
e 作为十进制的字来显示。
c 作为字符来显示。
作为八进制字节来显示。
y 作为十六进制字节来显示。
M 作为磁盘映射条目来显示。
i 作为索引节点映射条目来显示。
X 作为十六进制字来显示。
作为单间接块来显示。
作为双间接块来显示。

选中的显示设备和显示格式在 fsdb 命令期间一直起作用,直到明确的更改。 如果您指定的地址没有落在一个正确的边界内部,您也许会收到一个错误消息,指出这个不正确的调整。

如果您使用 Number、h>, MapBlockNumberIFragmentNumberb 位置子命令来访问索引节点信息的话,您可以单步遍历这些数据,检查每一个字节、字或者双字。 通过输入以下子命令中的一种可以选择希望得到的显示模式。

描述
B 在字节模式下开始显示。
在双字模式下开始显示。
W 在单字模式下开始显示。

根据这些信息,您可以向前或者向后移动。 边界随着显示屏幕而前进,并且在显示的最后一项的地址上留了下来。 通过按下“INTERRUPT”键,输出可以在任意时间终止。 下面的这些符号允许在信息中移动:

描述
+ 编号 向前移动指定数目的当前有效单元。
-编号 向后移动指定数目的当前有效单元。

下面的符号允许您存储当前的地址,并且很方便的返回到它。

描述
> 存储当前地址。
< 返回到先前存储过的地址。

您可以用点、制表符和空格作为子命令的定界符,但是它们仅仅对从可能被解释为十六进制位的子命令定界十六进制数字是必要的。 按下 Enter 键(进入一个空白行)通过上一次显示的数据类型大小来增加当前的地址。 也就是说,这个地址被设在了下一个字节、字、双字、目录条目或者索引节点,这就允许您单步遍历文件系统的区域。

fsdb 命令以一种适合数据类型的格式显示信息。 字节、字和双字会作为十六进制地址来显示,这些地址后面跟着在那个地址上数据的十六进制表示,而且在括号中放入了相等的十进制数。 fsdb 命令添加 。B。地址末尾的 D 后缀表示显示字节或双字值。 它显示目录作为目录口的偏移量,这些偏移量后面跟着十进制的索引节点号以及条目名称的字符表示。 它将索引节点同描述每个元素的标号字段一同显示。 环境变量控制数据的格式和时间字段。

修改子命令

通过使用字段规范(对于在索引节点的字段和在目录中的字段),您可以修改同这个地址规范相关联的信息。 对于分配新的值,常规的形式是:助记符运算符新的值,这里助记符参数代表下面列表中所描述的字段之一:

下面的助记符被用作索引节点字段的名称并且指向当前工作的索引节点。

描述
md 允许模式
ln 链接计数
uid 用户数量
gid 分组数目
sz 文件大小
a编号 数据块数量(0 到 8),这里 Number 参数可以是一个位置子命令。
at 访问时间
mt 修改时间
maj 主要设备数
min 次要设备数

下面的助记符指的是索引节点和磁盘映射:

描述
mf 映射空闲计数
ms 映射大小
mp 永久分配位图
mw 工作分配位图

以下助记符用于目录中字段的名称:

描述
rl 目录条目记录的长度
nl 目录名称的长度
nm 目录名称

Operator 参数有效的值包括:

注: 必须先卸装文件系统,然后才能尝试对其进行修改。

描述
= New-Value 参数分配给指定的 Mnemonic 参数。
=+ 通过指定的 New-Value 参数增加了 Mnemonic 参数。 缺省的New-Value 参数是值 1。
=- 通过指定的 New-Value 减少助记符。 缺省的新值是值 1。
=" New-Value 参数指定的字符串分配给指定的助记符参数。 如果当前显示格式是目录的 d 地址规范,并且未指定助记符,那么将更改目录名。 新的目录名称不能长于先前的目录名称。

其他子命令

其他子命令是:

描述
q 退出。
描述
xn 扩展目录 n 字节,这里 n 加上目录的当前大小在字节上不大于当前目录片段。
! 返回 shell。
O 锁定错误检查。

JFS2 子命令

通过完整的名称或者使用名称的一部分可以输入这些子命令。 至少应该输入粗体字部分。

描述
A.[lter] <block> <offset> <hex string> 改变磁盘数据。
B[map] [<block number>] 显示块分配映射。
迪尔[ectory] <inode number> [<fileset>] [R] 显示目录条目。
d[isplay] [<block> [<offset> [<format> [<count>]]]] 显示数据。
[ree] {<block number> |<inode number>{a | f } } 显示 d 树节点。
H[elp] [<command>] 提供子命令的帮助。
[g] [<IAG number>] [a | <fileset>] 显示 IAG 页面。
伊姆[ap] [a | <fileset>] 显示索引节点分配映射。
[node] [<inode number>] [a | <fileset>] 显示索引节点。
q[uit] 退出 fsdb 命令。
su[perblock] [p | s] 显示高级块。
X[tree] {<block number> | <inode number>{a | f}} 显示 x 树节点。
A.[lter] <block> <offset> <hex string>
其中:
描述
<block> 块号(十进制)
<offset> 在块的范围内的偏移量(十六进制)
<hex string> 十六进制位的字符串
 
 
 
Alters disk data. <hex string> should contain an even number of digits.
 
 
B[map] [<block numbers>]
 
 
显示块分配的映射。
 
 <block number> Display the Dmap page which describes this block number
 
子命令:
描述
m 修改当前节点
u 访问上一个级别的 bmap 页面
L 访问左兄弟节点
R 访问右兄弟节点
w 显示 wmap
p 显示 pmap
显示 s 树。
X 退出子命令方式
 
 
迪尔[ectory] <inode number> [<fileset>][R]
 
描述
<inode number> 目录的索引节点号(十进制)
<fileset> 数量,当前值必须是零
R 递归列示所有的子目录
 
 
 
显示目录条目。
 
 
d[isplay] [<block> [<offset> [<format>[<count>]]]]
 
描述
<block> 块号(十进制)
<offset> 在块的范围内的偏移量(十六进制)
<format> 显示数据的格式(见下面)
<count> 要显示对象的数量(十进制)
 
在各种不同的格式下显示数据。
 
 
 
格式也许是以下中的一种:
描述
a ascii  
i 索引节点 结构 dinode
I 索引节点分配的映射 iag_t
s 超块 结构超块
x 十六进制  
 
 
[ree] {<block number> | <inode number>{a | f}}
 
描述
<block number> 块号包含 d 树页面
<inode number> 目录的索引节点号(十进制)
{a | f} “a”指示索引节点号是一个聚集索引节点。 “f”指示索引节点号是文件集索引节点。
 
 
 
显示 b 树目录的根并且输入一个子命令方式,在这个方式中浏览这个树。
 
 
 
子命令:
描述
m 修改当前节点
f 步入空闲列表的条目
s 显示指定的插槽入口
[0-9]+ 显示指定的 stbl 入口
t 显示格式化过的 stbl
u 访问父节点(不是父目录)
d 访问子节点
x 退出子命令方式
 
 
H[elp] [<command>]
 
描述
<command> 命令名
 
打印帮助文本。 如果没有参数则列示所有的命令。
 
 
[g] [<IAG number>] [a | <fileset>]
 
描述
<IAG number> IAG 数量(十进制)
a 使用聚集索引节点表
 <fileset> 文件集数量(目前必须是零)
 
显示 iag 信息并且进入子命令模式。
 
 
 
子命令:
描述
e 显示 / 修改索引节点范围映射
m 修改 iag
p 显示 / 修改持久映射
w 显示 / 修改工作映射
伊姆[ap] [a | <fileset>]
 
描述
a 使用聚集索引节点表
<fileset> 文件集数量(目前必须是零)
 
显示指定的索引节点映射并且进入子命令方式。
 
 
 
子命令:
描述
e 显示 / 修改索引节点范围映射
m 修改 iag
p 显示 / 修改持久映射
 
 
[node] [<inode number>] [a | <fileset>]
 
描述
<inode number> 索引节点号(十进制)
a 使用聚集索引节点表
文件集 文件集数量(目前必须是零)
 
显示索引节点信息并且进入子命令方式。
 
 
 
子命令:
描述
m 修改索引节点
t 显示 / 修改索引节点的 b 树
e 显示 / 修改索引节点的 EA
注: fsdb 命令了解 v1v2 扩展属性格式。 查看 EA 时的行为取决于被查看的索引节点的格式。

对于 v1,在显示索引节点的 EA 后,您可以修改其 pxdTableeaDirectory 条目。 指定修改选项,然后指定 pxdTableeaDirectory 指示符以及表中的偏移量。

对于 v2,EA 用 dtree 子命令格式显示。 然后,所有 dtree 子命令都可用于 EA 上的进一步操作。

 
 
q[uit]
退出 fsdb 命令。
 
 
su[perblock] [p | s]
 
描述
p 显示首要的高级块
s 显示次要的高级块
 
显示高级块数据。
X[tree] {<block number> | <inode number>{a | f} }
 
描述
<block number> 块号(十进制)
<inode number> 索引节点号
{a | f} “a”指示索引节点号是一个聚集索引节点。 “f”指示索引节点号是文件集索引节点。
 
显示 x 树的一个索引节点并进入一个子命令方式,在其中浏览 x 树。
 
 
 
子命令:
描述
m 修改当前节点
u 访问父节点
d 访问子节点
n 访问右兄弟进程
p 访问左兄弟进程
s 选择要查看的 xad 条目
x 退出子命令方式

JFS2 快照子命令

通过完整的名称或者使用名称的一部分可以输入这些子命令。 至少应该输入粗体字部分。

描述
A.[lter] <block> <offset> <hex string> 改变磁盘数据。
b[映射] 显示块映射 x 树的副本。
d[isplay] [<block> [<offset> [<format> [<count>]]]] 显示数据。
H[elp] [<command>] 提供子命令的帮助。
q[uit] 退出 fsdb 命令。
[able] [<block number>] 显示总结快照表。
S[map] <block number> 显示快照位图。
su[perblock] 显示高级块。
A.[lter] <block> <offset> <hex string>
其中:
描述
<block> 块号(十进制)
<offset> 在块的范围内的偏移量(十六进制)
<hex string> 十六进制位的字符串
 
 
 
Alters disk data. <hex string> should contain an even number of digits.
 
 
b[映射]
 
 
显示块映射 x 树的副本。
 
 
d[isplay] [<block> [<offset> [<format>[<count>]]]]
 
描述
<block> 块号(十进制)
<offset> 在块的范围内的偏移量(十六进制)
<format> 显示数据的格式(见下面)
<count> 要显示对象的数量(十进制)
 
在各种不同的格式下显示数据。
 
 
 
格式也许是以下中的一种:
描述
a ascii  
s 快照段头  
t 快照表页面  
x x 树页面  
 
 
H[elp] [<command>]
 
描述
<command> 命令名
 
提供子命令的帮助。
 
 
q[uit]
退出 fsdb 命令。
 
 
[able] [<block number>]
其中:
描述
<block number> 块号(十进制)
 
 
 
显示总结快照表。
 
 
S[map] [<block number>]
其中:
描述
<block number> 块号(十进制)
 
 
 
显示快照位图。
 
 
su[perblock]
 
 
显示高级块。

安全性

RBAC 用户和可信AIX用户请注意:此命令可执行特权操作。 只有特权用户才能执行特权限定的操作。 有关授权和权限的更多信息,请参阅安全中的特权命令数据库。 要获取与此命令相关联的特权和权限的列表,请参阅 lssecattr 命令或 getcmdattr 子命令。

示例

下面的这些示例指示了在一个 JFS 文件系统中当开始了 fsdb 此命令之后您可以使用的子命令。

  1. 要显示索引节点,请输入:
    386i
    此命令显示索引节点386采用索引节点格式。 现在变成了当前的索引节点。
  2. 将当前索引节点的链接计数更改为值4,请输入:
    ln=4
  3. 将当前索引节点的链路计数增加一个值1,请输入:
    ln=+1
  4. 要显示与当前索引节点关联的文件的某部分,请输入:
    fc
    此命令以 ASCII 码字节的形式显示与当前的索引节点相关的文件的块 0。
  5. 要显示目录的条目,请输入:
    2i.fd
    这会将当前索引节点更改为根索引节点 (索引节点)2) 然后显示与该索引节点相关联的第一个块中的目录条目。 显示的最后的一个或者更多条目也许有一个索引节点号 0。 这些是未用的目录块;这种条目不能在下一个示例操作。
  6. 要进入目录树的下一级,请输入:
    d5i.fc
    此命令将当前索引节点更改为与目录条目关联的索引节点5。然后它将文件的第一个块显示为 ASCII 文本 (fc)。 从 0 开始对目录条目进行编号。
  7. 要显示知道其块号的块,请输入:
    1b.p0o
    此命令显示超块 (块)1) 文件系统的八进制。
  8. 要更改目录条目的索引节点,请输入:
    2i.a0b.d7=3
    此命令更改目录条目的索引节点7在根目录中 (2i) 到3. 此示例还显示了如何在一行上组合多个操作。
  9. 要更改目录条目的文件名,请输入:
    d7.nm="chap1.rec"
    此命令更改目录条目的名称字段7chap1.rec.
  10. 要显示与当前索引节点关联的文件的给定块,请输入:
    a2b.p0d
    此命令显示块2当前索引节点的目录条目。
  11. 要显示块 7 中的单独间接块的内容,请输入:
    7b. p0S
    此命令显示了分配给在块 7 中有单独间接块的索引节点的块号。
  12. 要显示磁盘映射的第一页,请输入:
    OM
  13. 要以十六进制显示永久块分配映射的前 10 个字,请输入:
    mp1.p10x
    此命令指示在当前地址的分配位图;例如,在 0M。

以下示例显示了可以在 JFS2 文件系统上使用的一些子命令。

注意: 请勿使用 JFS2 子命令来修改文件系统。
  1. 要显示索引节点,请输入:
    inode 2
    该命令以索引节点格式显示了索引节点 2。
  2. 要显示目录的条目,请输入:
    dir 2
    此命令显示与索引节点 2 相关联的目录条目。
  3. 要显示块号为 0x1000 的块,请输入:
    display 0x1000
    该命令以十六进制的格式显示了文件系统上的块。

文件

描述
/usr/sbin 包含 fsdb 命令。
/etc/filesystems 包含关于文件系统的信息。