对于一个在Solaris操作环境中的用户,一个文件系统就是一个文件和目录的集合用于为系统和用户保存和组织数据
对于操作系统,一个文件系统就是通过分区和允许保存和管理的数据的一个控制结构和占用空间定义的数据块的集合。
Solaris操作环境将数据保存在一个逻辑文件体系中。这个文件体系引用了通过文件系统编号形成的Solaris目录树。
每个ufs文件系统在Solaris操作环境可以使用之前必须建立在磁盘Slice上。在磁盘Slice上建立文件系统可以使Solaris操作环境保存UNIX目录和文件。
基本磁盘结构
磁盘卷标(VTOC)
磁盘卷标包括在磁盘上的分区表,并且定位在第一个磁盘扇区。一个磁盘分区可以包括一个通常为Solaris操作环境认为是有组织的目录或者文件的文件系统。
启动块
bootstrap程序(bootblk)在下15个磁盘扇区中查找。只有root文件系统才有活动的启动块,虽然每个文件系统都定位这个空间。
超级块
文件系统是通过超级块进行描述的。超级块包含在启动块后面的16个扇区中。超级块是一个包含下列信息的文件系统信息表: 。数据块编号 。柱头组编号
。数据快和碎片的长度
。硬件的描述(从卷标中导出) 。mount点的名字
。文件系统状态标志:clean,stable,active,logging,unknown
备份超级块
因为超级块包含着临界数据,所以他被复制到每一个柱头组用来防止灾难发生。当文件系统被建立之后,这个工作就已经完成了。
柱头组
通过在柱头组中分割分区(每个组的最小默认长度是16个柱头),可以改善磁盘的访问。文件系统经常通过在一个柱头组中访问文件数据来优化磁盘。如果需要,文件系统通过几个柱头组来保存文件。
柱头组块
柱头组块是一个描述柱头组的表,包括: 。inode编号
文件类型和访问模式 用户的UID和GID 文件的大小 连接数
文件最后一次的访问和修改接点的时间 分配给文件使用的数据块的总体数量 两种指针:直接指针和间接指针 直接指针:
11
共有12个对数据块直接访问的直接指针,这12个直接指针可以为一直到96K字节的容量的文件直接引用数据块。
间接指针:
有3中类型的间接指针:
。单间接指针:一个单间接指针查找一个文件系统块包含到数据块的指针。这个文件系统块包含2048个8K字节数据块的附加地址(即2048个指针),可以指向一个附加的16M字节的数据。 。双间接指针:一个双间接指针查找一个文件系统块包含单间接指针。每个间接指针查找一个文件系统块中包含的数据块指针。双间接指针可以指向的32G字节的数据。
。三倍间接指针:一个三倍间接指针可以查找超过70T字节的数据。可是,在一个ufs文件系统中的最大的文件容量是64T。
在文件系统上静止的空间称为数据块,也叫做存储块
数据块是已经分配的,在默认的情况下,在8K字节逻辑块长度中,并且更进一步的分割成1K字节的片段。
对于一个普通文件,数据块包括文件的内容。
对于目录,数据块包括在那个目录中的那些文件的文件名和他们的inode编号。
建立一个ufs文件系统
1.Root权限,在一个重新分区后的磁盘的第一个Slice上建立文件系统 # newfs /dev/rdsk/c1t3d0s7
2.Newfs命令会在检测正确的磁盘Slice之前提问确认信息。 继续则输入y,中断则输入n
newfs命令会显示关于已经被建立的文件系统的信息
第一行显示的是磁盘的基本表面数据的描述
第二行显示在这个Slice上已经建立的ufs文件系统 第三行和剩余的行列出备份的超级块的位置。
3.在其他需要包含文件系统的Slice上重复第一步和第二步
Newfs保存了1-10%的磁盘空间。可以通过newfs –m进行预先的调整minfree。(记得8的时候直接newfs的时候,minfree好象是1%) 可以通过fstyp来看minfree的情况。 Fstyp –v /dev/dsk/c0t1d0s6 |head
Newfs –m 2 /dev/dsk/c0t1d0s6
对于已经存在的文件系统可以用
Tunefs –m 1 /dev/rdsk/c0t0d0s0来进行调整。
使用fsck来解决文件系统不连续的问题。 可以采用交互模式进行fsck Fsck /dev/rdsk/c0t0d0s7
相关的一些关于超级块的修复等等在这里就不在详细描述了。(论坛中这样的帖子很多)
对于文件使用情况的检测,可以使用df du quot来查看。 Df 我们常用的参数有k ,h ,-o i –F fstye 几个参数。 Du 我们常用的几个参数是k s a
12
Quot我们常用参数是a f。
另外,以上的操作都可以通过SMC来完成。
第五章 执行mount和unmount操作
目标要求:
了解mount的基本概念 执行mount 执行unmount
访问mount的软盘,CDROM,DVD
限制访问mount的软盘,CDROM,DVD
不通过卷管理(vold)来访问软盘,CDROM,DVD Mount的基本工作原理
在solaris下,你能够把一个建立好的文件系统mount到目录结构上的任何一个点上。(通常这个点也是以目录的方式出现的)mount上的文件系统就可以被用户使用和访问了。 也可以通过unmount命令将文件系统从目录结构上分离出来。这样用户就不能使用这个文件系统了。但是,这个目录用户还是可以访问的。
(其实,在这里可以讨论一下mount点和目录的相同和不同的地方)其实,在讨论这个问题的时候,最简单的办法就是用df来确定。用df看到的就是mount点了。 确定当前文件系统的mount情况,就可以使用df命令和mount命令。 Df命令显示的是当前mount的文件系统情况。包括本地的文件系统信息和虚拟文件系统信息。 Mount命令位于/usr/sbin目录下,保持的mount情况来源于/etc/mnttab表。当mount不加任何参数的情况下,输出的信息就是/etc/mnttab表中的信息。当使用部分参数的时候,命令的缺省信息就来源于/etc/vfstab表。
Solaris提供了一种自动mount文件系统的方式。那就是/etc/vfstab表。/etc/vfstab表在系统启动的时候,自动mount文件系统。但是这个并不包括/etc/mnttab和/var/run。文件系统。
/etc/vfstab文件
默认的/etc/vfstab文件是在Solaris操作环境安装的时候基于用户的选择建立的。
无论如何,系统管理员可以在任何时候编辑/etc/vfstab文件来添加或者改变条目。
/etc/vfstab文件每行条目包括7个部分,每个部分利用tab来分开。-(破折号)指出空的区域,注释行的开头有#提示符。
要添加一行条目,需要下列信息:文件系统所在设备的位置;装配点的名字;文件系统的类型;是否在系统启动的时候自动装配;所有的装配选项。
Device to mount:被装配的设备块。例如,本地的ufs文件系统:/dev/dsk/c#t#d#s#,或者伪文件系统:/proc
Device to fsck:被文件系统检测程序检测的raw和字符设备。 Mount point:装配点
FS 类型:被装配的文件系统的类型
Fsck pass:启动时是否使用fsck检测文件系统,在此填写的包括:yes,-,0,no Mount at boot:yes使启动时使用mountall来装配文件系统,no则在启动时不装配
Mount option:这里选项可以选择 – 或者选择为logging,largefile,global等等。其实就是在你mount的时候选择-o的时候后面所跟的选项。
/etc/mnttab文件
/etc/mnttab这个文件是一个直接从kernel中提供关于在本地主机已经装配的文件系统的只读
13
信息的mntfs文件系统
mount命令维护/etc/mnttab文件,已经装配的文件系统列表每次一个文件系统被装配后,就通过mount命令在这个文件中添加一个条目。只要文件系统被卸载下来,这个条目就会从mnttab文件中删除。
Device Name:已经装配在装配点的设备的名字。这个块设备是文件系统的物理定位 Mount Point:文件系统绑定在root文件系统的装配点名或者目录名 Mount Options:列出文件系统有效的装配选项
Dev=number: mount文件系统的主,次设备编号
Date and Time Mounted:文件系统被装配到系统中的时间
/var/run文件系统是tmpfs文件系统是一个临时文件系统,它是基于pesudo的,并不是基于磁盘的。所以,并不需要通过系统重新启动来mount. 同样的/tmp文件系统和/var/run原理是一样的。
手工使用mount命令来mount文件系统。 Mount /dev/dsk/c0t0d0s7 /export/home
这个列子是按照默认方式进行mount的。它支持的选项有:read/write setuid intr logging largefiles xattr onerror
read/write:允许文件系统可以读写。 Setuid:文件系统允许setuid
Intr:允许和禁止键盘对进程进行kill
logging:指定UFS的logging 为enable Largefiles:允许大于2G的文件存在。
Xattr:支持扩展的并为发现的UNIX文件系统
onerror:指定文件系统在出现不连续的时候所进行的操作。Panic lock umount
使用mount命令的选项
当在命令行使用mount命令的选项时,要在选项前加“-o”标志。当要使用多个选项时,在-o后面的选项之间加入逗号。
Mount –o options,options,… device_name mount_point
一些选项用于装配本地文件系统,包括:ro,nosuid,noatime,nolargefiles,和logging
ro:装配的文件系统是只读的。
nosuid:在文件系统中阻止使用setuid程序。这不能限制建立setuid程序
noatime:禁止改变文件的最后访问时间,减少在不重要的访问时间的磁盘活动。指定这个选项通常是有重要文件访问时间和启动全部的进程
nolargefiles防止文件系统被装配后包含一个或者多个大文件。
如果被装配的文件系统包含大文件,在某一时间包含一个大文件,则此选项失效
补充一下,在200中没有的一段,在9和8中都有出现的一段。不知道是10的机制变了还是具体什么原因。但是,在这里还是补充上。
如果文件系统当前包含大文件,并且root需要使用这个选项装配,那么大文件必须从文件系统中移走或者删除。那么用户必须手动运行文件系统检测程序来升级超级块信息。
如果文件系统在一个时间包含大文件,装配同样失效,一般都要移走或者删除。用户必须运行文件系统检测程序来清除老的信息,并且允许文件系统被装配。 Logging使一个ufs文件系统可以保存日志。
UFS文件系统保存日志是一个储存文件系统处理的过程,或者更改整理一个完整的目录或者文件的操作,他们在应用到文件系统之前被记录入日志。当一个处理被保存时,之后一个完整的处
14
理可以被应用或者重新应用到文件系统。
Ufs日志在文件系统的空余块中。他大约1Mb/Gb,最大到64Mb
同样ufs日志延伸到最大长度,他开始写处理到文件系统。当文件系统被完整卸载后,ufs日志是空的并且所有处理都写入磁盘。
UFS保存日志有两个方面的好处。第一,他防止文件系统产生矛盾;因此,可以不去运行烦琐的fsck。第二,用户可以绕过fsck检测,减少如果关闭系统从新启动所需要的时间,除非是规定了次序的关机。
/usr/sbin/mountall命令
系统启动时,通过使用/etc/sbin/mountall来读/etc/vfstab文件;并且装配所有/etc/vfstab文件中指定为yes的文件系统。
# mountall
只装配所有在/etc/vfstab中指定的本地文件系统
# mountall –l
在装配前检测文件系统
如果文件系统是在一个安全装配并且可用的状态下,在vfstab文件中位于每个文件系统的device to fsck条目和fsck pass号码是通过fsck检测决定的。
如果文件系统被发现不可用,在尝试装配之前要先进行fsck。任何本地文件系统在fsck pass部分是“-”或者“0”,将不需要检测而直接装配。 决定一个文件系统的类型
因为mount命令需要文件系统类型是被指定到适当功能,必须明确指定,或者他将不得不根据下列文件去决定
。/etc/vfstab的FS type区域
。/etc/default/fs文件,本地文件系统类型 。/etc/dfs/fstypes文件,远程文件系统类型
如果文件系统的类型没有在命令行中指定,mount查看/etc/vfstab来决定文件系统的类型,使用块设备名,raw设备名,装配点的目录名。
如果通过搜索/etc/vfstab文件不能决定文件系统的类型,则去搜索/etc/default/fs文件和/etc/dfs/fstypes文件。
默认的本地文件系统是在/etc/default/fs中的LOCAL=fstype中指定的。
默认的远程文件系统类型是在/etc/dfs/dfstypes文件中指定的
fstyp命令
# fstyp /dev/rdsk/c0t0d0s7
卸载文件系统
/usr/sbin/umount命令
15