- 论坛徽章:
- 0
|
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 |
|