精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>● FreeBSD>>《FreeBSD使用大全》第二版>>4.3.2 安装文件系统

主题:4.3.2 安装文件系统
发信人: sungang(笨刚)
整理人: sungang(2003-09-16 12:17:53), 站内信件
4.3.2 安装文件系统

FreeBSD将文件保存在磁盘等存储设备上,由操作系统来具体处理访问硬件设备的问题,用户只需要面对操作系统,就能进行具体的文件操作。操作系统首先将用于存储的设备进行格式化之后,该设备才能用于存储文件,这个设备可以是软盘,可以是一个硬盘分区,或者其他允许随机存取的块设备存储介质。

在Unix上将格式化后的存储设备统称为文件系统,格式化的过程称为创建文件系统。(由于磁带是一种顺序存取的设备,因此在磁带上不能创建文件系统。)

对于不同介质,不同的操作系统对磁盘进行格式化和管理的方式也不同,这样就形成了不同类型的文件系统。但操作系统给用户提供了一种标准的通用存取方式,这样在存取文件时就不需要考虑是在对哪种文件系统进行操作。但是不同的文件系统仍然存在一些差异,例如光盘文件系统是只读介质,还有一些文件系统并非为Unix系统而设计的,因此文件名、文件属性等标准就与Unix不同,FreeBSD在访问这些文件系统时尽量转换这些差别,补充这些文件系统没有、但Unix标准文件系统需要的属性。这样这些文件系统就与标准文件系统看起来完全相同,只是某些操作要受到文件系统本身的物理限制,例如企图将光盘上文件加上写属性,显然无法完成。FreeBSD支持多种文件系统,其中最常见的有:

UFS文件系统:是FreeBSD上的标准文件系统,它实现了所有的标准文件属性,如文件属主和组、存取权限等属性。

cd9660文件系统:支持ISO 9660格式的CD-Rom,这种格式只支持8位基本长度3位扩展长度、不区分大小写的文件名,但FreeBSD支持它的Rock Ridge扩展,使其能使用Unix风格的长文件名。

NFS文件系统:网络文件系统,通过它Unix能在网络上共享文件系统。

msdos文件系统:DOS和Windows使用的FAT文件系统,基本上是使用8.3的文件名,Windows95之后扩展了文件名的长度,但仍然不区分大小写。FreeBSD支持Windows95的长文件名扩展和FAT32格式的分区。

ext2fs文件系统:Linux使用的文件系统,这个类型不是缺省支持的文件系统,需要重新配置内核。

NTFS文件系统:Windows NT使用的文件系统,这个类型同样需要重新配置内核。

在个人计算机的硬盘管理方式中,文件是直接放在硬盘的分区中,而FreeBSD使用的UFS文件系统则又在基本分区中进行了划分,文件系统建立在BSD风格的子分区中。这样每个UFS分区中能有多个文件系统,每个文件系统或交换空间各有一个标签(DiskLabel),来标识其本身的起始和结束。当真正要使用文件系统时,就需要获得硬盘上文件系统(UFS分区和分区内部各个文件系统的DiskLabel)的具体信息。

1) 获取磁盘信息
硬盘上文件系统的信息应该由管理员维护,同时也记录在硬盘上,可以使用FreeBSD中的系统工具fdisk和disklabel,或者安装程序Sysinstall,来获得保存在硬盘本身中的信息。

当使用Sysinstall中的Fdisk和Disklabel来分区和划分磁盘空间时,当用户完成操作之后,应该使用W命令将改变写入磁盘之后再退出Fdisk或Disklabel。

与Sysinstall不同,命令行的fdisk和disklabel为交互模式,而非sysinstall的全屏幕界面,因此较为难用一些。使用硬盘名称作为fdisk的参数,fdisk将报告硬盘上所有四个分区的详细信息:

# fdisk wd0

******Working on device /dev/rwd0 ******

parameters extracted from in-core disklabel are:

cylinders=525 heads=255 sectors/track=63 (16065 blks/cyl)

parameters to be used for BIOS calculations are:

cylinders=525 heads=255 sectors/track=63 (16065 blks/cyl)

Media sector size is 512

Warning: BIOS sector numbering starts with sector 1

Information from DOS bootblock is:

The data for partition 1 is:

sysid 6,(Primary ‘big’ DOS (>32MB))

   start 16065, size 2056320 (1004Meg), flag 80

      beg: cyl 1/ sector 1/ head 0;

      end: cyl 128/ sector 63/ head 254

The data for partition 2 is:

sysid 7,(OS/2 HPFS, QNX or Advanced UNIX)

   start 2072385, size 1044225 (509Meg), flag 0

      beg: cyl 1/ sector 1/ head 0;

      end: cyl 128/ sector 63/ head 254

The data for partition 3 is:

sysid 165,(FreeBSD/NetBSD/386BSD)

   start 3116610, size 2024190 (988Meg), flag 0

      beg: cyl 1/ sector 1/ head 0;

      end: cyl 128/ sector 63/ head 254

The data for partition 4 is:

sysid 5,(Extended DOS)

   start 5140800, size 3293325 (1608Meg), flag 0

      beg: cyl 1/ sector 1/ head 0;

      end: cyl 128/ sector 63/ head 254

从这个fdisk的执行结果中可以看出这个硬盘的四个分区分别为不同的操作系统所占用,第一个分区为DOS基本分区,第二个标识为HPFS,事实上它是NTFS分区,第三个分区wd0s3为BSD分区,而第四个分区为扩展分区。

因此就可以针对FreeBSD系统分区,使用disklabel来检查其上的BSD子分区信息。

# disklabel  wd0s3

# /dev/rwd0s3c:

type: ESDI

disk: wd0s3

label:

flags:

bytes/sector: 512

sectors/track: 63

tracks/cylinder: 255

sectors/cylinder: 16065

cylinders: 126

sectors/unit: 2024190

rpm: 3600

interleave: 1

trackskew: 0

cylinderskew: 0

headswith: 0           # milliseconds

track-to-track seek: 0     # milliseconds

drivedata: 0

8 partitions:

#       size    offset   fstype    [fsize bsize bps/cpg]

  a:    65536       0    4.2BSD      0    0   0   # (cyl.    0 - 4*)

  b:   151248   65536      swap                   # (cyl.    4*- 13*)

  c:  2024190       0    unused      0    0   0   # (cyl.    0 - 125)

  e:    61440  216784    4.2BSD      0    0   0   # (cyl.    13*- 17*)

  f:  1745966  278224    4.2BSD      0    0   0   # (cyl.    17*- 125*)

可以看出disklabel除了显示各个子分区a-f之外,还显示了硬盘的参数。事实上BSD的分区管理工具要早于个人计算机的分区概念,而disklabel是BSD的分区管理工具,并不需要fdisk的帮助就能完成所有的磁盘管理操作。fdisk是用于将FreeBSD与其他操作系统进行兼容的目的,它是使用个人计算机分区概念的系统工具。如果一个硬盘不被其他个人计算机操作系统访问,完全可以抛弃fdisk,而仅仅使用disklabel和BSD传统风格的设备文件,来运行FreeBSD。

2) 文件系统的安装
在存储设备上建立的文件系统必须安装到Unix目录树上,用户才能访问上面的文件。目录树只是一种逻辑概念,而具体的文件都保存在安装到目录树上的各个文件系统中。

由于每个文件都保存在自己的目录文件中,目录中保存的是相对位置,一旦将一个文件系统安装到一个目录下,则这个文件系统中的所有文件和目录,都位于目录树中的这个目录的下方。同一个文件系统,可以选择将它安装到不同的目录下。

安装文件系统要使用命令mount,这个命令必须以root身份执行,例如安装光盘文件系统的命令(IDE光驱),使用:

# mount -t cd9660 /dev/acd0c  /cdrom

参数指明了不同的文件系统选项,-t后面跟文件系统的类型,这个命令中使用cd9660,用于光盘使用的ISO 9660文件系统,同样也可以根据文件系统的不同而选用ufs、nfs、msdos等,其中ufs类型是缺省的文件系统类型;

/dev/acd0c是指定CD-Rom设备文件,也可以使用/dev/acd0来安装光盘,BSD的习惯做法是除了raw方式访问设备之外,最好使用子设备c来表示整个设备,主要原因是使用子设备c,那么就能通过访问分区的disklabel,来获得存储设备的信息,虽然现代BSD下这个因素的影响已经很小,但使用子设备更符合BSD习惯。

/cdrom指定了安装目录,此后光盘上的所有文件都位于/cdrom目录下,但是在执行这个命令前必须创建这个/cdrom目录。

Mount命令可以通过-o参数指定相关的安装选项,例如-o ro指定了使用只读(Read Only)选项,由于CD-Rom是只读介质,即使不使用这个选项指明这个介质是只读类型的,系统也会将这个文件系统设置为只读。对于以只读方式安装的文件系统,任何时候企图写这个目录下的文件都会得到错误信息。对于物理上可写的文件系统,可以使用ro选项将能保护数据不被改变,因而十分有用。

同样,安装一个DOS格式的软盘应该使用:

# mount -t msdos /dev/fd0c /floopy

如果安装顺利,则就可以访问这个软盘上的DOS文件了。同样也可以访问硬盘上FAT格式的文件系统,包括DOS基本分区和扩展分区上的逻辑盘(逻辑盘在FreeBSD下的设备文件从5开始,例如ad1扩展分区上的第一个逻辑盘为ad1s5)。

安装一个其他计算机通过NFS共享出的文件系统应该使用:

# mount -t nfs remote:/directory /mnt

与安装其他文件系统的不同在于,本地硬盘上的文件系统使用设备文件来标识设备,但NFS使用远程主机的名字和目录来确定文件系统的位置,其格式为主机名与该主机上目录名,中间使用 “:” 分隔开。

将文件系统安装到目录上之后,使用这个介质上的文件就非常简单了,直接按照标准方式访问文件就可以了。当所有访问任务完成之后,可以使用命令umount卸载一个安装到确定目录下的文件系统。

# umount /cdrom

执行这个命令将文件系统与其安装到的目录相脱离,同时系统会将缓冲区中的有关部门数据写入磁盘。此后该目录就可以安装另一个文件系统。

对于光盘来讲,直到此时才能使用eject键退出光盘,更换或拿开盘片。

# cd /cdrom

# umount /cdrom

umount: /cdrom : Device busy

# cd /

# umount /cdrom

在执行这个命令时如果系统报告 “Device busy” 错误信息,说明有其他程序仍然正在使用这个文件系统中的文件,很可能是某个shell的当前路径仍然位于这个文件系统的目录中,造成这个文件系统的目录文件没有关闭。检查所有的登录会话,保证没有shell的当前目录在/cdrom的目录下。

FreeBSD将假定存储设备将一直停留在这个安装位置上由系统使用,由于系统是多用户系统,正常使用过程中一定会打开某些文件,进行读写操作,如果直接取出可移动的介质,如软盘、光盘,则会造成一些正在读写文件系统的程序错误。因此需要先卸载文件系统,再取软盘,以保证操作的正确完成,以及数据的完整性。系统为了确保数据的完整性,系统在磁盘中记录下每次mount和umount的操作,每一次mount之后,必须正常卸载,才许可下一次正常mount,否则就有可能存在磁盘错误,需要使用修复程序fsck。

对于一个只读类型的介质或只读类型的安装,由于文件可能已经处于打开状态,系统仍然需要使用一些控制机制,直到卸载才释放对文件系统的控制权,因此在FreeBSD下使用mount命令安装了光盘之后,光驱前面板上的eject键将不再起作用,直到将这个文件系统卸载下来。

u       文件系统的缓冲
系统使用内存来为这些文件系统建立缓冲区,以最高效的使用文件系统。但对于缓冲区的使用有两种不同的方式,一种方式是缓冲读的数据,而写数据的时候,则直接写入磁盘,这种方式磁盘中的数据总是最新的,因此称为同步方式(sync),这是FreeBSD系统进行磁盘读写的缺省方式,由于数据更新比较及时,即使遇到系统掉电等意外事故,通过fsck也能正常修复。

另一种方式是写数据的时候也先放入缓冲区中,而不直接写入磁盘,这种方式为异步模式的文件安装方式(async)。这样磁盘上的内容与内存中是非同步的,系统定期或在需要的时候,才去更新磁盘上的物理信息(sync命令将强迫系统更新磁盘)。

这种非同步的方式就使得管理员要移去文件系统必须通过系统来完成卸载,而不应该直接取出。如果直接移去软盘,或者因为系统突然掉电而造成没有正确卸载文件系统,就会直接造成磁盘上的数据不正确,从而不得不使用fsck来检查和修复这些文件系统,严重的错误甚至fsck也不能修复,造成无法挽回的损失。

事实上文件系统中的数据对于系统完整性来讲,可以区分为不同类型的数据,有的数据对于数据完整性比较重要,例如一些目录文件的内容,这些文件的数据损失不但会造成其本身整个文件的数据丢失,还会影响目录内其他未读写的文件的丢失,因此这些数据被称为元数据,这些数据的操作应该是同步的,而另一些数据重要性就没有这样严重,最多影响其本身。因此,系统对于元数据是同步处理,而对于其他数据,则可以异步更新。

也可以在执行mount命令的时候使用sync的安装选项,使硬盘数据和内存缓冲区保持同步,这样虽然降低了存取效率,但更适合对数据的完整性提出较高要求的系统。

[关闭][返回]