免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1704 | 回复: 0
打印 上一主题 下一主题

[新手入门] title : 文件系统(上) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-07 16:03 |只看该作者 |倒序浏览

title : 文件系统
time:5/5/2006 3:19:44 PM
第一、   JFS概念
创建日志型文件系统需要的参数:i-node的数量,Allocation Group(分配组)的大小,(Fragment)碎片的大小,日志型文件系统的日志的大小和文件系统的大小。
1、  Logic block-逻辑块
日志型文件系统建立在lv上,而它也会把lv分成等大的单元,这些单元叫logicBlock,大小一般是4K,相当于内存页的大小,所以也叫页。(疑问:logic Block跟lv下的LP概念应该是一样的,默认大小也是4k,2者是什么关系呢?)
2、碎片(Fragment)
一个逻辑块可以分成多个Fregment,是日志型文件系统的最小分配单元。
3、逻辑块的存在方式
I:LVCB,保存在第一块4K的空间上,块号为0。
II:超级块(Superblock)主超级块是块号为1的逻辑块。它主要记录了文件系统的大小、名字,日志设备的位置,版本号及文件系统的状态等信息。块号31的逻辑块是主逻辑块的备份,称为次逻辑块。(疑问:如果这个fs只要2个lp,那么那里来31号的逻辑块呢?)
III:Allocation Groups:文件系统除去上面所说的逻辑块,就是分配单元,当一个分配单元分配给目录和文件的时候,分配组就由数据块和涉及这些数据块的i-node组成。分配组的作用就是确定数据存储的物理位置。
特别不清楚的一个重要内容是这样描述:逻辑块不是有形的实体,然而逻辑块中的数据占据着磁盘的物理存储空间。逻辑块包括文件和目录,每个文件和目录由0和多个逻辑块组成。
4、超级块数据结构
# dumpfs /dev/hd4
/dev/hd4:

magic                   0x65872143      cpu type                0x0
file system type        0               file system version     1
file system size        32768           fragment size           4096
block size              4096            allocation group size   2048 (frags)
inodes/allocation grp   4096            compress                0
file system name        /               volume name             root
log device              0xa0003         log serial number       0x4f
file system state       1               read only               0
last change             Mon May  1 12:19:44 BEIDT 2006



这里显示了superblock的数据结构中记录所有信息。具体的含义目前不清楚,先有一个感性认识吧。
5、文件系统的碎片
之前我们已经提到过碎片,现在详细描述一下。
产生的原因:有时候文件很小,如果按逻辑块分配空间,那么一个1K的文件就占有4K的空间,会造成系统空间大大浪费。特别在系统中有大量小文件的情况下,问题就更加严重。所以把逻辑块分成更小的存储空间。这就是Flagment。
保存:在i-node和间接块中用一个28bit的数来保存碎片。
整理:defragfs命令可以整理存在大量的残片的磁盘。

6、每个i节点拥有的字节数(nbpi)
每个文件或目录都有一个i节点(index Node),它包含了文件或目录的基本信息,如文件的类型、访问的权限、主用户ID和文件连接数等等。
早期采用固定i节点数,每个i节点管理固定4k空间的方法,但是限制了文件的大小。
在采用碎片后,就增加了i节点的数量(Number of Byte Per i-node),这个概念比较难理解,看一个例子。
【例子】要创建一个8MB的文件系统,同时要求nbpi指为4098byte,也就是说每一个i节点可以控制一个4096字节的数据块。那么这个文件系统有?个i节点?
计算:8(MB)*1024 *1024 \4096(KB)=2048个
反过来可以知道,nbpi是文件系统大小(KB)i节点数量的比率。

7、分配位图(Allocation Bitmap)
I.碎片分配映射图(Fragment Allocation Map);记录碎片分配状态。
II.磁盘i节点位图(Disk i-node Bitmap):记录i节点的状态。

8、分配组(Allocation Group)
分配组包含i节点和数据块,这样就能够使i节点和数据块分散在整个文件系统中,使得i节点的存放位置和它指向的数据块位置在物理上尽可能靠近。这样可以提供磁盘的性能。
# lsfs -q /
Name            Nodename   Mount Pt               VFS   Size    Options    Auto Accounting
/dev/hd4        --         /                      jfs   32768   --         yes  no
  (lv size: 32768, fs size: 32768, frag size: 4096, nbpi: 2048, compress: no, bf: false, ag: 8)
默认的ag是8MB,用上门的方法可以查询到某个fs的ag。单位就是MB了。

9、压缩的日志型文件系统
AIX4.3~5L支持,好像是一个过渡产品。并且不可以在/,/usr文件系统上使用压缩。
10、JFSlog
  日志的作用是作为快速度修复的一个办法。文件系统所需的log大小可以这样算出来:
4GBfs需要2Mblog空间。那么100G空间大约需要50M空间。另外日志文件大小跟应用的I/O写操作是相关的。
11、i节点(Index Node)
反复接触的i节点现在才出场,i节点是保存文件的控制信息和数据块位置信息,就是指向文件数据块的一个指针。另外系统也保留了1个管理所有空闲i节点的位图表和管理所有空闲数据块的位图表。
一个访问文件过程大概如下:用户更加用户名访问文件,系统就会根据文件名查询对应的i节点,然后根据i节点号确定i节点的位置,最后根据i节点中地址找到存放文件具体内容的数据块。
先看看怎么获取文件i节点号
# ls -i now.txt
   17 now.txt

下面再看看i节点的内容:(JFS)
#date>now.txt
# istat now.txt
Inode 17 on device 42/4 File
Protection: rw-r--r--
Owner: 0(root)          Group: 3(sys)
Link count:   1         Length 31 bytes

Last updated:   Sat May 06 03:35:43 2006
Last modified:  Sat May 06 03:35:43 2006
Last accessed:  Sat May 06 03:36:05 2006
最后重点提一下,JFS和JFS2在结构上存在很大的差异,应该加以领会。下面开始学习fs相关的命令操作。

第二、   操作命令
1、  直接创建文件系统:crfs
# crfs
Usage: crfs -v Vfs {-g Volumegroup | -d Device} -m Mountpoint
        [-u Mountgroup] [-A {yes|no}] [-t {yes|no}] [-p {ro|rw}]
        [-l Logpartitions] [-n nodename] [-a Attribute=Value]
分析一下JFS文件系统属性
-a ag={8,16,32,64}
bf={true|false}//是否允许创建巨型文件的文件系统
compress={no|LZ}压缩算法
frag={512|1024|2048|4096}文件碎片
logname= lvname//指定日志文件的卷名,默认是使用卷组已存在的日志设备。
nbpi={512|1024|..65536|131072}//指定每个i节点拥有的字节数。默认是4096byte。
size=Value //可以使用M/G表示单位mb/gb.

2、  在已经存在的设备上创建文件:mkfs
# mkfs
Usage: mkfs [-b BootProgram] [-i Inodes] [-l Label] [-o Options] [-p Prototype]
        [-s Size] [-v VolumeLabel] [-V vfs] {Device|Filesystem}
这个设备是指已经在/dev 下存在的目录。这个命令是利用现成的设备文件来建立文件系统,但是测试时没有搞懂,重点关注一下Device参数,如果这个参数一个块设备名、RAW名或文件系统名,如果是文件系统名mkfs就会从/etc/filesystems获取其他参数。
       如果参数是lv,mkfs就会初始化(格式化)lv、文件系统标签、启动块。
3、  在已经存在的逻辑卷上创建文件系统。smit crjfsstd
                      Add a Standard Journaled File System

Type or select values in entry fields.
Press Enter AFTER making all desired changes.

                                                        [Entry Fields]
*LOGICA   LVOLUME    name   []                                     +
* MOUNT POINT                                        []
  Mount AUTOMATICALLY at system restart?             no                    +
  PERMISSIONS                                       read/write            +
  Mount OPTIONS                                    []                     +
  Start Disk Accounting?                              no                      +
  Fragment Size (bytes)                               4096                    +
  Number of bytes per inode                           4096                    +
  Allocation Group Size (MBytes)                      8                       +

4、  创建RAM DISK文件系统
创建内存文件系统之前先在创建内存盘 #mkramdisk – size [M|G]。此命令在属于bos.rte.filesystems文件集,由于本机目前没有这个文件集。无法试验。这个命令比较简单,ramdisk会在系统重启后自动删除,需要手动删除使用rmramdisk。创建一个20M的ramdisk可以使用这样的过程。
#mkramdisk 40000(20×512)
/dev/rramdisk0
#mkfs –V jfs /dev/ramdisk0
#mkdir /ramdisk
#mount

5、  监视文件系统
a:/etc/filesystems的文件结构及表示的属性
/home:
文件安装点
dev       = /dev/hd1
逻辑设备,一般是逻辑卷
vol       = "/home"
卷标
mount     = true
安装方式见1
check     = true
是否在fsck默认情况下检查
free      = false

vfs       = jfs
Mount的类型,一个是jfs、jfs2、cdrfs、nfs
log       = /dev/hd8
此文件系统的日志设备,
account = false
是否记帐
type=

size=
大小(512byte为单位)
nodename=
节点名,如果为nfs则有此字段,否则没有.
options
mount 时的选项
1可以有automatic:系统启动时自动安装;true:mount all会处理的。当然系统启动时候会运行mount all一次。umount同样有效;false:不会自动安装需要手动安装;readonly:只读的安装方式。
b./etc/vfs
%defaultvfs     jfs     nfs //默认的文件系统类型
[fs类型名 类型代码 安装助手路径    助手程序路径名]
cdrfs   5       none                    none
jfs     3       none                    /sbin/helpers/v3fshelper
????:何为安装助手?何为助手??

c.用lsfs命令
# lsfs
Name   Nodename   Mount Pt    VFS   Size    Options    Auto  Accounting
/dev/hd4        --         /      jfs   32768    --         yes   no
# lsfs -q
Name  Nodename    Mount Pt     VFS   Size    Options    Auto  Accounting
/dev/hd4        --         /       jfs   32768   --         yes    no
(lv size: 32768, fs size: 32768, frag size: 4096, nbpi: 2048, compress: no, bf: false, ag: 8)
# lsfs -c // 使用冒号隔开,方便编程处理
#MountPoint:Device:Vfs:Nodename:Type:Size:Options:AutoMount:Acct
/:/dev/hd4:jfs::bootfs:32768:rw:yes:no

d.检查文件系统空间使用情况 :df
df  [-P] | [-I Mitv] [-k] [-s] [filesystem ...] [file ...]
这个命令在日常维护中非常重要,这样可以发现很块满的文件系统.需要进行清理或者扩充了.另外留意一下,df只能检查已经mount的文件系统。
-v显示说有信息
-I 显示使用的i节点数.
特别说明其中一种用法:
# df now.txt
Filesystem    512-blocks      Free          %Used    Iused   %Iused    Mounted on
/dev/lv01         262144    253704           4%       21     1%   /home/ftpDir
如果指定file参数,会返回file所在文件系统的情况。

e.显示文件大小
这个操作应该ls –l 也可以做到。另外du也可以,并且这2个操作返回结果是有差异的。
# ls -l now.txt  //返回文件本身大小,以byte计算。
-rw-r--r--   1 root     sys           31 May 06 03:35 now.txt
# du now.txt //返回512byte为单位的块数。
1       now.txt
两者的关系应该跟windows中的文件大小和占有的空间大小类似。比如上面now.txt文件是31byte大,但是它必须占有1个Flagment大小的空间。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/17046/showart_109351.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP