第7章-Linux磁盘管理要点课件.ppt
第七章 Linux磁盘管理,磁盘作为存储数据的重要载体,在日渐庞大的软件资源面前显得格外重要。目前,各种存储器的容量越来越大,磁盘管理的难度也越来越高。7.1 Linux文件系统 文件系统是Linux的核心模块。通过文件系统,用户可以很好地管理文件及目录资源。,7.1 Linux的文件系统,7.1.1 Linux常见文件系统类型 不同的操作系统使用的文件系统类型也不同,例如Windows XP支持FAT32和NTFS文件系统。Linux支持的文件系统很多,下面简单介绍。1Minix:Minix是Linux支持的第1个文件系统,该文件系统对用户的限制很多,性能很低。其最大缺点是最大只支持64MB的硬盘分区,现在该文件系统类型已无人使用了。2Ext:ext是专门为Linux操作系统设计的文件系统类型,称为扩展文件系统,在Linux发展的早期,起过重要的作用。但由于其稳定性、速度和兼容性方面存在许多缺陷,ext文件系统现在也很少使用。3Ext2:ext2文件系统是Linux自行设计并具有较高效率的一种文件系统类型,并被作为Linux默认的文件系统。它支持文件名可长达255个字符,其特点为存取文件的性能极好,对于中小型的文件更显示出优势,这主要得利于其簇快取层的优良设计。其单一文件大小与文件系统本身的容量上限与文件系统本身的簇大小有关,在一般常见的 x86 中,簇最大为 4KB,则单一文件大小上限为 2048GB,而文件系统的容量上限为 16384GB。,4ext3 ext3文件系统是ext2的升级版本,兼容ext2。与ext2文件系统相比,ext3增加了文件系统日志记录功能,称为日志式文件系统,是目前Linux默认采用的文件系统。由于具有了日志功能,当因断电或其他异常事件而非正常关机时,重启系统后操作系统会根据文件系统的日志,快速检测并恢复文件系统到正常的状态,提高数据的安全性。5MS-DOS 这是DOS、Windows和一些OS/2计算机使用的文件系统。对于MS-DOS文件系统,文件名长度不能超过8个字符,扩展名不能超过3个字符。6UMSDOS 这是Linux使用的、扩展的DOS文件系统,增加了对长文件名、UID、GID的支持,允许一个普通的DOS文件系统用于Linux。,7VFAT 这是Windows 9x、Windows XP使用的扩展的DOS文件系统,增加对长文件名的支持。8ISO9660 这是一种针对ISO9660标准的CD-ROM文件系统,允许用户在PC、Mac和其他主要计算机平台上读取CD-ROM文件。几乎所有带有CD-ROM的计算机都可以从ISO9660文件系统读取文件。9SYSV 这是System V文件系统在Linux上的实现,实现了所有的Xenix、System V/386文件系统。10NFS 这是用于存取远程计算机硬盘的文件系统。11SMB 这是支持SMB协议的网络文件系统,Windows用它来实现工作组共享。,12SWAP 这是一种特殊的分区,用于在内存和硬盘间交换数据的文件系统。13NTFS 这是Windows NT文件系统,Windows 2000/XP及以后的操作系统都支持该文件系统。,补充知识,Linux怎样保存文件假设用户elvis打开一个文本编辑器,并且写好下面的购物清单。eggbaconmilk当他写完后,关闭文本编辑器时会问如何命名这个文件时,选择用shopping.txt。存档后,列出该目录中的内容以确定文件被保存在该目录下。elvisstation elvis$ls ltotal 4-rw-rw-r-1 elvis elvis 16 Jul 11 07:54 shopping.txt这个简短的例子说明Linux系统中与文件相关的3个组成部分。,1)数据这里数据就是文件的内容,即上述例子中组成用户elvis购物清单的16个字节(其中13个字符显示,3个回车符不显示,只表示一行的结束)。就像Unix系统一样,在Linux系统中,每个文件的内容以一系列的字节形式保存。2)元数据在Linux系统中,每个文件除了内容之外,都有一些相关信息。这类信息,即用户所有者、组所有者和权限。同时也保存了其他信息,如文件被最后一次修改或阅读的时间。当你执行ls l命令式,大多数此类的元数据就显示出来。在Linux(Unix)系统中,所有与某个文件相关的额外信息都保存在一个叫做inode(i-节点)的结构中。,3)文件名尽管文件名也可以被称为文件相关的元数据,它却是上述原则的例外,因为文件名不直接保存在i-节点中。相反,文件名保存在名为dentry(目录项)的结构中(在后面的章节中我们会看到dentry是directory entry的缩写,dentry的结构与目录密切相关)。实质上,该文件名把一个文件的名称和一个inode关联在一起。总的来说,每个文件都有以下3层结构:dentry、inode和data。Dentry含有文件名并关联inode,inode含有文件元数据并指向数据区(data)。了解这3层结构的关系有助于理解后面的概念,比如链接(link)和目录(directory)的概念,下图总结了这三层文件结构:,2.什么是i-节点在Linux(和Unix)系统中,文件系统内的每个文件都有一个相关的i-节点,里面保存着除了文件名以外的所有文件信息。i-节点里面有什么呢?1)文件类型在Linux(和Unix)系统中,file的含义非常笼统:文件系统内的任何东西(并且与之相关的i-节点)都可以是一个文件,包括我们已经提到过的常规文件和目录,将要提到的符号连接和设备节点、与进程间通信相关的比较抽象的定义,下表列出了可能出现的文件类型。,改变(change)和修改(modify)有什么不同?当一个文件的数据改变时,就说该文件被修改了,mtime得到更新。当一个文件的i-节点改变时,就说该文件被改变了,ctime得到更新。修改一个文件(改变mtime)也引起ctime的更新。而仅仅阅读一个文件(改变atime)不会引起ctime的改变。注意:人们经常错把Unix系统的ctime当做文件的“创建时间”。说来奇怪,传统Unix(Linux)系统不记录文件的创建的时间,有些人认为缺少创建时间是Unix系统文件设计中的一个缺陷。,2)文件长度和大小i-节点用两种度量记录文件大小:文件的长度(即文件数据的实际字节数)和大小(即所占用的磁盘空间量)。由于文件在磁盘上保存的底层信息不同,两种度量有所不同,一般来说,文件的大小每次以字节块(通常是4千字节)为单位增加,而文件数据增加时,其长度以单个字节为单位递增,而使用ls l命令时,文件长度(字节数)在第5列里显示,当使用ls l命令时,第5列里显示的则是文件大小(千字节数)。3)链接数最后,i-节点记录文件的链接数,也就是引用该文件的dentry数(文件名)。通常常规文件只有一个文件名,链接数也是1。然而,我们会发现情况并非总是这样,当使用ls l命令列出文件时,第2列显示的就是链接数。,Unix程序设计中,一个文件的i-节点信息集合叫做该文件的状态(status)。我们可以把stat命令看作是显示文件状态的命令,下表为stat命令行选项的功能。用法:stat OPTION FILE功能:显示文件(或文件系统)的状态信息。,下面例子中,用户chu查看文件/usr/games/fortune的i-节点信息:chustation$stat/usr/games/fortuneFile:/usr/games/fortune Size:17795Blocks:40IO Block:4096Regular FileDevice:303h/771d Inode:540564Links:1Access:(0755/-rwxr-xr-x)Uid:(0/root)Gid:(0/root)Access:2003-07-09 02:36:41.000000000-0400Modify:2002-08-22 04:14:02.000000000-0400Change:2002-09-11 11:38:09.000000000-0400,文件的名称,前面解释过,该信息其实不保存在i-节点中,而是保存在目录项中。与前面介绍的属于有点不符的是:stat命令把文件的长度叫做“大小”。该文件占用的文件系统空间块数。显然,此处stat命令所占用块的大小是2000字节。文件类型,此处是常规文件。链接计数,或链接到这个i-节点上的文件个数。该文件的用户所有者、组所有者和权限。该文件的atime、mtime和ctime。,7.2 常用磁盘命令,7.2.1 磁盘分区命名方式及挂载linux下硬盘分区的命名方式,主分区的顺序是14,扩展分区一个主分区,逻辑分区从5之后排列,硬盘一般是C盘为主分区,其他盘为逻辑分区,所以C盘为/dev/hda1,D盘为/dev/hda5、E盘为/dev/hda6等等,/dev/hda2为扩展分区硬盘命名:XX Y N 例如:sda1|hdb2.XX:分区名,前2个字母 标明分区所在设备的类型。hd(IDE硬盘)sd(SCSI 硬盘)Y:标明 分区所在的设备,例如:/dev/hda(第一个IDE硬盘)/dev/sdb(第二个SCSI硬盘)N:标明分区,前4个分区(主分区,扩展分区)数字1-4.逻辑分区从5开始。例如:/dev/hda3 是第一个IDE硬盘,第三个主分区或者扩展分区。/dev/sdb6 是第二个SCSI硬盘,第二个逻辑分区。,linux系统中每个分区都是一个文件系统,都有自己的目录层次结构。linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构。这里所说的“按一定方式”就是指的挂载。将一个文件系统的顶层目录挂到另一个文件系统的子目录上,使它们成为一个整体,称为挂载。把该子目录称为挂载点。,注意:1、挂载点必须是一个目录。2、一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用。3、对于其他操作系统建立的文件系统的挂载也是这样。但是需要理解的是:光盘、软盘、其他操作系统使用的文件系统的格式与linux使用的文件系统格式是不一样的。光盘是ISO9660;软盘是fat16或ext2;windows NT是fat16、NTFS;windows98是fat16、fat32;windows2000和windowsXP是fat16、fat32、NTFS。挂载前要了解linux是否支持所要挂载的文件系统格式。,挂载时使用mount命令:格式:mount-参数 设备名称 挂载点 参数含义:-t 指定设备的文件系统类型,常见的有:minix linux最早使用的文件系统 ext2 linux目前常用的文件系统 msdos MS-DOS的fat,就是fat16 vfat windows98常用的fat32 nfs 网络文件系统 iso9660 CD-ROM光盘标准文件系统 ntfs windows NT 2000的文件系统 hpfs OS/2文件系统 auto 自动检测文件系统,-o 指定挂载文件系统时的选项。有些也可用在/etc/fstab中。常用的有:codepage=XXX 代码页 iocharset=XXX 字符集 ro 以只读方式挂载 rw 以读写方式挂载 user 可以让一般用户挂载设备例子:对于挂载第一个FAT32格式的USB磁盘,命令为:#mount t vfat/dev/sda1/mnt/usb_disk,例子:windows装在hda1分区,同时计算机上还有软盘和光盘需要挂载。#mk/mnt/winc#mk/mnt/floppy#mk/mnt/cdrom#mount-t vfat/dev/hda1/mnt/winc#mount-t msdos/dev/fd0/mnt/floppy#mount-t iso9660/dev/cdrom/mnt/cdrom则可以进入/mnt/winc等目录读写这些文件系统了。,要保证最后两行的命令不出错,要确保软驱和光驱里有盘。如果你的windows目录里有中文文件名,使用上面的命令挂载后,显示的是一堆乱码。这就要用到-o 参数里的codepage iocharset选项。codepage指定文件系统的代码页,简体中文中文代码是936;iocharset指定字符集,简体中文一般用cp936或 gb2312。当挂载的文件系统linux不支持时,mount一定报错,如windows2000的ntfs文件系统。可以重新编译linux内核以获得对该文件系统的支持。,补充:VMware6.0挂载window xp的U盘(1)插入USB 盘,在终端键入fdisk-l 或者fdisk-l/dev/sdb查看是否识别,一般虚拟系统可以认识到U盘的存在了,并且给取名为 sdb1.;(2)建立一个挂装USB存储器的目录#mkdir/mnt/usb 如第一次没有成功是权限不够,我们加上sudo就可以了ls查看usb目录已经建立起来,3、将USB设备(/dev/sdb1)挂装到/mnt/usb目录下。mount-t vfat/dev/sdb1/mnt/usb-o iocharset=gb2312-t 指定设备的文件系统类型,在此,使用-t vfat 是所使用U盘的文件系统类型是 fat32;如果是ntfs 则使用-t ntfs 等等,可根据自己的文件系统类型灵活修改。-o 指定挂载文件系统时的选项,在此,-o iocharset=gb2312 设定中文字符集.假设你的locale是zh_CN.UTF-8,相应命令应为-o iocharset=utf8。挂载成功,即可使用U盘里的文件了,运行如下命令即可查看USB存储器中的文件信息 ls-l/mnt/usb。,7.2.2 卸载磁盘分区#umount device|dir例如:卸载一个光驱设备/dev/hdc 该设备挂载于/mnt/cdrom下,则可以直接卸载该设备,也可以通过其挂载的目录卸载,格式如下:#umount/dev/hdc#umount/mnt/cdrom,7.2.3 查看磁盘分区信息1、查看磁盘的挂载情况-mount#mount2、查看磁盘的分区情况-fdisk#fdisk l3、查看磁盘的使用情况-df#df-h,7.2.4 磁盘分区1、什么是分区?分区是将一个硬盘驱动器分成若干个逻辑驱动器,分区是把硬盘连续的区块当做一个独立的磁硬使用。分区表是一个硬盘分区的索引,分区的信息都会写进分区表。2、为什么要有多个分区?防止数据丢失:如果系统只有一个分区,那么这个分区损坏,用户将会丢失所的有数据。增加磁盘空间使用效率:可以用不同的区块大小来格式化分区,如果有很多1K的文件,而硬盘分区区块大小为4K,那么每存储一个文件将会浪费3K空间。这时我们需要取这些文件大小的平均值进行区块大小的划分。数据激增到极限不会引起系统挂起:将用户数据和系统数据分开,可以避免用户数据填满整个硬盘,引起的系挂起。,3、分区工具fdisk用法介绍 fdisk命令参数介绍 p:打印分区表 n:新建一个新分区 d:删除一个分区。q:退出不保存 w:把分区写进分区表,保存并退出。例子:#fdisk/dev/hdxxx 按“p”键打印分区表:这块硬磁尚未分区 按“n”键新建一个分区,出现两个菜单:e表示扩展分区,p表示主分区 按“p”键出现提示:“Partition number(1-4):”选择主分区号,输入1表示第一个主分区。直接按回车表示1柱面开始分区。提示最后一个柱面或大小。输入+5620M 按回车 表示第一个分区为5G空间。再按“p”查看一下分区,则一个主分区就分好了。,4、分区格式化 在使用硬盘之前必须对其分区进行格式化,并挂载。#mkfs-t type device block_size-t 参数type 为文件系统格式,如:ext3 vfat ntfs#mkfs-t ext3/dev/hdd1#mkfs-t ext3/dev/hdd2 或#mkfs.ext3/dev/hdd1#mkfs.ext3/dev/hdd2 创建挂载目录#mkdir/hdd1/hdd2 再挂载/dev/hdd1/dev/hdd2#mount/dev/hdd1/hdd1#mount/dev/hdd2/hdd2,7.3 磁盘配额管理,7.3.1 磁盘配额的系统设置 配额文件:/etc/fstab(用户项:usrquota,用户组使用:grpquota)#vi/etc/fstab/LABEL/ext3 defaults 1 1/LABEL/disk1/disk1 ext3 defaults,usrquota,grpquota 1 2/LABEL/disk2/disk2 ext3 defaults 1 2/dev/sda3 swap swap defaults 0 0修改好/etc/fstab后再重新启动计算机后生效。,还必须建立:aquota.group和aquota.user使用:quotacheck命令完成配额文件的自动创建,其还具有检查文件系统、建立磁盘使用率列表。Quotacheck的选项:-a:扫描/etc/mtab文件中所挂载的文件系统-d:启动调试模式-u:计算每个用户所占的目录和文件数目,并创建aquota.user文件-g:计算每个用户组所占的目录和文件数目,并创建aquota.group 文件-c:忽略现有配额文件,重新扫描病机,生成新的配额文件-b:备份旧的配额文件-v:活动模式,7.3.2 对用户和组设置磁盘配额linux系统的磁盘配额限制有两种,一种是软限额,一种是硬限额。软限额顾名思义就是比较不那么严格,在一定时间内可以超出限制,在记时器超时之前没有减少已分配空间的话,才会激发起限额。硬限额是立即生效的,在一个磁 盘上,用户超过了限额大小的话,就立即限制了,而且会被指出它们的运行超出空间了。磁盘限额机制可以根据要求来打开或者关闭,而且能按用户或者组来施行。soft limit:最低限制容量,在宽限期(grace period)之内,使用容量可以超过soft limit,但必须在宽限期之内将使用容量降低到soft limit以下。hard limit:最终限制容量,如果使用者在宽限期内继续写入数据,到达hard limit将无法再写入。宽限时间:使用容量超过soft limit,宽限时间自动启动,使用者将容量降低到soft limit以下,宽限时间自动关闭,如果使用者没有在宽限时间内将容量降低到soft limit,那么他将无法再写入数据,即使使用容量没有到达hard limit,linux 磁盘配额的配置方法首先安装quota 软件包1.#vi/etc/fstab(修改配置文件)/dev/sda1 ext3 defaults,usrquota,grpquota 1 1quota是针对单分区进行磁盘配额限制的,如果想针对某个目录进行限制,必须把该目录单独挂到一个分区中2.#reboot(重启电脑初始化)3.#quotacheck-cmug/(在根目录下生成配额文件)4.设置用户配额文件:#edquota-u abc(用户)#edquota-g 500(组名)(磁盘系统)(当前磁盘容量KB)(当前文件数)Filesystem blocks soft hard inodes soft hard/dev/sda1 897 2000 3000 22 39 50其中:使用edquota-u(用户)-g(组)-p(对磁盘配额进行复制)-t(对文件系统设置软时间设置),7.3.3 查看用户(组)磁盘使用情况使用命令:quota-u username quota-g groupname7.3.4 启动和终止磁盘配额使用命令:quotaoff/home 终止配额 quotaon/home 启动配额,磁盘配额的实例,建立用户qtest1和qtest2来进行磁盘配额,且这两个使用者都是qgroup群组里面的用户每个使用者的硬限制为50kB,软限制为45kB;inode的软限制为4个节点,硬限制为6个节点用户和群组的宽限时间设定为1天qgroup群组的最低限额设定为80kB,最大限额设定为90kB,节点的最低限额为7个,最高限额设定为11个,1、建立测试用的用户用户和群组2、建立文件系统的磁盘配额支持,新建一个分区,修改/etc/sftab。重新remount文件系统来驱动设定值!3、扫描磁盘的使用者使用状况,并产生重要的aquota.group与aquota.user4、启动quota的限额5、编辑使用者的可使用空间6、编辑群组的可使用的空间7、利用repquota显示更完整的quota结果报告8、设定开机时启动quota,/etc/rc.d/rc.local,