会员控制台 会员登陆 会员注册 最后更新 高级搜索 会员投稿 退出登陆
设为首页
收藏本站
留言给我
  首页 | 操作系统类 | 程序设计类 | 数据库类 | 应用服务类 | 网络及硬件类 | 其他技术 | GBunix论坛
操作系统类
程序设计类
数据库类
应用服务类
网络及硬件类
其他技术
Unix中文 / 操作系统类 / Solaris / 使用Solaris上的filestat工具
使用Solaris上的filestat工具
2005-01-07    eygle    blog.eygle.com    点击:
使用Solaris上的filestat工具

Solaris Internals: Core Kernel Architecture的作者在书中提到一个用以产看文件inode及block分配情况的工具:filestat

这是一个非常有用的工具,有助于我们理解Solaris中空间管理及分配。
通过这个工具也可以帮助我们察看文件碎片是否严重,是否需要进行整理或重组。

其输出非常简单和直观:

# filestat /home/rmc/bigfile

Inodes per cyl group:       64
Inodes per block: 64

Cylinder Group no:          0

Cylinder Group blk:         64

File System Block Size:     8192

Device block size:          512

Number of device blocks:    204928

Start Block    End Block    Length (Device Blocks)
----------- ----------- ----------------------

      66272 -> 66463        192

      66480 -> 99247        32768

    1155904 -> 1188671      32768

    1277392 -> 1310159      32768

    1387552 -> 1420319      32768

    1497712 -> 1530479      32768

    1607872 -> 1640639      32768

    1718016 -> 1725999      7984

    1155872 -> 1155887      16

Number of extents:          9

Average extent size:        22769 Blocks


以下讨论基于UFS文件系统:

我们知道inode包括2类指针:直接指针(Direct Pointers)和间接指针(Indirect Pointers)

1.直接指针

共有12个对数据块直接访问的直接指针,按照8k的块大小分配。

这12个直接指针可以为一直到96K(12x8k=96k)字节的容量的文件直接引用数据块。

2.间接指针

有3种类型的间接指针:

一级间接指针:一个一级间接指针使用一个文件系统块记录到数据块的指针。这个文件系统块包含2048个8K字节数据块的附加地址(即2048个指针),可以用以标示和定位16M字节的数据。

二级间接指针:一个二级间接指针使用一个文件系统块进行空间扩展。一个文件系统块记录2048个指针,每个指针指向下一级间接指针,每个二级间接指针可以继续定位2048个数据块。由此,二级间接指针可以指向的32G字节的数据。

三级间接指针:类似的一个三级间接指针可以查找超过70T字节的数据。可是,在一个ufs文件系统中的最大的文件容量是1T。

通过下图我们可以直观的看到inode的层次及结构:



回过头来看我们前面的filestat输出:
.......
66272 -> 66463 192
66480 -> 99247 32768
1155904 -> 1188671 32768
1277392 -> 1310159 32768
1387552 -> 1420319 32768
1497712 -> 1530479 32768
1607872 -> 1640639 32768
1718016 -> 1725999 7984
1155872 -> 1155887 16
......

我们可以看到,第一个extent分配了192个操作系统块(512bytes/os block),192x512/1024=96k,正好是inode的一级块。
而此后的6个extent都是32768个os block,正好是16M。

如果大家注意一下的话,以上结构非常类似Oracle9i开始提出的ASSM位图管理,Oracle使用三级位图块来分配管理空间。

再来看一下我的系统中文件分配空间的情况:

bash-2.03# filestat 11.dbf

Inodes per cyl group:       5632

Inodes per block:           64

Cylinder Group no:          0

Cylinder Group blk:         64

File System Block Size:     8192

Device block size:          512

Number of device blocks:    204944

Start Block    End Block    Length (Device Blocks)
----------- ----------- ----------------------

    5884448 -> 5884639      192

   15943328 -> 15976095     32768

   16027760 -> 16060527     32768

   16120192 -> 16134495     14304

   16144560 -> 16163023     18464

   16397536 -> 16404735     7200

   16419440 -> 16445007     25568

   16767328 -> 16774479     7152

   16791696 -> 16817311     25616

   16948016 -> 16974751     26736

   16978960 -> 16984991     6032

   17040480 -> 17048495     8016

Number of extents:          12

Average extent size:        17078 Blocks


我们注意到,在这个文件中从第四个extent开始,空间分配开始不再连续,如果一个文件碎片过多,同样可能出现性能问题。

该工具可以在以下地址下载:下载地址

了解更多详情,参与讨论,请进入GBUNIX论坛

http://www.gbunix.com/bbs/index.php
责任编辑: trotter

相关文章
防火墙技术与网络安全 - 11-03 04:49 pm - 点击: 813

发表评论 查看评论 加入收藏 Email给朋友 打印本文
给该文章评分
1 2 3 4 5 6 7 8 9 10
平均得分 0, 共 0 人评分
1 2 3 4 5 6 7 8 9 10
发表评论
标题:
内容:
声明:本站资讯均来自互联网,所有文章版权归原作者和出版者所有,如涉及版权问题,请来信告知!
Copyright © 2002-2004 GBunix.com. All rights reserved.