调试文件系统。
fsdb filesystem [ - ]
fsdb 命令允许您对FileSystem参数指定的文件系统进行检查、修改和调试。这个命令向文件系统对象提供访问,例如块、索引节点或者目录。您可以使用 fsdb 命令检查并且修复已经被破坏的文件系统。文件系统的关键组成部分可以象征性的引用。这个功能为修改控制块的条目和降序文件系统树简化过程。
为了检查一个文件系统,要通过一个块设备的名称、一个原始设备名称或者一个已经安装的文件系统名称来指定它。在最后一种情况下,fsdb 命令通过读 /etc/filesystems 文件来决定相关的文件系统名称。安装的文件系统不能被修改。
对于 JFS 文件系统和 JFS2 文件系统,fsdb 命令有不通的接口。下面解释如何将 fsdb 命令用于 JFS 文件系统。参考 JFS2 子命令可以得到关于JFS2 子命令的信息。
如果这个指定的文件系统是一个 JFS2 快照,那么 fsdb 命令启用检查和修改快照高级块、快照映射、块映射 x 树副本和节头。参考 JFS2 快照子命令可以得到有关 JFS2 快照子命令的信息。
fsdb 命令的子命令允许您访问、查看或者更改文件系统中的信息。在子命令中,您输入的任何数字被缺省默认为十进制,除非您在它的前面加前缀“0”表示八进制或者加“0x”表示十六进制。所有的地址都显示成十六进制。
因为 fsdb 命令在一个时间读写一个块,它使用 raw 工作就像使用 block I/O。
- | 禁用那些用于检验索引节点和块地址的错误检查例程。o 子命令切换这些例程的开关。当这些例程在运行的时候, fsdb 命令从高级块中读取关键的文件系统数据。获取的信息允许 fsdb 命令成功地访问不同的文件系统对象并且做出不同的错误检查。 |
fsdb 子命令是在文件系统中定位和显示,或者修改信息的请求。子命令主要的类别是:
Category | 功能 |
位置 | 访问文件系统中的信息。 |
Display | 查看文件系统中的信息。 |
修改 | 更改文件系统中的信息。 |
另外,有几个其它的子命令。
有两种类型的位置子命令:
Number[ I | M | i | b ]
OR
dDirectorySlot
第一种包括一个数字,后面跟着一个地址说明(可选)。这个地址说明定义了前面的数字如何被解释。有四种地址说明对应四种不同的Number变量的解释:
I | 索引节点映射块数字 |
M | 磁盘映射块数字 |
i | 索引节点号 |
b | 片段数字 |
依靠地址规范(或者缺少它),这种类型的位置子命令访问信息如下所示:
第二种位置子命令是用来访问目录条目的。这个子命令包括一个字符d ,这个字符后面紧跟着一个目录口数字。对于每一个相关的索引节点块,目录数字都以 0 开始。
这种位置子命令访问信息如下所示:
dDirectorySlot | 访问目录条目,这个条目为当前索引节点被 DirectorySlot 变量索引。使用这个子命令,只有分配的目录条目才能被操作。 |
为了查看与地址规范相关的信息,要使用一个显示子命令,这个子命令要包含在一个与一种显示格式相关联的显示设备当中。
p[Number]{ i | d | o | e | c | b | y | M | I | x | s | D }
OR
f[Number]{ i | d | o | e | c | b | y | M | I | x | s | D }
显示设备是:
对于每个设备显示的格式是:
i | 作为索引节点显示。 |
d | 作为目录显示。 |
o | 作为八进制的字来显示。 |
e | 作为十进制的字来显示。 |
c | 作为字符来显示。 |
b | 作为八进制字节来显示。 |
y | 作为十六进制字节来显示。 |
M | 作为磁盘映射条目来显示。 |
I | 作为索引节点映射条目来显示。 |
x | 作为十六进制字来显示。 |
S | 作为单间接块来显示。 |
D | 作为双间接块来显示。 |
选中的显示设备和显示格式在 fsdb 命令期间一直起作用,直到明确的改变。如果您指定的地址没有落在一个正确的边界内部,您也许会收到一个错误消息,指出这个不正确的调整。
如果您使用Number、h>, MapBlockNumberI 或者FragmentNumberb 位置子命令来访问索引节点信息的话,您可以单步遍历这些数据,检查每一个字节、字或者双字。通过输入下列子命令中的一种可以选择希望得到的显示模式。
B | 在字节模式下开始显示。 |
D | 在双字模式下开始显示。 |
W | 在单字模式下开始显示。 |
根据这些信息,您可以向前或者向后移动。边界随着显示屏幕而前进,并且在显示的最后一项的地址上留了下来。通过按下“INTERRUPT”键,输出可以在任意时间终止。下面的这些符号允许在信息中移动:
Number | 向前移动指定数目的当前有效单元。 |
Number | 向后移动指定数目的当前有效单元。 |
下面的符号允许您存储当前的地址,并且很方便的返回到它。
> | 存储当前地址。 |
< | 返回到先前存储过的地址。 |
您可以用点、制表符和空格作为子命令的定界符,但是它们仅仅对从可能被解释为十六进制位的子命令定界十六进制数字是必要的。按下回车键(进入一个空白行)通过上一次显示的数据类型大小来增加当前的地址。也就是说,这个地址被设在了下一个字节、字、双字、目录条目或者索引节点,这就允许您单步遍历文件系统的区域。
fsdb 命令以一种适合数据类型的格式显示信息。字节、字和双字会作为十六进制地址来显示,这些地址后面跟着在那个地址上数据的十六进制表示,而且在括号中放入了相等的十进制数。 fsdb 命令相这个地址的末尾加入 .B 或者 .D 后缀以指出显示的字节或者双字的值。它显示目录作为目录口的偏移量,这些偏移量后面跟着十进制的索引节点号以及条目名称的字符表示。它将索引节点同描述每个元素的标号字段一同显示。环境变量控制数据的格式和时间字段。
通过使用字段规范(对于在索引节点的字段和在目录中的字段),您可以修改同这个地址规范相关联的信息。对于分配新的值,常规的形式是:助记符 运算符新的值这里助记符参数代表下面列表中所描述的字段之一:
下面的助记符被用作索引节点字段的名称并且指向当前工作的索引节点。
md | 允许模式 |
ln | 链接计数 |
uid | 用户数量 |
gid | 分组数目 |
sz | 文件大小 |
aNumber | 数据块数量(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 | 锁定错误检查。 |
通过它们完整的名字或者利用这些名字的子集可以输入这些子命令。至少必须输入粗体字。
a[lter] <block> <offset> <hex string> | 修改磁盘数据。 |
b[map] [<block number>] | 显示块分配映射。 |
dir[ectory] <inode number> [<fileset>] [R] | 显示目录项。 |
d[isplay] [<block> [<offset> [<format> [<count>]]]] | 显示数据。 |
dt[ree] {<block number> |<inode number>{a | f } } | 显示 d 树节点。 |
h[elp] [<command>] | 提供子命令的帮助。 |
ia[g] [<IAG number>] [a | <fileset>] | 显示 IAG 页面。 |
im[ap] [a | <fileset>] | 显示索引节点分配映射。 |
i[node] [<inode number>] [a | <fileset>] | 显示索引节点。 |
q[uit] | 退出 fsdb 命令。 |
su[perblock] [p | s] | 显示高级块。 |
x[tree] {<block number> | <inode number>{a | f}} | 显示 x 树节点。 |
<block> | 块数量(十进制) |
<offset> | 在块的范围内的偏移量(十六进制) |
<hex string> | 十六进制位的字符串 |
m | 修改当前节点 |
u | 访问上一个级别的 bmap 页面 |
l | 访问左兄弟节点 |
r | 访问右兄弟节点 |
w | 显示 wmap |
(.,.)p | 显示 pmap |
s | 显示 s 树。 |
x | 退出子命令方式 |
<inode number> | 目录的索引节点号(十进制) |
<fileset> | 数量,当前值必须是零 |
R | 递归列出所有的子目录 |
<block> | 块号(十进制) |
<offset> | 在块的范围内的偏移量(十六进制) |
<format> | 显示数据的格式(见下面) |
<count> | 要显示对象的数量(十进制) |
a | 美国信息交换标准码(ASCII) | |
i | 索引节点 | 结构 dinode |
I | 索引节点分配的映射 | iag_t |
s | 高级块 | 结构高级块 |
x | 十六进制 |
<block number> | 块号包含 d 树页面 |
<inode number> | 目录的索引节点号(十进制) |
{a | f} | “a”指示索引节点号是一个聚集索引节点。 “f”指示索引节点号是文件集索引节点。 |
m | 修改当前的节点 |
f | 步入空闲列表的条目 |
s | 显示指定的插槽入口 |
[0-9]+ | 显示指定的 stbl 入口 |
t | 显示格式化过的 stbl |
u | 访问父节点(不是父目录) |
d | 访问子节点 |
x | 退出子命令方式 |
<command> | 命令名称 |
<IAG number> | IAG 数量(十进制) |
a | 使用聚集节点表 |
<fileset> | 文件集数量(目前必须是零) |
e | 显示 / 修改索引节点范围映射 |
m | 修改 iag |
p | 显示 / 修改持久映射 |
w | 显示 / 修改工作映射 |
a | 使用聚集索引节点表 |
<fileset> | 文件集数量(目前必须是零) |
e | 显示 / 修改索引节点范围映射 |
m | 修改 iag |
p | 显示 / 修改持久映射 |
<inode number> | 索引节点号(十进制) |
a | 使用聚集索引节点表 |
文件集 | 文件集的数量(目前必须是零) |
m | 修改索引节点 |
t | 显示 / 修改索引节点的 b 树 |
e | 显示 / 修改索引节点的 EA |
p | 显示首要的高级块 |
s | 显示次要的高级块 |
<block number> | 块号(十进制) |
<inode number> | 索引节点号 |
{a | f} | “a”指示索引节点号是一个聚集索引节点。 “f”指的索引节点号是文件集索引节点。 |
m | 修改当前节点 |
u | 访问父节点 |
d | 访问子节点 |
n | 访问右兄弟进程 |
p | 访问左兄弟进程 |
s | 选择要查看的 xad 条目 |
x | 退出子命令方式 |
通过它们完整的名字或者使用这些名字的子集可以输入这些子命令。至少应该输入粗体字。
a[lter] <block> <offset> <hex string> | 修改磁盘数据 |
b[map] | 显示块映射 x 树的副本。 |
d[isplay] [<block> [<offset> [<format> [<count>]]]] | 显示数据。 |
h[elp] [<command>] | 提供子命令的帮助。 |
q[uit] | 退出 fsdb 命令。 |
st[able] [<block number>] | 显示总结快照表。 |
s[map] <block number> | 显示快照位图。 |
su[perblock] | 显示高级块。 |
<block> | 块号(十进制) |
<offset> | 在块的范围内的偏移量(十六进制) |
<hex string> | 十六进制位的字符串 |
<block> | 块号(十进制) |
<offset> | 在块的范围内的偏移量(十六进制) |
<format> | 显示数据的格式(见下面) |
<count> | 要显示对象的数量(十进制) |
a | 美国信息交换标准码(ASCII) | |
s | 快照段头 | |
t | 快照表页面 | |
x | x 树页面 |
<command> | 命令名称 |
<block number> | 块号(十进制) |
<block number> | 块号(十进制) |
下面的这些示例表明了在一个 JFS 文件系统中当开始了 fsdb 这个命令之后您可以使用的子命令。
386i
这个命令在索引节点格式下显示 386 索引节点。现在变成了当前的索引节点。
ln=4
ln=+1
fc
这个命令以 ASCII 码字节的形式显示与当前的索引节点相关的文件的块 0。
2i.fd
这个命令将当前的索引节点改变成为根索引节点(索引节点 2 ),然后显示与那个节点相关的第一个块中的目录条目。显示的最后的一个或者更多条目也许有一个索引节点号 0。这些是未用的目录块;这种条目不能在下一个示例操作。
d5i.fc
这个命令将当前索引节点更改成与目录字段 5 相关联的索引节点。然后,将这个文件中的第一个块以 ASCII 文本的形式显示出来。fc). 目录条目从 0 开始编号。
1b.p0o
这个命令以八进制的形式显示了文件系统中的高级块(块 1)。
2i.a0b.d7=3
这个命令将在根目录(2i)中目录条目 7 的索引节点改为 3 。这个例子也说明几个操作如何合在一行中。
d7.nm="chap1.rec"
这个命令将目录条目 7 的名称字段改成了 chap1.rec 。
a2b.p0d
这个命令显示了作为目录条目的当前索引节点的块 2 。
7b. p0S
这个命令显示了分配给在块 7 中有单独间接块的索引节点的块号。
OM
mp1.p10x
这个命令表明在当前地址的分配位图;例如,在 0M。
/usr/sbin | 包含fsdb 命令。 |
/etc/filesystems | 包含关于文件系统的信息。 |
在 AIX 5L Version 5.2 System Management Concepts: Operating System and Devices 中的 File Systems 解释文件系统类型、管理、结构和维护。
《AIX 5L V5.2 系统用户指南:操作系统与设备》中的『文件概述』提供了处理文件的信息。