Linux操作系统
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

5.3 文件系统管理

不同类型的操作系统总是按照自己的目的支持一些特定的文件系统。Linux支持多种微机上常用的文件系统,Windows 2000及以后版本的Windows系统支持FAT12、FAT16、FAT32和NTFS等。关于Linux所支持的文件系统请参阅/usr/share/doc/kernel-doc-2.6.25/Documentation/filesystems/内的相关*.txt文档。

5.3.1 UNIX/Linux支持的文件系统

1.msdos、umsdos、vfat、ntfs文件系统

msdos文件系统是早期IBM或MS-DOS所支持的FAT12或FAT16文件系统。随着MS Windows的发展,在DOS文件的基础上又出现了FAT32文件系统。

umsdos是msdos文件系统在Linux上的扩展,它在不牺牲msdos兼容性的前提下增加了长文件名、uid/gid、POSIX文件权限和特别文件。

vfat是以上FAT12、FAT16、FAT32等文件系统的总称。

ntfs是MS Windows NT及以后版本Windows系列可支持的文件系统。目前Linux系统可以对它进行只读方式的支持。

2.minix文件系统

minix文件系统是Linux前身minix操作系统的文件系统。它有很多的不足或限制:64MB的分区限制;短文件名;只有一个时间日戳等。它依然存在主要是因为软盘(floppy)和内存文件(ramfs)系统。

3.ext、ext2、ext3和ext4

ext是minix文件系统的扩展,现已被ext2所替代,并且从版本2.1.21开始,Linux在内核中取消了对它的支持。

ext2是Linux系统中高效、可靠的文件系统,可用在硬盘或可移动存储介质上。它是ext的扩展,被认为是基于速度和CPU使用的最高效的文件系统。

ext3是ext2的扩展,它在ext2的基础上增加了日志功能,或者说它是ext2的日志文件系统版本。

ext4是一种针对ext3系统的扩展日志式文件系统,是专门为Linux开发的扩展文件系统(ext或extfs)的第4版。Linux kernel自2.6.28开始正式支持ext4文件系统。ext4是ext3的改进版,修改了ext3中部分重要的数据结构,可以提供更佳的性能和可靠性,还有更丰富的功能,如可支持无限数量的子目录。

4.ISO9660文件系统

ISO9660文件系统是符合ISO9660标准的CDROM文件系统,它有两种标准:High Sierra和Rock Ridge。

High Sierra是ISO9660标准的先驱文件系统,在标准的ISO9660文件系统内它能自动被识别。Rock Ridge是一种UNIX格式的文件系统,在这种格式下可提供长文件名、uid/gid、POSIX文件权限和设备特别文件等。

5.proc和sysfs

proc是用于内核数据接口的伪文件系统,proc不占用磁盘空间,在系统启动时自动产生并挂载到/proc,在系统关闭时自动消失。它可以理解为PCB表结构在内存中的登记,在Linux系统中可以理解为task_struct结构,其中记录了系统中每个进程的活动情况、资源占用等信息。每当系统创建一个进程时,就要在/proc中按进程的pid为进程创建一个目录,以记录该进程的动态行为和资源需求等。用户可以进入/proc目录查看其中的内容。

对用户来说,proc的大部分是只读的,通过它可得到系统参数,但是其中的某些文件是允许修改的,可通过修改其内容达到动态个性修改内核参数的目的。更多关于proc文件系统的信息可通过命令man proc或阅读文件/usr/share/doc/kernel-doc-2.6.25/Documentation/filesystems/proc.txt得到。

sysfs是一种基于RAM的文件系统,它提供了一种向用户空间展现内核空间对象、属性和链接的工具。这里的内核空间对象是指kobject结构(这里不深入讨论),它是Linux在2.6版中新引进的统一的设备管理模型,主要目的是使系统的所有设备在底层都具有统一接口,以便进行统一管理。因此,对于每个注册到系统的kobject,在sysfs中都有一个目录来表示它。使在用户空间可以看见这些层次关系。sysfs通常被安装在/sys目录中。在/sys目录下有block、bus、dev、fs、power等设备类型,在它们的下面还有各种不同子类型,用户可以使用tree命令查看其中的层次结构。

6.Sysv、S5、Xenix、Coherent

S5是UNIX系统的文件系统。Xenix操作系统是UNIX在微机系统上的一种实现,它所使用的文件系统是Xenix。Sysv是UNIX Sysv/Coherent文件系统在Linux系统中的一种实现。

7.nfs、ncpfs、smb和cifs

nfs是一种用于存取远程系统上的网络文件系统,用于在UNIX系统间通过网络进行文件共享。用户可以把NFS服务器提供的共享目录挂载到本地目录下,然后可以像对本地文件系统一样操作nfs系统的内容。

ncpfs是一种被Novell NetWare使用的支持NCP协议的网络文件系统。

smb(server message block)是由微软等几家公司提出的网络共享协议,被用于Windows for Workgroup、Windows NT和Lan Manger,支持smb协议的网络文件系统及打印机共享。微软已经将smb改名为公共互联网文件系统cifs(common internet file system)。在Fedora Core 9中smb文件系统也被叫做cifs,通常用于实现与Internet文件系统或Windows主机之间的网络文件或打印机共享。在UNIX/Linux系统上可以通过Samba等系统实现与Windows系统的共享(参见第15章)。

8.jfs

jfs(jounaling file system)是日志文件系统。提供日志功能的文件系统是当今的发展趋势。当今主流公司小型机以上操作系统的文件系统大多采用或支持jfs文件系统。

采用jfs的操作系统,在将数据写入外存前先写日志文件,以便在外存操作出故障后可通过日志文件恢复,增加了系统的安全性。ext3就是日志文件系统的一种。

5.3.2 UNIX/Linux系统使用的存储设备

支持广泛流行的存储设备或介质是现代操作系统的特点。Linux系统使用的存储设备或介质有软盘、硬盘、光盘、U盘、磁带和多种存储卡等。关于设备文件及设备文件的描述请参阅/usr/share/doc/kernel-doc-2.6.25/Documentation/devices.txt文档。

1.IDE硬盘存储设备

一般情况下,在一个计算机内最多可以安装4个IDE硬盘,它们可分别是主(master)驱动器上的主(master)硬盘和从(slave)硬盘和从(slave)驱动器上的主硬盘和从硬盘。

IDE硬盘设备的形式为/dev/hdmn,其中的m∈(a,b,c,d,…)代表驱动器号。/dev/had、/dev/hdb为主控制器上的主硬盘和从硬盘;/dev/hdc、/dev/hdd代表从控制器上的主硬盘和从硬盘。n∈(1,2,3,…)代表第m个硬盘上的分区号,如/dev/hda代表第一个硬盘,/dev/hda1、/dev/ hda2、/dev/hda3、/dev/hda4分别是/dev/hda的4个基本分区,/dev/hda5和/dev/hda6则为/dev/hda上的第一个和第二个逻辑分区。

2.光驱和刻录机

IDE光驱设备也是可连接到IDE接口上的设备,它可以占据IDE控制器上的某个位置,也就是说光盘驱动可能是/dev/had、/dev/hdb、/dev/hdc、/dev/hdd中的一个。

一般来说,光盘驱动器为/dev/cdrom,该设备是某个硬盘设备的符号链接或硬链接。例如,在Linux系统中的光盘设备/dev/cdrom是设备/dev/hdc的一个符号链接,在有的Linux系统中它是/dev/scd0的一个链接,而在有的系统中它又是/dev/sr0的一个链接。光驱也有SCSI接口的。

说到光驱,人们自然会想到刻录机,在Linux 9中默认刻录机设备是/dev/cdwriter,它被链接到/dev/sg0或/dev/sg1。在Fedora Core 9中,刻录设备可直接使用/dev/sg0或/dev/sg1等。

3.SCSI存储设备

SCSI(Small Computer System Interface)接口是小型计算机接口的简称,是一个多用途的I/O接口,除可接磁盘外,还可接磁带机、光驱、扫描仪等设备。SCSI总线上能连接的设备类型很多,结构和控制也与IDE不同,这里不做过多介绍。

SCSI存储设备的形式为/dev/sdpl,p∈(a,b,c,d,…)为字符代表物理设备,l∈(1,2,3,…)为物理设备p上的逻辑分区。

SCSI上的硬盘设备的命名方法与IDE硬盘设备的命名方法相同。例如,/dev/sda、/dev/sdb分别为第一个和第二个SCSI硬盘,/dev/sda1和/dev/sda2分别代表第一个SCSI硬盘的第一个和第二个分区。

4.USB存储设备

较早版本的UNIX不支持USB,但现在Linux系统提供了对USB存储设备的支持。由于早期USB设备标准不统一,Linux系统不能保证所有USB存储设备都能正常使用,尤其早期的USB设备。常用的USB存储设备有U盘、USB硬盘和USB软盘等。

Linux以SCSI方式支持USB存储设备。

一般来说,如果系统使用的硬盘不是SCSI的,则可根据所使用的USB设备不同而使用/dev/sda、/dev/sda1、/dev/sda2等,或/dev/sdb、/dev/sdb1等SCSI设备。如果系统使用了SCSI硬盘,则USB设备可以使用系统使用的SCSI硬盘设备的下一个SCSI设备。例如,假设系统所使用的最后一个SCSI硬盘设备为/dev/sde,则使用U盘等移动设备时可用的第一个SCSI设备为/dev/sdf。

在使用USB等移动存储设备时,/dev/sda、/dev/sdb等可用于USB软盘;/dev/sda1,/dev/sda2,…,/dev/sdb1,/dev/sdb2,…等可用于U盘,也可用于表示移动硬盘上的不同分区。

5.软盘设备

早期的大多数操作系统都支持软盘,尽管现在有的厂商的计算机已经不再配置软盘驱动器。有的软件厂家也声称以后的系统将不再支持软驱设备,但现在的操作系统仍支持软盘驱动设备。

软盘设备根据它在控制器上的连接情况或先后顺序和容量可命名为/dev/fdnts,其中n∈(0,1,…)为软驱编号;t∈(d,h,u)为软驱类型,d和h用于5英寸盘,分别表示双密或高密,u用于3英寸盘表示以双密和高密;s∈(360,720,1200,1440,2880,…)表示软盘的容量。

Linux系统常用的软盘设备为/dev/fd0(第一软驱),/dev/fd1(第二软驱),默认容量均为1.44MB,其余略。

6.磁带设备

磁带设备是UNIX/Linux系统用于数据备份、系统安装等操作的常用设备。在Linux系统中支持多种磁带设备,IDE的磁带设备文件为/dev/ht0、/dev/ht1等,SCSI的磁带设备文件为/dev/st0、/dev/st1等。

5.3.3 文件系统的创建

文件系统是建立在存储介质上的,对存储介质的使用首先要进行规划,如对硬盘的使用必须先在其上创建物理分区或逻辑分区等。对硬盘分区或移动存储介质的使用方法是,首先进行格式化,然后要在其上创建文件系统,最后才能使用。

1.在硬盘上创建分区(fdisk)

在硬盘上创建分区的命令是fdisk和parted,这里只介绍fdisk。关于fdisk,在IBM PC_DOS、MS-DOS、Windows 95或Windows 98系统中有相同的命令完成相应的工作。

1)fdisk命令的功能与用法

fdisk命令的功能是在硬盘上创建、删除或修改分区。其用法为:

                fdisk [-u] [-b sectorsize] [-C cyls] [-H heads] [-S sects] device
                fdisk-l[-u][device …]
                fdisk-s partition …

2)参数说明

fdisk命令的参数如表5-7所示。

表5-7 fdisk命令的参数

fdisk命令的常用方式是:

                fdisk <硬盘设备名>

进入交互方式,用户可以在交互方式下使用表5-8中的命令对指定磁盘进行操作。

表5-8 fdisk的交互方式常用命令表

                Command (m for help):

当用户输入m后,会显示一个帮助菜单。

3)使用fdisk分区示例

                #fdisk                    #fdisk命令用法信息
                #fdisk-l                  #显示所有硬盘或U盘的分区信息
                #fdisk-l/dev/sda           #显示硬盘的分区信息

fdisk的使用,需要很多的实践经验,若操作不慎可能会造成硬盘数据的丢失,初学者可以在试验用机上进行操作。

2.创建文件系统(mkfs)

UNIX/Linux系统对存储介质的使用,要先进行格式化,除非该介质是已经格式化过的。大部分UNIX/Linux系统对磁盘介质的格式化过程包含在文件系统的构造过程中。创建文件系统的命令是mkfs。

1)功能与用法

mkfs命令的功能是创建文件系统的总控程序,它会根据将创建的文件类型调用相应的创建程序来完成文件系统的创建工作。可用于创建文件系统的命令如表5-9所示。

表5-9 用于创建文件系统的命令

mkfs命令的用法为:

                mkfs  [-v][-t fstype][fs-options]filesys[blocks]

2)参数说明

mkfs命令的部分参数如表5-10所示。

表5-10 mkfs命令的部分参数

3)文件系统创建示例

                #mkfs-t vfat/dev/sdb           #在移动磁盘上创建vfat文件系统
                #mkfs-t ext2/dev/sdb           #在移动磁盘上创建ext2文件系统
                #mkfs-t ntfs/dev/hd10          #在IDE硬盘的/dev/hd10分区上创建NTFS分区

3.创建光盘文件系统(mkisofs/genisoimage)

1)功能与用法

传统的创建光盘文件系统的命令是mkisofs,在Fedora Core 9中它有一个替代命令genisoimage,这里将它们理解为是同一命令。光盘文件系统有多种格式,利用Linux系统提供的光盘文件系统创建命令mkisofs/genisoimage可以创建包括具有Rock Ridge属性在内的多种ISO9660文件系统。一般不使用它们直接刻录光盘,而常用它们创建一个光盘映像文件。它们的用法为:

                mkisofs  [options][-o filename]path[path … ]
                genisoimage  [options][-o filename]path[path … ]

2)参数说明

mkisofs/genisoimage命令常用参数如下。

-o filename:光盘映像文件名。

path:欲刻录文件名、目录名或目录树名。

options:mkisofs有很多参数可供选择,用于控制自身行为,以达到不同的目的,这里不再做具体介绍,请参阅相关手册。

3)示例

(1)创建iso文件系统,#将目录cd_dir1和cd_dir2等内容“刻录”到映像文件mycd.iso。

                #mkisofs-o mycd.iso cd_dir1 cd_dir2 …

注意:因未指定Rock Ridge格式,所以cd_dir1和cd_dir2中的长文件名将被截为8.3格式。

(2)创建具有Rock Ridge属性的文件系统。

                # genisoimage -o myRcd.iso -R my_dir

(3)创建可启动的光盘。

                # mkisofs -o my_bootcd -b myboot_img my_cd_dir

说明:-b用于指定的映像文件名为myboot_img,引导盘映像必须以相对路径的方式存在于my_cd_dir中。

4.光盘刻录(cdrecord/wodim)

由于mkisofs不直接在光盘上构造文件系统,因此Linux还提供另一个命令cdrecord将光盘映像刻录到光盘上。在Fedora Core 9中提供wodim来替代cdrecord,在这里也可以认为它们是相同的,其用法为:

                cdrecord[general options]dev=device[track options]track1 … trackn
                wodim[general options]dev=device[track options]track1 … trackn

cdrecord是一个复杂的系统,涉及很多ISO9660文件系统和与刻录机相关的技术参数,而且还要和刻录机打交道。由于不同厂家的刻录设备很多,这里使用Linux系统提供的默认刻录设备/dev/cdwriter或/dev/sg0或/dev/sg1,而忽略物理设备的差异。刻录光盘的示例如下:

                #cdrecord dev=/dev/cdwriter myiso.img          #将光盘映像myiso.img刻录到光盘
                #mkisofs-R my_dir|cdrecord dev=/dev/cdwriter    #通过管道将文件直接刻录到光盘
                #mkisofs-R my_dir|cdrecord dev=/dev/sg0         #Fedora Core 9

5.3.4 文件系统的使用

UNIX/Linux系统可以使用自己支持的文件系统。欲使用已经存在的文件系统,必须首先使用安装命令mount进行安装,使用完毕后用卸载命令umount进行卸载。

当一个外来文件系统或设备被安装在某一个目录上后,该系统或设备上的内容就可通过该目录在系统中得到反映。从此,对该目录的存取就变成了对设备的存取。

为了保证存储介质的正确使用,必须按“安装→使用→卸载”的顺序来进行操作。如果不按规定操作,而中途把介质强行取出,则可能造成存储介质上文件系统的损坏、数据不完整或丢失。

受损的文件系统,必须经过(使用fsck)清理或修复后才能继续使用。

在UNIX/Linux系统中,所有可以访问的文件都必须在文件系统的目录树上。mount的作用就是要把单独、分离的文件系统挂载在UNIX/Linux文件系统的某个目录上。文件系统可以安装在文件系统的任何目录上。在早期的系统中,要求安装位置(或称为安装点)必须是一个空目录。在现在的系统中,安装点也可以是非空目录,但有一个限制,当在某一个非空目录上安装外来文件系统后,该目录中原来的内容将无法“看到”,直到安装的部分被卸载。为了解决安装位置的问题,UNIX/Linux系统提供了一个可以被广泛使用的安装点/mnt。在现在的版本中,往往还在/mnt目录下开辟一些子目录,如/mnt/floppy、/mnt/cdrom等,用于不同目的的安装。必要时,用户也可以在/mnt下创建自己的目录,如/mnt/hd、/mnt/usb等用于安装硬盘分区和U盘等。在Fedora Core 9系统中,图形界面自动安装时所使用的安装点为/media目录。

1.文件系统安装(mount)

1)功能与用法

mount命令的功能是安装文件系统。其用法为:

                mount [ -lhv ]
                mount -a [ -fFnrsvw ] [ -t fstyp ] [ -O optlist ]
                mount[-fnrsvw][-o opts[, … ]]dev|dir
                mount [ -fFnrsvw ] [ -t fstyp ] [ -o opts ] dev dir

mount命令的一般形式为:

                mount [ -fFnrsvw ] [ -t fstyp ] [ -o opts ] dev dir

这里dev为设备或文件系统,dir为安装目录或安装点,-o参见表5-11。

表5-11 mount命令常用的参数

当不带任何参数运行mount时,将显示系统中已经安装的所有文件系统。

与mount命令相关的文件有/etc/mtab、/proc/mounts、/proc/pid/mounts、/etc/fstab。/etc/mtab与/proc/mounts的内容是系统现行安装的文件系统表。/etc/fstab是UNIX/Linux系统实现文件系统自动挂载的配置文件。

2)参数说明

mount命令常用的参数如表5-11所示。

3)示例

                #mount                          #列出系统内安装的设备或文件系统
                #mount-t vfat/dev/sda1/mnt/usb     #将U盘上的vfat格式的系统安装在/mnt/usb上
                #mount-t vfat/dev/sda/mnt         #将U盘上的vfat格式的系统安装在/mnt上
                #mount-r-t S51/dev/fd0/mnt/floppy #将软盘上的sysv格式的文件系统以只读方式安装
                #mount/dev/cdrom/mnt/cdrom      #将光盘安装在目录/mnt/cdrom上

2.文件系统卸载(umount)

当一个被安装的文件系统使用完毕后,应该将其卸载下来,以确保文件系统的完整性。卸载已经安装的文件系统这一任务由umount完成。若是软盘、U盘和移动硬盘等移动设备,在取走设备前必须卸载。系统设备也可不卸载,待关闭系统时由系统自动完成卸载工作。

umount命令的用法为:

              umount dev_mounted
        或   umount dir_mounted

假设设备/dev/sdb1上的文件系统被安装在/mnt/usb上,则可用两种方法卸载它:

              # umount /dev/sdb1
        或   #umount/mnt/usb

若有用户正在已安装的目录工作,卸载时会出现“device is busy”的信息。解决问题的办法是让工作者离开此目录,然后再卸载。

当光盘被成功安装后,直到被卸载,光驱仓门将无法再打开,若要打开光驱,必须首先卸载光驱设备,或者使用命令:

                # eject

3.映像文件的挂载

安装设备上的文件系统时是和某个设备密切相关的,安装一个文件系统的映像文件使用什么设备呢?系统提供的loop设备可用于此目的。将映像文件挂载或安装到文件系统时需要使用-o参数和loop设备。映像文件一般只能以只读的方式安装。方法是:

                mount -t fstype -o loop[=loop_dev] fs_img mnt_dir

这里的loop_dev为/dev/目录下的文件(loop0~loop7或更多)。安装时,可只使用loop参数而不指定loop设备,由mount自己查找一个可供使用的空闲设备。映像文件挂载示例如下:

(1)将软盘映像文件my_dos上的DOS文件系统安装到/mnt/floppy:

                #mount -t vfat -o loop my_dos /mnt/floppy

(2)将光盘映像文件/tmp/myiso的内容复制到当前目录:

                #mount-t iso9660-o loop/tmp/myiso/mnt/cdrom      #安装在目录/mnt/cdrom
                #cp-r/mnt/cdrom/*.                             #复制其内容到当前目录
                #umount/mnt/cdrom                             #卸载映像文件

4.文件系统的自动挂载

1)功能及配置文件

手动挂载的文件系统,可以手动卸载,也可以在系统关闭时由系统自动卸载。Linux系统可以自动挂载设备,这表现在当系统启动时一些设备被自动挂载,也表现在某些设备连接到计算机系统时,如光盘被放入光驱并关上仓门后,系统会将其自动挂载到指定位置。

控制设备自动挂载的配置文件为/etc/fstab,能够自动挂载的设备或文件系统都必须在此文件中定义。/etc/fstab的结构为:

                <filesystem> <mount_point> <fstype> <options> <dump> <pass>

其中每个域的意义如表5-12所示。

表5-12 /etc/fstab文件说明

/etc/fstab文件挂载部分选项如表5-13所示。

表5-13 /etc/fstab文件挂载部分选项

某系统的/etc/fstab如下所示。

                LABEL=/                /                    ext3                defaults                 1 1
                LABEL=/boot            /boot                ext3                defaults                 1 2
                none                     /dev/pts             devpts              gid=5,mode=620        0 0
                none                     /proc                proc                defaults                 0 0
                none                     /dev/shm            tmpfs               defaults                 0 0
                /dev/sda3                swap                swap                defaults                 0 0
                /dev/cdrom               /mnt/cdrom          udf,iso9660         noauto,owner,kudzu,ro   0 0
                /dev/fd0                  /mnt/floppy         auto                noauto,owner,kudzu      0 0

对于已经在fstab内定义的文件系统可以使用不带安装点的mount命令安装。例如,在fstab中定义了/dev/cdrom和/dev/fd0的安装位置分别为/mnt/cdrom和/mnt/floppy,则使用命令:

              # mount /dev/fd0
        和   #mount/dev/cdrom

可将光盘和软盘分别安装在目录/mnt/cdrom和/mnt/floppy。

需要说明的是,在Fedora Core 9中所有的移动设备都不再添加到/etc/fstab中了,但仍可被自动安装。

2)文件系统自动挂载示例

对于多个操作系统共享硬盘的计算机系统,在Linux系统中可以通过安装的办法访问其他分区上的文件系统。设Windows系统的C:盘所对应的为/dev/hda1,其上的文件系统为fat格式,则可通过命令:

                # mount /dev/hda1 /mnt

将其安装在/mnt目录。也可以通过设置开机自动安装的办法将其安装在/winc目录,方法如下。

(1)创建一个安装点/winc:

                #mkdir/winc                  #只需创建1次,若事先已经存在,则不需再创建

(2)编辑/etc/fstab文件,在其中增加一行,其内容为:

                /dev/hda1 /winc vfat rw 0 0

配置完成后,当重新启动系统后,Windows系统的C:盘就会自动安装在/winc上。

5.以裸方式使用文件系统或设备

1)裸设备的概念

裸设备(Raw Device)是指没有文件系统的设备,如一个软盘、U盘、硬盘或一个硬盘分区等都可看成是一个裸设备。裸设备也称原始设备。

以裸或原始方式使用设备就是将设备直接作为文件来使用。因为在UNIX/Linux系统中设备是作为文件来管理的,所以设备可直接作为文件来使用。除非用户目的特别明确,否则设备直接作为文件使用是危险的,因为系统把设备直接作为文件来使用时,会忽略其上的文件系统。若往其上写信息,则其上的原有文件系统将被覆盖,也就是说原来文件系统及其内容都将被擦除并重写。

以原始方式使用设备或文件系统常用于构造设备映像文件,也可以进行介质复制。当然,若要对一个硬盘或分区进行重新规划或格式化时,必须以裸方式使用设备。欲将以裸方式使用过的设备再以文件系统方式使用,还必须重新在其上构造文件系统。

2)裸设备使用示例

(1)构造和使用映像文件。映像文件是指光盘、磁盘或其他存储的文件系统及内容在UNIX/Linux或Windows系统的硬拷贝。

构造映像文件的方法是通过命令cp或dd将含有某个文件系统的存储介质(如光盘、软盘)上的内容以文件的形式完整地复制到指定文件中。映像文件的使用示例是制作映像文件或介质复制,示例如下。

                #cp/dev/fd0  /tmp/fd_img      #制作软盘映像文件
                #cp/dev/cdrom/tmp/cdimg.iso   #制作光盘映像文件,可能需要更大的存储空间
                #cp/dev/sdb/tmp/u_img        #制作U盘映像文件,可能需要更大的存储空间
                #沿反方向也可把映像文件复制到存储介质上,以达到复制介质的目的

(2)构造引导盘。在Red Hat Linux9/Fedora Core 9下可用以下方法构造引导盘:

                mkbootdisk --device devicefile --size size kernel

结构引导盘的示例如下:

                # mkbootdisk --device /dev/fd0 `uname -r`

说明:mkbootdisk在软件包mkbootdisk上,还需要syslinux包的支持;若不使用/dev/fd0,则可以指定一个普通文件;`uname -r`是系统的版本号;这里没有指定size,由系统自动检测。

5.3.5 文件系统的检查、修复与同步

几乎在所有的UNIX/Linux系统中,受损的文件系统都是不能被正常安装的,必须经检查和修复后才能被正常使用。但文件系统受损是可能的,原因是掉电或其他电源故障。文件系统修复工具为fsck。

文件系统的检查有时是系统自动进行的,如Linux系统在文件系统被安装一定次数或使用一定时间后要对进行检查或清理。Windows系统也经常在启动时做文件系统的检查工作。

1.文件系统要求清理的原因

有很多原因会引起文件系统的损坏或不一致,如意外掉电、非法关机、强行拔出未卸载的设备等。

文件系统受损或不一致表现在:文件真实大小与分配的块不一致;文件的链接数错误;i节点内容错误;丢失块与丢失文件;空闲块总数或空闲i节点总数错误等。检查文件系统的目的就是要修复以上问题。

2.fsck

1)功能与用法

fsck命令的功能是检查、修复文件系统和报告文件系统情况。其用法为:

                fsck [ opts ] [ -t fstyp ] [ filesystems ]

fsck命令一般不用于已经安装且正在使用的文件系统检查。在检查过程发现的丢失(孤儿)文件将被拯救。拯救后的文件以i节点号为文件名,存放在文件系统的目录/lost+found中。根据所用参数的不同,在fsck工作过程中可能会显示很多信息。

与mkfs一样,fsck也是一个前端总控程序,在执行过程将根据不同的文件系统而调用相应文件系统检查程序。相应文件系统的检查程序以fsck.*的形式存放在系统目录/sbin下。当不带参数运行fsck时,fsck将根据/etc/fstab的内容按顺序进行操作。

2)参数说明

fsck命令的常用参数如表5-14所示。

表5-14 fsck命令的常用参数

3)示例

(1)系统开机问题检查。当系统遇到非法关机等情况时,在下次开机过程中可能要对文件系统进行检查,并且会遇到自动检查通不过的情况,此时系统不再继续启动,而是直接出现提示符#进入单用户模式,或者出现“Type CTRL_D继续或输入root密码进入系统维护模式”提示,要求用户输入CTRL_D或root用户密码。当输入root密码后进行系统维护模式,需要手动处理启动时遇到的问题。此时管理员必做的工作是清理文件系统,然后重新启动。设系统的引导和根分区分别是/dev/sda2和/dev/sda10(可参见/etc/fstab),检查方法如下所示。

                #fsck-a-y/dev/sda2        #检查/dev/sda2
                #fsck-a-y/dev/sda10       #检查/dev/sda10
                #fsck-a-y                #检查所有文件系统
                #reboot                   #重新启动

(2)检查软盘上文件系统。

                #fsck-t ext2/dev/fd0        #设软件设备为/dev/fd0,其上的文件系统为ext2
                #fsck-t ext2/dev/sdb        #设使用的设备为USB软驱,如/dev/sdb

3.sync

sync命令的功能是同步文件系统,将所有缓冲区的内容写到存储设备,并更新超级块。其用法为:

                sync

如果计算机系统的用电环境是安全的,并按规定进行操作,文件系统一般是不会受损的,因此不需要人为地进行同步,必要时系统会自动做此项工作。但在即将出现的停电且又不能马上关机等特殊情况下,为了将文件系统所受损失降到最小,可用sync进行同步,把各种I/O缓冲区的内容写到存储设备上。