- 论坛徽章:
- 0
|
第三章 管理Solaris OE文件系统
目标
·描述Solaris OE文件系统
·创新的ufs文件系统
·使用fsck检查文件系统
·解决文件系统不一致性问题
·监控文件系统
第一节 Solaris OE文件系统介绍
文件系统是文件与目录的结构化的信息集合。Solaris OE支持三种不同类型的文件系统
·基于磁盘的文件系统
·分布式文件系统
·伪文件系统(Pseudo file systems)
基于磁盘的文件系统
基于磁盘的文件系统是建立在硬盘、CDROM、软盘及DVD上的。下面的基于磁盘的文件系统的例子:
·ufs-Solaris OE中的UNIX文件系统,基于Berkeley快速文件系统
·hsfs-High Sierra文件系统是特定用途的文件系统,是为在CDROM介质上使用而开发的
·pcfs-PC文件系统是DOS FAT32文件系统的UNIX实现。pcfs文件系统允许Solaris OE访问PC-DOS格式的文件系统。用户可以使用UNIX命令对PC-DOS文件进行直接读写。
·udfs-该文件系统用于访问光存储介质上的系统。如DVD与CDROM。UDF文件系统允许一般的(universal)数据交换,支持读写操作。
分布式文件系统
分布式文件系统提供对文件系统资源的网络访问。
·NFS-网络文件系统,允许用户在网络上各种类型的系统间共享访问文件。NFS文件系统在一个系统组成文件系统的一部分,就象它是本地目录树的一部分一样。
伪文件系统
伪文件系统是基于内存的。这些文件系统提供更好的系统性能,此外还提供对内核信息和结构的访问。伪文件系统包括:
·tmpfs-在内存中存放文件的临时文件系统,它避免了写基于磁盘的文件系统的过度负载。tmpfs文件系统在每次系统重启时都会被创建与销毁。
·swapfs-交换文件系统,被内核使用来管理硬盘上的交换空间。
·fdfs-文件描述符文件系统,提供对打开的文件的明确的名字,使用在/dev/fd目录中的文件描述符(例如,/dev/fd/0,/dev/fd/1,/dev/fd/2)
·procfs-进程文件系统,在/proc目录中包含了一个当前活动的进程的文件列表。这些进程按进程号被列出。如ps之类的命令使用该目录中的信息。
·mntfs-挂载文件系统,提供内核中有关本地挂载的文件系统的只读信息。
第二节 创建新的ufs文件系统
本节描述Solaris OE中的ufs文件系统。
Solaris OE ufs文件系统视图
Solaris OE中,用户对ufs文件系统的视图不同于操作系统的ufs文件系统视图。对于用户,文件系统是一个文件与目录的集合,里面组织存放了系统及其用户可以访问的数据。对于操作系统,文件系统是占用由分区定义的空间的控制结构和数据块集合,有了这个集合才能进行数据存储和管理。
Solaris OE把数据存放在一个逻辑的文件层次结构中,这通常包含了几个文件系统。文件体系结构被称为Solaris目录体系结构。
图3-2显示了Solaris OE的体系结构,以根目录开始。
注意:图3-2不是完整的Solaris OE目录体系结构
Solaris OE在使用ufs文件系统之前,要在磁盘分片上构建ufs文件系统。在硬盘分片上创建一个ufs文件系统,就能让Solaris OE存放UNIX目录与文件。
图3-3了ufs文件系统是如何位于不同的硬盘分片上的。
Solaris OE ufs文件系统包含如下的基本结构:
·磁盘卷标(Disk label (VTOC))
磁盘卷标(VTOC)包含了磁盘的分区表。VTOC驻留在第一个磁盘扇区内(512字节大小的块)。只有第一个磁盘分片有VTOC
,虽然在任何分片上的文件系统跳过了第一个扇区,以免它包含了VTOC。
·启动块
自举程序(bootblk)驻留在15个磁盘扇区内(1-15号扇区),位于VTOC记录之后。只有根文件系统有活动的启动块。然而,每个文件系统的开始部分都留有启动块。
·主超级块
超级块占据了16个磁盘扇区(16-31号扇区),位于启动块之后。超级块是一个描述文件系统的信息表,包括:
①数据块的数量
②柱面组的数量
③数据块与碎片(fragment,含义拿不准)的大小
④硬盘的描述,来自于卷标
⑤挂载点的名字
⑥文件系统状态标志:干净、稳定、活动、日志或者未知
·备份超级块
创建文件系统时,每个柱面组都从扇区32开始复制超级块。这些复制使超级块中的关键数据可以在灾难性的丢失时被恢复。
柱面组
每个文件系统都被划分分为柱面组,默认值最小每个柱面组有16个柱面。柱面组可以提高硬盘的访问性能。
文件系统总是尝试将文件的数据放入一个柱面组中,以优化磁盘的性能,这能减少磁头访问文件的数据时需要穿过的距离。如果放不下,文件系统在连续几个柱面组中存放大文件。
柱面组块
柱面组块是每个柱面组都有的一张表,它描述柱面组,包括:
·inode的数量
·柱面组的数据块数
·目录的数量
·柱面组中自由块,自由inode与自由碎片(fragment,姑且还是这样翻吧)
·自由块图
·自由inode图
图3-4显示了ufs文件系统中的柱面组。
ufs inode
inode中包含关于文件的如下信息:
·文件的类型与访问模式
·用户标识符与组标识符
·文件的大小
·链接计数
·文件最后被访问与修改,且inode更改的时间(这里涉及一个问题,有时候由于系统故障,当文件被修改以后,inode不会被修改,这时文件系统就处于不一致的状态)
·文件使用的或分配给文件的数据块的总数
·两种类型的指针:直接指针与间接指针
图3-5显示了包含在inode中的一些信息。
注意:查看文件或目录中包含的一些信息,可以使用ls -l命令,要查看分配给文件或目录inode号,使用ls -i命令。
直接指针
在inode内有12个直接指针,其中包含了指向文件开始的12个数据块的地址。这12个指针可以引用8K字节的数据块,对于文件来说,可以到96K字节大小。
间接指针
inode内部有三种类型的间接指针:
·一级间接指针-指向一个文件系统块,该块中包含了指向其它数据块的指针。此文件系统块包含了可以指向2048个系统块的指针,可以再存储16M的数据。
·二级间接指针-指向一个文件系统块,其中包含了一级间接指针。每个一级间接指针都指向一个文件系统块包含指向数据块的指针。二级间接指针指向的空间可以再存储32G的数据。
·三级间接指针-可以再引用64T的数据。然而,ufs文件系统的最大文件容量被限制在1T字节,因为设备驱动器的32位寻址空间就是1T(2的32次方?)
数据块
分配给ufs文件系统的剩下的空间用于容纳数据块。数据块默认以的逻辑块大小-8K字节分配。数据块被进一步划分为1K大小的分片。对于普通文件,数据块包含文件的内容。对于目录,数据块包含目录中文件与目录的inode号与文件名(目录名)关联的条目。
在文件系统内,没有被用作文件、目录的信息与数据块、间接地址块及存储块的空闲块,在柱面组位图中被标识为自由块。柱面组位图也跟踪碎片,以防止磁盘性能下降。
碎片
碎片是ufs文件系统用于有效分配磁盘空间的方法。小于96K字节的文件以碎片方法(fragmentation)存储。
数据块被默认分为8个碎片,每片大小为1K。碎片存储小于8192字节的文件与文件片(如文件有9002字节大小,那么它将放在一个数据块(8192字节)及一个碎片(大小为1024,使用了100字节)中)。当文件大于96K时,碎片不会被分配,而此时全块都被文件独占使用。
图3-6显示了数据块中的碎片。
如果存储在碎片中的文件的大小增长了,ufs文件系统会在同一数据块中另分配一个或多个碎片给文件。
图3-7显示了在同一数据块内两个存储于碎片中的不同的文件。
例如,如果file1需要比共享数据块中空闲空间更大的空间,那该增长的文件的所有内容会被ufs文件系统移至一个新的数据块中。这是ufs文件系统的特性,以确保文件的所有的碎片都在一个完整的数据块中。ufs文件系统不允许同一文件的碎片被存储在两个不同的数据块中。
使用newfs命令
必须在每个硬盘分区中创建文件系统才能使用磁盘存储目录或者文件。系统管理员可以使用newfs命令在磁盘分片上创建ufs文件系统。
newfs命令是mkfs命令的更好使用的前端界面,mkfs用于创建文件系统。newfs命令位于/usr/sbin目录中。
注意:newfs命令是破坏性的。它会破坏操作的硬盘分片上的数据。
使用newfs命令创建ufs文件系统,可分为如下几步:
1、作为root,使用如下命令在一个新分区的硬盘的第一个分片上创建文件系统:
# newfs /dev/rdsk/c1t3d0s0
2、newfs命令在继续前会要求用户确认,请确认操作的对象是恰当硬盘上的恰当分片。继续按y,退出按n。
newfs: construct a new file system /dev/rdsk/c1t3d0s0: (y/n)? y
newfs命令显示被创建的文件系统的信息。
/dev/rdsk/c1t3d0s0: 410720 sectors in 302 cylinders 17 tracks 80 sectors
200.5MB in 19 cyl groups (16 c/g, 10.62MB/g, 5120 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
32, 21872, 43712, 65552, 87392, 109232, 131072, 152912, 174752, 196592,
218432, 240272, 262112, 283952, 305792, 327632, 349472, 371312, 393152
newfs命令输出的第一行描述了基本的硬盘几何参数(geometry)。第二行描述了在此分片中创建的ufs文件系统。第三行以下列出的是备份的超级块的扇区位置。
注意:该过程同时也为ufs文件系统创建一个lost+found目录,该目录被文件系统检测与修复工具(fsck)所使用。
3、重复第一步和跟二步,对硬盘上的每个分片都进行操作。
newfs命令为文件系统的维护保留了百分之一到十的空间。自由空间,由minfree参数所指定,指示分片上保留的或不让普通用户使用的空间量。在创建新文件系统时,可以使用newfs -m %free命令预设空闲空间的百分比。
要显示文件系统的minfree值,可使用fstyp命令。
下面的命令显示了在设备c0t0d0s0上的文件系统的minfree值。
# fstyp -v /dev/rdsk/c0t0d0s0 | head -10
要更改已有的文件系统的自由空间的最小百分比值,可以使用tunefs -m %free命令。
下面的命令改变/dev/rdsk/c1t3d0s0上的文件系统的自由空间最小百分比值为1%。
# tunefs -m 1 /dev/rdsk/c1t3d0s0
第三节 使用fsck命令检查文件系统
文件系统可能会由于掉电崩溃、内核中的软件错误、硬件失效或者不恰当地关闭系统而损坏。系统文件检测程序,fsck,检测文件系统的数据不一致状态,并试图修正或者修复任何发现的不一致或损坏。
注意:不要在挂载的文件系统上运行fsck命令。这可能会让文件系统处于不可用的状态,也可能删除数据。/,/usr与/var文件系统应该在单用户模式下才能用fsck命令检测修复。
每次系统启动时,操作系统会判定fsck将检测哪个文件系统。在文件系统被挂载前,fsck命令会检测与修复文件系统遇到的任何问题。
注意:文件系统的状态标志位的值决定了文件系统是否需要使用fsck命令扫描。当状态标志位是“clean”,“stable”,“logging"时不会运行文件系统扫描。
fsck命令检测的数据不一致性
fsck命令扫描一个文件系统分为几个阶段。在每个阶段中,fsck命令检测几种类型的文件系统不一致性。
超级块一致性
文件系统的超级块不一致性检测包括几个参数,如文件系统大小,自由块计数,与自由inode计数。
柱面组块一致性
fsck命令检测任何由inode声明的未分配数据块,未分配的数据块,与未分配的inode计数。
inode一致性
fsck命令检测inode的分配状态,以及类型,链接计数,重复块(已经被其它inode使用的块),坏块,inode大小,及每个inode的块计数。任何未分配而有非0的引用计数的的inode会被链接到文件系统的lost+found目录中。
数据块一致性
fsck不会检测普通的数据块,但它会查检目录数据块。在目录数据块中,fsck命令检测inode是否指向未分配的块,未分配而已标记为使用的块,未分配而标记为空闲的块(不正确的.与..目录inode)与未链接到文件系统中的目录。这些目录被链接回文件系统的lost+found目录中。
lost+found目录
fsck命令将已分配但未被引用的文件与目录放入文件系统的lost+found目录中。文件的名字以其inode号指定。如果lost+found目录不存在,fsck命令会创建它。若在lost+found目录中没有足够的空间,fsck命令会增加目录的大小。
非交互式模式
系统正常启动时,fsck命令在非交互式模式下运行,该模式也被称为preen或silent模式。此模式中,fsck命令只记录输出轻微且可被纠正的不一致性问题。如果发生了严重的文件系统不一致性问题,fsck程序会停止并要求输入root密码进入单用户模式,以交互模式继续执行fsck命令。
交互式模式
在交互模式下,fsck命令列出它检测到的每个问题,并跟随建议的纠正操作。即要求用户指示操作进行(输入yes)或者不进行(输入no)。
# fsck /dev/rdsk/c0t0d0s7
** /dev/rdsk/c0t0d0s7
** Last Mounted on /export/home
** Phase 1 - Check Blocks and Sizes
INCORRECT BLOCK COUNT I=743 (5 should be 2)
CORRECT?
如果回答yes,fsck命令执行纠正操作并继续。如果回答no,fsck命令重复关于原问题的fsck消息,并提出纠正操作建议,不一致性不会被修复,除非你回答yes。
下面的例子演示系统的root用户如何运行fsck命令检测文件系统的完整性:
·检测一个未挂载的文件系统,执行如下命令:
# fsck /dev/rdsk/c0t0d0s7
这是检测未进入/etc/vfstab文件的文件系统的唯一方法。
·执行如下命令,使用/etc/vfstab文件中列出的挂载点目录名检测文件系统:
# fsck /export/home
下例中,fsck命令以强制(f)与整理(p preen)方式检测并修复文件系统,
# fsck -o f,p /dev/rdsk/c0t0d0s5
/dev/rdsk/c0t0d0s5: 77 files, 9621 used, 46089 free
/dev/rdsk/c0t0d0s5: (4 frags, 57 blocks, 0.0% fragmentation)
fsck的f选项,强制进行文件系统检测,无论文件系统的超级块的状态标志是什么。
fsck的p选项,指示fsck以非交互的方式修复文件系统。此时,如果出现需要root介入的问题,程序会立即退出。
第四节 解决文件系统不一致性问题
如果文件系统出现的问题被发现,fsck工具会提出警告,一些更普遍的需要交互操作的文件系统错误有:
·分配未引用的文件
·不一致的链接计数
·自由块计数崩溃
·超级块崩溃
重连接分配未引用的文件
如果fsck命令发现有inode被分配,但是未被引用,或未链接到任何目录中,命令会发出一条提示消息,询问是否需要重连接该inode
** Phase 3 - Check Connectivity
UNREF FILE I=788 OWNER=root MODE=100644
SIZE=19994 MTIME=Jan 18 10:49 1999
RECONNECT? y
回答yes,fsck命令会将文件存储到lost+found目录中。fsck命令引用该inode号作为保存的文件的名字。
要判断fsck命令移致lost+found目录中的文件的类型,执行如下步骤:
1、列出文件系统中lost+found目录的内容
# ls /export/home/lost+found
#788
2、使用file命令判断文件的类型
# file /export/home/lost+found/#788
/export/home/lost+found/#788: ascii text
3、要查看ASCII文本文件的内容,使用more或cat命令。使用strings命令查看二进制文件的内容。如果文件与应用程序相关联,如文档字处理程序,使用该应用程序查看文件的内容。
# cat /export/home/lost+found/#788
4、如果文件未受损,且知道其知道原所在位置,可将文件拷贝至文件系统中原来的位置
# cp /export/home/lost+found/#788 /export/home/user1/report
调整链接计数
如果fsck程序发现目录的inode链接计数值与实际的目录链接数不一致,命令会显示消息提示是否要调整计数
** Phase 4 - Check Reference Counts
LINK COUNT DIR I=2 OWNER=root MODE=40755
SIZE=512 MTIME=Jan 18 15:59 1999 COUNT 4 SHOULD BE 3
ADJUST? y
本例中,回答y(yes),fsck会将链接计数从4更正为3。
在此阶段中,你也有可能被询问清除或删除链接。
BAD/DUP type I=200 OWNER=root MODE=40755
SIZE=512 MTIME=Mar 14 08:03 2002
CLEAR? y
修复空闲列表(salvage 原意为抢救,打捞,不太好译,就直接写成修复了)
如果fsck工具如现未分配的块的总数与超级块中列出的自由块的数目不一致,fsck命令就显示提示修复空闲块计数,以未分配块的计数来更正它。
** Phase 5 - Check Cyl groups
CG 0: BAD MAGIC NUMBER
FREE BLK COUNT(S) WRONG IN SUPERBLK
SALVAGE? y
本例中,回答y(yes),fsck命令将更新文件系统超级块中的信息。
使用超级块备份
超级块崩溃会使文件系统不可挂载。当如“Can’t mount file_system_name”(不能挂载file_system_name) 或 “device_name is not this fstype”(设备名不是该文件系统类型)的消息出现时,文件系统不可用。
Can’t mount /dev/dsk/c0t0d0s7
此消息出现在系统启动过程中或手动挂载文件系统时。
如果fsck命令由于崩溃的超级块而失败,会出现一条消息,告诉你执行fsck命令,使用超级块备份来恢复文件系统。使用-o选项与-b标志后跟备份的超级块号执行fsck命令。每个文件系统都在块号32处有个备份的替用超级块。
下面的命令使用备份的超级块:
# fsck -o b=32 /dev/rdsk/c1t3d0s0
Alternate super block location: 32.
** /dev/rdsk/c1t3d0s0
** Currently Mounted on
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cyl groups
171 files, 3762 used, 5984 free (79 frags, 748 blocks, 0.1% fragmentation)
*****FILE SYSTEM WAS MODIFIED*****
#
fsck工具会比较备份超级块与实际文件系统的信息,并尝试重建主超级块。然而,如果文件系统的第一个超级块其损坏的一部分时,它是不可用的。这时需要选择另一个备份的超级块以继续fsck命令。
要列出所有替代的备份的超级块的位置,运行newfs -N命令。
注意:该方法在文件系统是使用newfs默认参数创建时可用。如果文件系统不是使用默认参数创建的,在执行newfs -N命令时,要加上原来创建文件系统时使用的参数,以得到同样的超级块位置。
使用-N选项,查看可以用于创建新的文件系统而不是实际要创建的文件系统参数(意思就是演示一下你要创建的文件系统的参数)。列表输出的参数中有所有替代超级块备份的位置,这些位置可以在fsck -o b-\=#命令中使用,这里#就是超级块备份的位置(如果一个备份被破坏了,可以试试其它的备份)。
# newfs -N /dev/rdsk/c0t0d0s7
newfs -N /dev/rdsk/c0t0d0s7
/dev/rdsk/c0t0d0s7: 3537040 sectors in 2327 cylinders of 19 tracks, 80 sectors
1727.1MB in 73 cyl groups (32 c/g, 23.75MB/g, 5888 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
32, 48752, 97472, 146192, 194912, 243632, 292352, 341072, 389792,
487232, 535952, 584672, 633392, 730832, 779552, 828272, 876992,
(下略)
#
可以在fsck命令中使用列表中任何一个其它的替代超级块备份号。
# fsck -o b=535952 /dev/rdsk/c0t0d0s7
Alternate super block location: 535952
** /dev/rdsk/c0t0d0s7
** Last Mounted on
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cyl groups
7 files, 14 used, 279825 free (17 frags, 347891 blocks, 0.0% fragmentation)
*****FILE SYSTEM WAS MODIFIED*****
#
第五节 监控文件系统使用状况
系统管理员的一个重要任务就是监控文件系统正常情况下的使用。有三个命令可以使用:
·df 显示自由硬盘块的数量
·du 概括硬盘使用
·quot 概括用户使用文件系统的状况
使用df命令
使用df命令显示文件系统磁盘空间的总量。此命令列出已使用及可用的空间量,及文件系统被使用的容量的百分比。
df命令格式如下:
df -option mount_point
df命令的一些更常用的选项如下:
表3-1 df命令选项部分列表
选项 描述
-a 报告所有的文件系统的使用,包括在/etc/mnttab文件中忽略选项被置位的文件系统条目
-b 以K字节为单位输出自由空间
-e 只输出自由的文件数(即文件系统中的文件数是一定的)
-k 以K字节为单位输出所有的硬盘分配
-h 类似于-k选项,但大小是以更可读的格式输出,如,14K, 234M, 2.7G, 或3.0T
-l 只输出本地文件系统
显示文件系统的容量,执行如下命令:
# df -k
Filesystem kbytes used avail capacity Mounted on
/dev/dsk/c0t0d0s0 114000 69446 33154 68% /
/dev/dsk/c0t0d0s6 1280269 990963 238096 81% /usr
(下略)
同样的文件系统以-h选项输出,更容易读:
# df -h
Filesystem size used avail capacity Mounted on
/dev/dsk/c0t0d0s0 111M 68M 32M 68% /
/dev/dsk/c0t0d0s6 1.2G 968M 233M 81% /usr
(下略)
表3-2列出了df -k命令输出的字段的含义:
表3-2 df -k命令输出的字段
字段 定义
Filesystem 挂载的文件系统
kbytes 以K字节表示的文件系统的大小
used 以K字节表示的使用空间的大小
avail 以K字节表示的可用空间的大小
capacity 文件系统使用的空间百分比
Mounted on 挂载点
报告输出中used与avail的总和一般比文件系统总空间数要小。每个文件系统中,都有一部分空间,从1%到10%不等,即minfree的值被保留。
如文件系统中所有报告的空间都使用完时,文件系统容量会显示为100%。普通用户会收到“File System Full”的信息,不能再使用系统。保留的空间对root用户仍然可用,这时需要在文件系统中执行删除与备份操作。
使用du命令
使用du命令显示文件与目录使用的硬盘块数量。每个硬盘块大小是512字节。其命令格式如下:
du -options directory
表3-3描述du命令的选项
表3-3 du命令选项
选项 描述
-k 以K字节显示磁盘使用
-s 只显示以512字节为单位的,与-k同时使用时,以K字节为单位显示摘要
-a 显示指定目录体系内所有的目录与文件使用的块数
使用如下命令显示/opt目录下文件的硬盘空间使用:
# cd /opt
# du -k
输出包括文件在内的所有的磁盘使用,执行如下命令:
# du -ak /opt
只显示硬盘使用的摘要,执行职下命令:
# du -sk /opt
550 /opt
使用quot命令
使用quot命令以K字节显示文件系统中被用户使用的硬盘空间量
注意:quot命令只能由root用户运行。
其格式如下:
quot -options filesystem
表3-4描述了quot命令的选项。
表3-4 quot命令的选项
选项 描述
-a 报告所有挂载的文件系统
-f 包括文件数
要显示所有挂载的文件系统的所有硬盘空间,执行命令:
# quot -af
/dev/rdsk/c0t0d0s0 (/):
14326 1284 root
4792 37 bin
31 27 lp
1 1 sys
/dev/rdsk/c0t0d0s6 (/usr):
197394 6962 root
161203 11884 bin
2140 232 lp
1 1 adm
列分别表示以K字节为单位的使用量,文件数,文件所有者。
要输出指定文件系统上各用户所有的文件数与空间量,执行命令:
# quot -f /dev/dsk/c1t0d0s5
/dev/dsk/c1t0d0s5:
134 62 root
103 84 user1
140 32 user9
使用Solaris Management Console Usage Tool
Solaris Management Console Usage Tool提供了所有挂载的文件系统的可用空间的图形界面显示。
使用Solaris Management Console Usage Tool,可以在命令行上输入smc&,或从Application Manager window中选择,启动Solaris Management Console 。要找到Usage tool,在Solaris Management Console 中点击This Computer,点击Storage,点击Mounts and Shares。
图3-8 显示了Management Tools:Solaris Management Console 窗口中的硬盘使用信息。 |
|