SA 239 翻译 第三章 第四章

发表于:2007-06-08来源:作者:点击数: 标签:
第三章管理SolarisOE文件系统 目标 ·描述SolarisOE文件系统 ·创新的ufs文件系统 ·使用fsck检查文件系统 ·解决文件系统不一致性问题 ·监控文件系统 第一节SolarisOE文件系统介绍 文件系统是文件与目录的结构化的信息集合。SolarisOE支持三种不同类型的文

第三章 管理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 窗口中的硬盘使用信息。

 songix 回复于:2004-04-05 00:37:01
第四章 挂载与卸载执行

目标
完成本部分,你可以完成如下任务:
·掌握挂载基础知识
·执行挂载
·执行卸载
·访问挂载的软盘或CDROM
·限制对挂载的软盘或CDROM的访问
·不使用卷管理器访问CDROM


第一节  挂载基础知识
在Solaris OE中,可以使用挂载程序将每个独立的文件系统挂载到他们的目录体系中的挂载点。这样就可以使用文件系统被系统和用户访问。
可以使用卸载程序把文件系统从目录体系中的挂载点中拆离出来。这时文件系统对系统或用户不可访问。
在使用newfs命令创建文件系统后,必须将它与Solaris OE目录体系中的一个挂载点关联。挂载点是一个目录,它是到文件系统的连接。文件系统通常以他们的挂载点的名字被访问,如/(root)文件系统,或者/usr文件系统。
图4-2显示了从一个文件系统跨越到另一个文件系统的目录体系。
 
图4-2 文件系统及其挂载点
文件系统本身不包含自己的挂载点。

列出当前挂载的文件系统
使用mount命令与df命令判定当前有哪些文件系统被挂载。
df命令显示由挂载或者未挂载的文件系统占用的硬盘空间,并,根据选项显示本地挂载的文件系统与虚拟文件系统信息。
mount命令,位于/usr/bin目录中,在/etc/mnttab文件中维护一个当前挂载的文件系统列表。当mount不用任何参数运行时,它列出所有/etc/mnttab目录中挂载的文件系统。如果只是使用了部分参数列表,命令将在/etc/vfstab文件中搜索内容补足遗漏的参数。注意:系统管理员使用的是/usr/sbin/mount命令,而系统启动脚本使用的是/sbin/mount命令。

自动挂载文件系统
Solaris OE提供了自动文件系统挂载的方法。
Solaris OE在安装时根据用户选择,提供了一个默认的/etc/vfstab文件。不过可以根据需要编辑/etc/vfstab。
注意:自动挂载进程automounter可以根据需要挂载网络文件系统。

虚拟文件系统表:/etc/vfstab
/etc/vfstab文件列出所有在系统启动时自动遁形的文件系统。除了/etc/mnttab文件系统与/var/run文件系统
该文件的格式每行包括七个字段。默认以制表符(tab键)分隔,但任何空格也可用于分隔。破折号(-)使用当该字段的值不适用时的占位符。注释行以井号(#)号开始。
添加条目时需要提供如下信息:
device to mount 要挂载的设备,例如,本地ufs文件系统/dev/dsk/c#t#d#s#,或伪文件系统/proc。
device to fsck 适用于fsck程序检测的原始或字符设备。伪文件系统此字段值为“-”
mount point Solaris OE目录体系中作为文件系统挂载点的目录名
FS type 要挂载的文件系统的类型
fsck pass 指示系统启动时此文件系统是否由fsck检测。0或非数字值指示no,不检测。1指示fsck在该文件系统上启动并运行结束(检测通过)。大于1的值指定该设备被添加到fsck工具运行的设备列表中。fsck可以同时在8个设备上并行运行。mountall命令忽略此字段。
mount at boot 值为yes时,mountall将在系统启动时挂载此文件系统。值为no则文件系统在启动时不被挂载。

注意:对于/(root),/usr及/var(如果它是独立的文件系统),mount at boot字段值指定为no,内核在mountall命令运行之前,会作为启动过程的一部分挂载这些文件系统。系统启动脚本/etc/rcS.d/S30rootusr.sh明确指定mount命令挂载/(root)与/usr文件系统,而/var文件系统的挂载由脚本/etc/rcS.d/S70buildmnttab指定。

mount options 以逗号分隔的选项列表,将被传递给mount命令。破折号“-”指示使用默认挂载选项。

注意:因为默认是使用制表符tab分隔/etc/vfstab文件中的字段,字符经常不能对齐他们的列表头,这可能在终端窗口中查看该文件时造成不便。
# more /etc/vfstab
#device device mount FS fsck mount mount
#to mount to fsck point type pass at boot options
#
fd - /dev/fd fd - no -
/proc - /proc proc - no -
/dev/dsk/c0t0d0s1 - - swap - no -
/dev/dsk/c0t0d0s0 /dev/rdsk/c0t0d0s0 / ufs 1 no -
/dev/dsk/c0t0d0s7 /dev/rdsk/c0t0d0s7 /export/home ufs 2 yes -
swap - /tmp tmpfs - yes -

/etc/mnttab文件
/etc/mnttab文件实际上是一个mntfs文件系统,它提供直接来自于内核、关于本地主机挂载的文件系统的只读信息。
每次文件系统被挂载时,mount命令都添加到此文件的一个条目。当文件系统被卸载时,其条目也从/etc/mnttab文件中移除。
Mount point 文件系统在/文件系统上的挂载点或目录名
Device Name 挂载点上挂载的设备名。块设备是文件系统的物理位置。
Mount Options 文件系统上生效的挂载选项列表
dev=number 挂载的文件系统的主从设备号
Date and Time Mounted 文件系统被挂载到目录体系中的日期与时间
Solaris OE中,挂载的/var/run文件系统是tmpfs文件系统。它是在Solaris OE重启过后不再需要的临时操作系统文件的仓库。它是被作为伪文件系统挂载而非基于硬盘的文件系统。
/var/run目录不需要进行管理,出于安全考虑,它属于root用户。
/tmp目录也是Solaris OE中挂载的tmpfs文件系统。它是用户与应用程序的临时文件仓库,这些文件也是系统重启后就失效的文件。它是伪文件系统而非基于硬盘的文件系统。
下面两个例子列出当前挂载的文件系统:
# more /etc/mnttab
(下略)
# mount
(下略)

第二节  挂载文件系统操作
可以以root用户登入系统后运行mount命令手动挂载文件系统,也可以让系统在启动时查询/etc/vfstab文件自动挂载文件系统。

手动挂载本地文件系统
mount命令不仅可以列出当前挂载上的文件系统,也为root用户提供了挂载文件系统的方法。

mount命令的默认行为
要手动挂载本地文件系统,需要知道文件系统所在的设备名与挂载点目录名。执行如下命令:
# mount /dev/dsk/c0t0d0s7 /export/home
本例中,默认的挂载文件系统的动作选项是:read/write, setuid, intr, nologging, 及largefiles, xattr, 与onerror。
下面表解释mount命令的默认选项:
read/write 指示是否在文件系统上允许读写操作
setuid 允许在文件系统上执行setuid程序
intr/nointr 允许或禁止以键盘中断杀死在锁定的文件系统上等待操作
nologging 指示在ufs文件系统上禁用日志方式
largefiles 允许创建大于2G的文件。以此方式挂载的文件系统可包含大于2G的文件
xattr 支持在标准UNIX属性以外的扩展属性
注意:由于文件系统负载,可创建的最大的文件约为866G。

onerror=action 指定ufs文件系统管理程序当文件系统出现内部不致性错误的时候应当采取的动作。可以指定的值如下:
panic-导致系统强制关闭,这是默认值
lock-使文件系统被锁定
umount-强制卸载文件系统
/etc/vfstab文件还有另外一个重要的功能。因为/etc/vfstab文件包含了文件系统挂载点与实际的设备名的映射,root用户可以通过只指点挂载点就可以手工挂载文件系统。

使用mount命令选项
在命令行上使用mount选项时,选项是以标志-o开始的。使用多个选项时,各选项以逗号分隔,构成一个列表跟在-o标志之后。
注意:Mount选项的详细信息在mount_ufs命令的帮助页中有详细说明。

一些用于挂载本地文件系统的选项包括:ro, nosetuid,noatime, nolargefiles, 与logging。
·ro-以只读方式挂载文件系统。
下面是使用ro选项的例子:
# mount -o ro /dev/dsk/c0t0d0s6 /usr

·nosuid-禁止在文件系统上执行setuid程序。但不限制创建setuid程序。
下面是使用多个选项挂载文件系统的例子:
#mount -o ro,nosuid /dev/dsk/c0t0d0s7 /export/home

·noatime-抑止对inode的最后访问时间修改,这减少在访问时间不重要时文件系统上的硬盘活动。指定此选项一般可缩短文件访问性,提高整体性能,如:
# mount -o noatime /dev/dsk/c0t0d0s7 /export/home

·nolargefiles-防止包含大文件的文件系统被挂载,如:
# mount -o nolargefiles /dev/dsk/c0t0d0s7 /export/home
当挂载的文件系统包含大文件或曾包含大文件时,nolargefile选项失效。
如果当前的文件系统包含大文件,且root用户需要使用此选项挂载此文件系统,那必须搜索文件系统中的大文件并将其删除或移除,然后再手工使用fsck命令更新超级块信息。
mount在文件系统曾经包含大文件的情况下使用此选项也会失败。必须执行fsck命令清除旧的关于大文件的信息,才能让文件系统挂载上。
·logging-支持文件系统的日志运行模式,如:
# mount -o logging /dev/dsk/c0t0d0s7 /export/home
UFS日志进程记录文件系统的存储事务或更新,将完整的文件或目录操作写入日志中,然后再应用日志到文件系统上。在事务被存储以后,完整的事务可以在以后应用到文件系统上。
UFS日志是从文件系统的空闲块中分配的,其大小是每1G使用1M,最大可达64MB。
当UFS日志达其最大时,它就开始将事务记录到文件系统中。文件系统被卸载时,整个UFS日志都被清空,所有事务都被写入文件系统。
UFS日志有两个好处。一,它文件系统的不一致性,也就不再需要长时间运行fsck扫描。二,可以跳过fsck扫描,这就减少了系统在被以非正常的关闭方法关闭时,重启的时间,

手工挂载所有文件系统
系统启动过程中,/usr/sbin/mountall命令读取/etc/vfstab文件,挂载所有mount at boot字段值为yes的文件系统。
root用户可以使用mountall命令手工挂载每个/etc/vfstab文件中mount at boot字段为yes的文件系统,如
#mountall
若只需挂载/etc/vfstab文件中列出的本地文件系统,执行:
#mountall -l
系统启动时,fsck工具检测/etc/vfstab中每个字段device to fsck非空,且fsck pass字段值大于0的本地文件系统。fsck工具判定文件系统是否可用,可被安全挂载。
若fsck工具判定文件系统不可用(如,崩溃等),fsck工具在系统尝试挂载前会修复文件系统。系统会挂载所有fsck pass字段为“-”或“0"的本地文件系统,而不检测该文件系统。

挂载新文件系统
执行如下步骤,在系统中添加新的硬盘,在其上使用文件系统,并挂载该文件系统。
1、设备磁盘硬件,可能包括设定地址跳线与连接电缆。
2、执行重配置启动,或运行devfsadm工具,为新的硬盘添加设备支持程序。
3、使用format工具将硬盘分为一个或多个分片。
4、使用newfs命令在分片上创建新的文件系统。
5、使用mkdir命令为文件系统在根目录下创建挂载点。
# mkdir /database
6、使用mount命令手动挂载新文件系统
# mount /dev/dsk/c1t4d0s0 /database
7、使用mount命令查看文件系统是否被挂载上
#mount
8、编辑/etc/vfstab文件为新文件系统添加一行条目:
# vi /etc/vfstab
#device device mount FS fsck mount mount
#to mount to fsck point type pass at boot options
/dev/dsk/c1t4d0s0 /dev/rdsk/c1t4d0s0 /database ufs 1 yes logging
(这里只取了新添加的一行的记录)
文件系统将在系统启动时被自动挂载。

挂载不同类型的文件系统
不同的文件系统类型有其独特的性质,这影响到mount命令的作用。
默认情况下,mount命令假定它是运行在ufs类型的文件系统上。然而,当你挂载不同类型的文件系统时,你必须在命令行上指定其类型。
可以mount的使用-F选项指定被挂载的文件系统的类型。文件系统的类型必须可从/etc/vfstab,/etc/default/fs,或/etc/dfs/fstypes文件中判定。

判定文件系统类型
因为mount命令需要使用文件系统类型才能正常挂载文件系统,文件系统类型必须通过搜索以下文件来指定或判定:
·/etc/vfstab文件的FS type字段
·/etc/default/fs文件用于本地文件类型
·/etc/dfs/fstypes文件用于远程文件系统
如果在命令行上未使用mount -F FStype选项明确指定文件系统类型,mount命令查看/etc/vfstab文件断定文件系统的类型。mount命令通过搜索文件系统的块设备名,原始设备名,或挂载点目录名来进行断定。
如果mount命令不能由搜索/etc/vfstab文件断定文件系统的类型,mount命令使用在/etc/default/fs文件或/etc/dfs/

fstypes文件中指定的默认文件系统类型,搜索哪一个文件,取决于挂载的文件系统是本地的还是远程的。
默认的本地文件系统类型在/etc/default/fs中由行条目LOCAL=fstype指定。
LOCAL=ufs
/etc/dfs/fstypes文件的第一行判定默认的远程文件系统类型。
nfs NFS Utilities
autofs AUTOFS Utilities
cachefs CACHEFS Utilities

使用fstyp命令
也可以使用fstyp命令,以硬盘分片的原始设备名为参数判定文件系统的类型:
# fstyp /dev/rdsk/c0t0d0s7
ufs

指定hsfs文件系统类型
若在卷管理服务停止时,要挂载CDROM上的文件系统,以root身份运行如下命令:
# mount -F hsfs -o ro /dev/dsk/c0t6d0s0 /cdrom
本例中,文件系统类型是hsfs,文件系统所在的硬盘分片是/dev/dsk/c0t6d0s0,挂载点/cdrom是Solaris OE中安装预设定的目录。

指定pcfs文件系统类型
在卷管理服务上停止时挂载在软盘上的文件系统,如root身份执行如下命令:
#mkdir /pcfs
#mount -F pcfs /dev/diskette /pcfs
本例中,文件系统类型是pcfs。文件系统存在于/dev/diskette设备上,挂载点是/pcfs。

第三节  执行卸载
在需要使用fsck命令检测修复文件系统,或需要对文件系统进行完全备份时,需要卸载文件系统。

卸载文件系统
一些文件系统管理任务不能在被挂载的文件系统上执行。
作为文件系统维护的准备,使用umount命令卸载文件系统。
使用umount命令卸载文件系统,即是把它从挂载点上拆除,并从/etc/mnttab文件中删除对应的条目。
注意:在卸载一个正被用户使用的文件系统前,通知用户。
使用挂载点目录为参数手动卸载文件系统:
#umount /export/home
使用逻辑设备名为参数手动卸载文件系统:
#umount /dev/dsk/c0t0d0s7

卸载所有文件系统
系统关闭过程中或从命令行上运行umountall命令时,/usr/sbin/umountall命令读取/etc/mnnttab文件。umountall命令卸载vfstab文件中指定的所有文件系统,除了/,/usr,/proc,/dev/fd,/var,/var/run和/tmp。
以root身份运行umountall命令,手动卸载/etc/mnttab文件中列出的所有文件系统,例如:
#umountall
要卸载/etc/mnttab文件中列出的所有本地文件系统,执行如下命令:
#umountall -l
运行mount命令,查看输出,确认所有的文件系统都被卸载。

卸载工作中的文件系统
工作中的文件系统不可卸载。umount与umountall均显示如下出错消息:
umount:file_system_name busy
满足如下条件之一的文件系统被认为处于使用中(即处于busy状态):
·有程序正在访问文件系统中的文件或目录
·用户正在访问文件系统中的目录或文件
·进程在文件系统中打开了一个文件
·文件被共享
有两种方法可以卸载工作中的文件系统
·fuser命令-列出所有正在访问文件系统的进程,并在需要时杀死它们。
·umount -f命令-强行卸载文件系统
注意:fuser命令显示所有下在使用指定的文件系统的进程ID。每个进程ID都跟有一个字符代码,这些字符代码在man手册中说明。(这里具体是什么,以前没有注意,手边也没有实验环境)

使用fuser命令
使用如下步骤停止当前访问文件系统的所有进程:
1、以root身份,列出所有正在访问文件系统的进程。使用如下命令找出需要中止的进程:
#fuser -cu mount_point
此命令显示当前使用文件系统的进程、文件系统名与用户登录名。
2、杀死所有访问文件系统的进程
#fuser -ck mount_point
系统会对所有正在使用文件系统的进程发送SIGKILL消息。
3、确认没有进程在访问文件系统
#fuser-c mount-point
4、卸载文件系统
#umount mount_point

使用umount -f命令
root用户可以使用umount命令的-f选项卸载文件系统,即便文件系统忙。下面是命令的格式:
#umount -f mount_point
文件系统会被强行卸载,即便其中有被打开的文件。强行卸载会导致数据丢失,及僵死的进程,这些进程会在系统上继续运行。

但此命令在卸载共享的文件系统时有用,如果远程服务器没有呼应时。

启动失败时修复重要的文件
下面的过程描述如何从Solaris OE软件CDROM上启动,编辑配置错误的/etc/vfstab文件。
1、插入Solaris 9 OE两张安装CD中的第一张到CDROM驱动器中。
2、从CDROM上执行一个单用户启动:
ok boot cdrom -s
Boot device: /pci@1f,0/pci@1,1/ide@3/cdrom@2,0:f File and args -s
SunOS Release 5.9 Generic 64 bit
(下略)
注意:从该软件CDROM上启动执行单用户启动操作,会在内存中创建一个/var文件系统的内存拷贝,这可以让root用户执行管理任务。
3、在/分区上上运行fsck命令,检测与修复任何可能的文件系统问题。
# fsck /dev/rdsk/c0t0d0s0
4、如果fsck命令成功运行,将/文件系统挂载到/a目录下,就可以访问硬盘上的文件系统。
# mount /dev/dsk/c0t0d0s0 /a
5、设定并输出TERM变量,这使vi编辑器可以正常工作。
# TERM=sun
# export TERM
6、编辑/etc/vfstab文件,更正所有问题,保存退出。
# vi /a/etc/vfstab
(编辑文件操作)
:wq!
7、卸载文件系统
#cd /
#umount /a
8、重启系统
#init 6

第四节  访问挂载上的软盘与CDROM
Solaris OE提供给用户一个标准的接口,称为卷管理器(Volume Management),使用户可以访问位于软盘与CDROM上的文件系统。
注意:Solaris 9 OE包含对其它移动介质如DVD,Jaz驱动器,Zip驱动器,及PCMCIA内存卡的支持。(PCMCIA Personal Conputer Memory Card International Association)。更多信息请参看Solaris 9 文档CD上的资源。
卷管理器有两个优点:
·自动为root和非root用户挂载可移动存储介质
·可以为网络上的其它系统提供本地系统上的可移动存储介质的访问
卷管理服务由/usr/sbin/vold守护进程控制。服务默认总是运行,这样可以为普通用户自动管理软盘与CDROM。
卷管理器会自动检测CDROM。但它不会检测插入驱动器的软盘,除非运行volcheck命令。此命令会让vold守护进程去检测插入软驱的软盘。卷管理器可以挂载ufs,pcfs,hsfs与udfs文件系统。

使用卷管理器
每个设备都很方便地被挂载并挂载到一个很好记的位置,这样可以让用户方便地使用软盘与CDROM。
如果vold守护进程检测到挂载的设备包含文件系统,该设备将被挂载到指定的目录位置。
表4-1列出了包含文件系统的设备被挂载的目录位置:
表4-1 目录位置
介质设备 访问文件系统位置
第一个软驱 /floppy/floppy0
第一个CDROM或DVD驱动器 /cdrom/cdrom0
第一个Jaz驱动器 /rmdisk/jaz0
第一个Zip驱动器 /rmdrive/zip0
第一张PCMCIA卡 /pcmem0

如果vold守护进程检测到挂载的设备不包含文件系统,设备可以通过路径访问。
表4-2列出了不包含文件系统被挂载的设备的路径
表4-2 访问设备路径
介质设备 访问Raw设备路径
第一个软盘驱动器 /vol/dev/aliases/floppy0
第一个CDROM或DVD驱动器 /vol/dev/aliases/cdrom0
第一个Jaz驱动器 /vol/dev/aliases/jaz0
第一个Zip驱动器 /vol/dev/aliases/zip0
第一张PCMCIA卡 /vol/dev/aliases/pcmem0

卷管理器运行时,普通用户可以很方便的访问软盘或CDROM,使用如下步骤:
1、插入介质
2、如果是使用软盘,运行volcheck命令
3、使用cd命令更改目录到挂载的卷上。(参看前面的设备挂载目录位置表4-1)
4、使用介质上的文件
5、挂载介质
6、弹出介质

表4-3显示卷管理器的配置文件
表4-3 卷管理器配置文件
文件 描述
/etc/vold.conf 卷管理器配置文件,此文件定义条目,如当设备被插入或者弹出时的动作,或卷管理器管理的设备,及不能安全弹出的文件系统
/etc/rmmount.conf rmmount命令配置文件。rmmount命令是可移动介质挂载程序,当有CDROM或者软盘被插入时由卷管理器执行。


第五节  限制对挂载的软盘与CDROM的访问
如要限制普通用户访问系统中的软盘或CDROM,root可以停止卷管理服务。

停止卷管理服务
暂时停止系统中的卷管理器,以root身份执行:
# /etc/init.d/volmgt stop
要重新启动卷管理服务,以root身份运行:
# /etc/init.d/volmgt start

卷管理器问题故障排除
如果CDROM未能从驱动器中弹出,可以以root身份尝试停止卷管理器,如果未成功,可以杀死vold守护进程
# /etc/init.d/volmgt stop
如未能停止,可以使用
# pkill -9 vold

按系统上光驱的弹出键弹出CDROM。取走CDROM后,让CDROM托盘保持弹出状态。然后重新启动卷管理服务:
# /etc/init.d/volmgt start
过几秒后,按CDROM托盘退回驱动器。

第六节  不使用卷管理器访问软盘或CDROM
当卷管理器未运行时,只有root可以挂载并访问软盘或CDROM,操作如下:
1、插入介质设备
2、成为root用户,(su - root)
3、如有必要,创建挂载点
4、判定文件系统类型
5、使用下节列出的挂载选项挂载设备
6、使用介质设备上的文件
7、卸载介质设备
8、弹出介质设备
9、退出root会话

使用mount命令
如当卷管理服务停止时要挂载CDROM上的文件系统,以root身份执行:
# mount -F hsfs -o ro /dev/dsk/c0t6d0s0 /cdrom
本例中,文件类型是hsfs,文件系统位于硬盘分片/dev/dsk/c0t0d0s0,且挂载点在Solaris OE中是已有的目录。
要在卷管理服务停止时,要挂载软盘上的文件系统,以root身份运行:
# mkdir /pcfs
# mount -F pcfs /dev/diskette /pcfs
本例中,文件类型是pcfs,文件系统位于/dev/diskette设备上,挂载点是/pcfs。

 songix 回复于:2004-04-05 00:38:56
因为有一个面试,要看其它的书。没有足够的时间来翻239了。
也停了好几天。否则半本书都出来了。

这里把第三章第四章贴出来。以后的章我会尽快翻的。

谢谢支持。

 C.Arthur 回复于:2004-04-05 08:15:00
支持

 vi_liao 回复于:2004-04-05 08:27:38
up

 zxpchx 回复于:2004-04-05 09:18:43
update.Thanks

 nopalh 回复于:2004-04-05 09:59:42
真的很有心,谢谢~~

 zj0953 回复于:2004-04-05 20:49:30
很好。我顶

 hileon 回复于:2004-04-06 20:13:13


 dhbill 回复于:2004-04-07 12:39:44
ding

 xiuluowang 回复于:2004-04-11 16:23:48
:em02: 
我顶!

原文转自:http://www.ltesting.net