Chinaunix首页 | 论坛 | 博客
  • 博客访问: 365717
  • 博文数量: 93
  • 博客积分: 3010
  • 博客等级: 中校
  • 技术积分: 879
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-06 23:29
文章分类

全部博文(93)

文章存档

2014年(2)

2011年(1)

2010年(2)

2009年(6)

2008年(6)

2007年(13)

2006年(63)

我的朋友

分类:

2006-05-07 16:03:28

title : 文件系统
time:5/5/2006 3:19:44 PM
第一、   JFS概念
创建日志型文件系统需要的参数:inode的数量,Allocation Group(分配组)的大小,(Fragment)碎片的大小,日志型文件系统的日志的大小和文件系统的大小。
1、  Logic block-逻辑块
日志型文件系统建立在lv上,而它也会把lv分成等大的单元,这些单元叫logicBlock,大小一般是4K,相当于内存页的大小,所以也叫页。(疑问:logic Blocklv下的LP概念应该是一样的,默认大小也是4k2者是什么关系呢?)
2、碎片(Fragment
一个逻辑块可以分成多个Fregment,是日志型文件系统的最小分配单元。
3、逻辑块的存在方式
ILVCB,保存在第一块4K的空间上,块号为0
II:超级块(Superblock)主超级块是块号为1的逻辑块。它主要记录了文件系统的大小、名字,日志设备的位置,版本号及文件系统的状态等信息。块号31的逻辑块是主逻辑块的备份,称为次逻辑块。(疑问:如果这个fs只要2lp,那么那里来31号的逻辑块呢?)
IIIAllocation 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节点?
 计算:8MB*1024 *1024 \4096(KB)=2048
反过来可以知道,nbpi是文件系统大小(KBi节点数量的比率。
 
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)
默认的ag8MB,用上门的方法可以查询到某个fsag。单位就是MB了。
 
9、压缩的日志型文件系统
AIX4.35L支持,好像是一个过渡产品。并且不可以在/,/usr文件系统上使用压缩。
 10JFSlog
  日志的作用是作为快速度修复的一个办法。文件系统所需的log大小可以这样算出来:
4GBfs需要2Mblog空间。那么100G空间大约需要50M空间。另外日志文件大小跟应用的I/O写操作是相关的。
11i节点(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
最后重点提一下,JFSJFS2在结构上存在很大的差异,应该加以领会。下面开始学习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获取其他参数。
       如果参数是lvmkfs就会初始化(格式化)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 –[u] size [M|G]。此命令在属于bos.rte.filesystems文件集,由于本机目前没有这个文件集。无法试验。这个命令比较简单,ramdisk会在系统重启后自动删除,需要手动删除使用rmramdisk。创建一个20Mramdisk可以使用这样的过程。
mkramdisk 4000020×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的类型,一个是jfsjfs2cdrfsnfs
log       = /dev/hd8
此文件系统的日志设备,
account = false
是否记帐
type
 
size
大小(512byte为单位)
nodename
节点名,如果为nfs则有此字段,否则没有.
options
mount 时的选项
1可以有automatic:系统启动时自动安装;truemount 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大,但是它必须占有1Flagment大小的空间。
阅读(764) | 评论(0) | 转发(0) |
0

上一篇:存储管理(下)

下一篇:文件系统(下)

给主人留下些什么吧!~~