solaris_IP 发表于 2008-11-08 21:08

ufs文件系统


                                                                                               
                                1.建文件系统-newfs
建文件系统easy.
# newfs /dev/rdsk/c1t3d0s0
# newfs /dev/rdsk/c1t3d0s7
......
建完文件系统就可以用了,vi啊,touch啊,pkgadd啊,patchadd啊,等等.
2.介绍ufs文件系统的basic support structuers。
1)Disk Label-(VTOC)磁盘标签-(卷表)
VTOC包含磁盘的分区表。VTOC保存在磁盘第一个扇区上(512B块)。-第一个512B是sector 0即扇区0。
尽管在任何slice上创建的文件系统都把第一个扇区留出来给VTOC,但是只有第一个磁盘分区包含VTOC。
2)Data Block(数据块)
bootstrap程序(bootblk引导块),紧跟在VTOC后面,保存在扇区1~扇区15这15个扇区上。
只有/根文件系统有激活的引导块。但是,在每个文件系统开始的位置都分配一个引导块。
3)Primary Superblock-主超级块
超级块,紧跟在引导块后面,保存在扇区16~扇区31这16个扇区上。
超级块是一个信息表,包含如下信息:
a.数据块的数量
b.柱面组的数量(CG)
c.数据块和段的大小(段:fragement)
d.来源于label的硬件描述
e.挂接点的名字
f.文件系统的状态flag:clean,stable,active,logging和unknown。
4)Backup Superblock-备份超级块
当文件系统创建的时候,每个柱面组(CG)都从扇区32开始复制超级块。这些副本保护超级块里的critical数据以免灾难性的丢失。
5)Cylinder Group(CG)-柱面组
每个文件系统都被分成柱面组,最小缺省大小是16个柱面一组。柱面组(CG)提高了磁盘访问。
文件系统经常地优化硬盘性能是通过试图把文件数据放到单一的柱面上(single CG),这样就减少了读写头访问数据必须的travel的距离。如果需要的话,文件系统把大文件存储在几个柱面组(CG)上面。
6)Cylinder Group Block-柱面组块(CGB)
柱面组块是在每个柱面组里面是一个描述柱面组的表。包含:
a.i节点数量
b.柱面组(CG)里数据块的数量
c.目录的数量
d.柱面组(CG)里面的空闲块,空闲i节点和空闲段(fragment)
e.空闲块映射
f.已经使用的i节点映射
7)ufs的inode
一个inode包含文件的下面信息:
a.文件类型和访问模式
b.文件owner和Group的UID和GID的数量
c.文件的大小
d.连接数量
e.文件最后一次被访问和修改,以及I节点被改变的日期和时间
f.被这个文件使用或者分配给这个文件的总共数量
g.2种类型指针:直接指针和间接指针
note:×××查看文件和目录inode信息用ls -l或者ls -i
直接指针*p:
I节点里直接指针有12个直接指针(0~11),每个指针都包含文件第一个12个数据块的地址,这12个指针每个可以参考8K大小的数据块,总共的大小可以到达96K。
间接指针:
**p
***p
****p
8)Data Block-数据块
分给ufs文件系统的剩余空间包含数据块(data block)。缺省地,数据块逻辑上块大小8K。每个块还会再细分成1K的段(fragment)。对于一个普通文件,数据块包含文件的内容。对于一个目录,数据块包含i节点相关的入口,文件s的文件名和目录包含的目录s。
一个文件系统里,那些没有被文件使用的文件、目录、间接指针和存储快块被在柱面组映射(CG MAP)标记伪空闲块。这个柱面组映射也保持段的磁道去防止硬盘性能的降低。
9)Fragement-段
段是ufs文件系统分配磁盘空间更有效的方法。文件大小96KB的文件,专门分配满数据块,从来部用段(Fragement)。
如果包含在1个段的文件增加,要求更多的空间,那么在同一个数据块里的一个或者更多的另外的段。
如果文件file1有4k,file2有3k,且file1和file2在同一个数据块上,这个时候file1要扩3k,那么file1整个文件都会被ufs文件系统挪到另外一个空闲数据块上。ufs文件系统的这种需求确保一个文件的所有段都包含在一个整的数据块上。ufs文件系统不允许同一个文件的段存在2个不同的数据块上。
3.newfs命令
1)
# newfs /dev/rdsk/c1t3d0s7
newfs: construct a new file system /dev/rdsk/c1t3d0s7: (y/n)? y
/dev/rdsk/c1t3d0s7: 6295022 sectors in 1753 cylinders of 27 tracks, 133
sectors 3073.7MB in 110 cyl groups (16 c/g, 28.05MB/g, 3392 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
32, 57632, 115232, 172832, 230432, 288032, 345632, 403232, 460832,
518432, 5746208, 5803808, 5861408, 5919008, 5976608, 6034208, 6091808,
6149408, 6207008, 6264608,
#
2)
newfs命令预留1%~10%的文件系统空间用来维护,依赖于文件系统的大小。这个空闲的空间,参考minfree值。在创建新文件系统时候,newfs -m %free 预先设置空闲空间的百分比。
# fstyp -v /dev/dsk/c0t1d0s6 |head
假如结果:minfree 10%
# newfs -m 5 /dev/dsk/c0t1d0s6
# fstyp -v /dev/dsk/c0t1d0s6 |head
预期结果:minfree 5%
调整minfree另外的方法,tunefs
假如把minfree=5%,改为2%
# tunefs -m 2 /dev/dsk/c0t1d0s6
minimum percentage of free space changes from 5% to 2%
4.文件系统检查-fsck
1)什么时候用fsck?
答:文件系统被损坏的时候。像掉电,kernel的软件错误,硬件错误,或者不正当的关机。
2)fsck干什么用的?
fsck是一个文件系统检查程序。检查文件系统的数据一致性,并试图更正或者修复任何被发现的不一致或者被损坏的数据。
3)
fsck不能用在已经挂接的文件系统上,必须得把文件系统umount下来。如果是文件系统是/,/usr,/var,那么这些文件系统的fsck必须在单用户模式下进行。
每次OS引导时,OS都会决定那个文件系统需要运行fsck。在文件系统挂接前,fsck检查并修复任何遇到的问题。
4)4种类型的不一致性
a.超级块的不一致性(superblock)
包含像文件系统的大小,空闲块数量,空闲结点数量
b.柱面组块数量(CG块)的不一致性
检查i节点声明了但未分配的数据块,未分配的数据块数量和为分配的I节点数量。
c.inode的不一致性
fsck检查inode分配状态,还有类型,连接数,复制块(这种块被另外的inode也声明了),坏块,inode大小和每个inode的块数量。lost+found目录。
d.数据块的不一致性
lost+found目录
fsck把那些分配了但是没有被引用的文件和目录放到当前文件系统的lost+found目录下。里面的文件名是每个文件的inode号。如果lost+found目录不存在,那么fsck命令就创建它。如果lost+found目录空间不够了,那么fsck增减目录的大小。
fsck要求是root用户。
fsck /dev/rdsk/c1t0d0s3-----/etc/vfstab文件里没有slice3的当前挂接电
fsck /export/home------/etc/vfstab里面slice3对应的文件系统是/export/home
fsck -o f,p /dev/rdsk/c1t0d0s3
5)解决文件系统一致性
a.重新连接分配了但是没有被使用的文件
RECONNECT?
b.调整连接数量
ADJUST?
CLEAR?/REMOVE
c.回收空闲列表
SALVAGE?
d.使用备份超级块
fsck -o b=32 /dev/rdsk/c1t0d0s3
fsck对比backup超级块和实际的文件系统,并试图重新创建superblock。但是如果这个文件系统的第一个backup超级块也坏了的话,那么这个backup超级块也用不了了,只能用别的备份超级块了。方法如下:
# newfs -N /dev/rdsk/c1t3d0s3--不是创建FS,而是查看FS参数。
# newfs -N -T /dev/rdsk/c1t3d0s3-----(-T是考虑多T的文件系统)
# fsck -o b=57632 /dev/rdsk/c0t0d0s3 (这里的b=57632里的57632,要看实际newfs -N的结果)
5)管理文件系统
df(-a,-b,-e,-k,-h,-l,-F)
du(-s,-k,-a)
quot()
df:
-a:结果是所有文件系统,包括在/etc/mnttab文件里被忽律的文件系统。
-b:结果是空闲KB的总数。
-e:结果是只显示空闲文件的数量。
-k:结果是磁盘分配,单位是KB。
-h:结果和-k一样,只不过是易读(像15K,100MB,12G,3T...)
-l:结果只显示本地文件系统
-F:指定文件系统类型。这个要求文件系统是被umount下来的。
例如:# df -k /dev/dsk/c0t1d0s3
这个例子里,虽然slice3不能是一个没有文件系统的分区,但是slice3可以是暂时没有挂接的文件系统。
du:
-k:结果是磁盘使用情况,单位是KB.
-s:结果是显示使用的总和,单位是512B。用-sk一起用,那么显示结果是以KB为单位的。
-a:结果显示所有文件块使用的数量,还有指定目录下的目录。
quot:
-a:结果是所有挂接的文件系统。
-f:包含文件的数量。
5.我姑妄说之,您姑妄听之。
创建文件系统就根XP里面格盘一样的。
slice 0~slice7,就类似于C,D,E,F....盘
newfs,就相当于点D盘->右键->格式化差不多。
fsck,就根电脑掉电了,开机修复D盘,E盘差不多。
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/84098/showart_1387952.html
页: [1]
查看完整版本: ufs文件系统