存储架构

ZFS文件系统调试命令zdb之补充

微信扫一扫,分享到朋友圈

ZFS文件系统调试命令zdb之补充
0

zdb命令本身是可以查阅man zdb或zdb �Chelp提供帮助的,无奈帮助太过简洁,而且省略了很多非常重要、有用的参数,正巧这几天研究,就记录一下。

以下假设pool的名称为case2.2:

zdb �Cuuu case2.2

作用:显示case2.2的活动uberblock,并显示其DVA,结果如下图所示:

zdb �Cddddd case2.2

作用:显示所有文件系统集合上的对象的详细摘要信息,导出后有用信息太多了。足够看N久的了。

zdb �Cddddd case2.2/ 4

作用:显示case2.2用户文件系统下第4号节点文件的摘要信息,包括dva信息等,如果是zdb �Cddddd case2.2 4,则表示是meta集合的第4号节点的摘要信息。

#!/bin/bash
echo "readzfsobj.sh   "
touch $3
zdb -ddddd $1/ $2 |sed -n "/^  *[0123456789abcdef]*  *L0 * /p" |awk '{print $3}'|while read line
do
    #echo "zy:$line"
    zdb -R $1 $line:r >>$3
done

作用:使用此shell脚本,配合zdb命令,即可导出指定对象,主要用于研究目录等非文件集合数据。如通过ls -i 命令知道某个目录的节点号,执行

 readzfsobj.sh case2.2 4 root.img

即可将文件系统根目录块导出成一个普通文件,再用二进制工具查看则较容易读懂mzap,fatzap的结构。

大致原理:假设有一大目录id是13,因执行zdb -ddddd case2.2 13时,会列出如下图所示目录的地址索引信息,通过sed命令过滤出这些行,再通过awk打印其中的DVA。最后,通过一行一行地执行zdb -R 命令把块导出后输入到目标文件中(本示例为去掉压缩选项后的处理方案,如果有压缩,需做针对性处置)。

引用:http://cuddletech.com/?p=407 中的一段zdb命令的说明

There are 3 arguments that are really the core ones of interest, but fefore we get to them, you absolutely must understand something unique about zdb . ZDB is like a magnifying glass, at default magnification you can see that its tissue, turn up the magnification and you see that it has veins, turn it up again and you see how intricate the system is, crank it up one more time and you can see blood cells themselves. With zdb, each time we repeat an argument we increase the verbosity and thus dig deeper. For instance, zdb -d will list the datasets of a pool, but zdb -dd will output the list of objects within the pool. Thus, when you really zoom in you’ll see commands that look really odd like zdb -ddddddddd . This takes a little practice to get the hang of, so please toy around on a small test pool to get the hang of it.

Now, here are summaries of the 3 primary arguments you’ll use and how things change as you crank up the verbosity:

  • zdb -b pool: This will traverse blocks looking for leaks like the default form.

    • -bb: Outputs a breakdown of space (block) usage for various ZFS object types.

    • -bbb: Same as above, but includes breakdown by DMU/SPA level (L0-L6).

    • -bbbb: Same as above, but includes line line per object with details about it, including compression, checksum, DVA, object ID, etc.

    • -bbbbb…: Same as above.

  • zdb -d dataset: This will output a list of objects within a dataset. More d’s means more verbosity:

    • -d: Output list of datasets, including ID, cr_txg, size, and number of objects.

    • �Cdd: Output concise list of objects within the dataset, with object id, lsize, asize, type, etc.

    • -ddd: Same as dd.

    • -dddd: Outputs list of datasets and objects in detail, including objects path (filename), a/c/r/mtime, mode, etc.

    • -ddddd: Same as previous, but includes indirect block addresses (DVAs) as well.

    • -dddddd….: Same as above.

  • zdb -R pool:vdev_specifier:offset:size[:flags] : Given a DVA, outputs object contents in hex display format. If given the :r flag it will output in raw binary format. This can be used for manual recovery of files.

阅读原文...


张宇(数据恢复)

Post-selection is cheating

上一篇

UCD from across the pond – a case study in remote UX

下一篇

您也可能喜欢

评论已经被关闭。

插入图片
ZFS文件系统调试命令zdb之补充

长按储存图像,分享给朋友