Linu某磁盘与档案系统管理_第1页
Linu某磁盘与档案系统管理_第2页
Linu某磁盘与档案系统管理_第3页
Linu某磁盘与档案系统管理_第4页
Linu某磁盘与档案系统管理_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Lin ux 磁盘与档案系统管理 .1认识 EXT2档案系统.1硬盘物理组成 .1磁盘分割 (Partiti on ) .2档案系统 .3Linux 的 EXT2 档案系统(in ode ).4EXT2/EXT3 档案的存取与日志式档案系统的功能 .8数据的不一致 (Inconsistent)状态 .11Linux 档案系统的运作 .12挂载点的意义 (mount point) . 13其它Linux支持的档案系统 .13档案系统的简单操作 .14磁盘与目录的容量 . 14df . 14du. 17连结档的介绍: ln . 18#Hard Link (硬式连结或实际连结 ). 19#Symbo

2、lic Link (符号连结,亦即是快捷方式 ). 20关于目录的 link 数量 . 22磁盘的分割、格式化、检验与挂载. 23磁盘分割: fdisk. 24#删除磁盘分割槽.27新增磁盘分割槽 .28#操作环境的说明 .30#注意事项: .31磁盘格式化.31mkbootdisk (制作软盘开机片) . 33fdformat (进行软盘低阶格式化). 33磁盘检验: fsck, badblocks. 33fsck. 34badblocks. 35sync . 35磁盘挂载与卸载 . 36umou nt (将装置档案卸载). 39磁盘参数修订 .39mknod. 39e2label. 40t

3、un e2fs. 41# hdparm. 41设定开机挂载 .43各式磁盘挂载与 中文编码挂载还有 USB随身碟.44挂载软盘 .44挂载 Windows 磁盘. 44挂载USB随身碟 .45开机挂载 /etc/fstab 及 /etc/mtab . 45特殊装置 loop挂载 .49建立大型档案 .49格式化 .49挂载 .50虚拟内存之建置 . 50建立虚拟内存装置 . 51建立虚拟内存档案 .51虚拟内存的限制 .53本章习题练习: .53依据硬盘盘能盘里面含有多个硬盘盘)的硬盘。在这里 我们以单一个硬盘盘来说明, 硬盘盘可由 底下的图形来示意:首先,硬盘里面一定会有所谓的磁头(Head

4、 )在进行该硬盘盘上面的读写动 作,而磁头是固定在机械手臂上面的,机械手臂上有多个磁头可以进行读取的动 作。 而当磁头固定不动 (假设机械手臂(Cylinder)盘上面相同半径的那一个磁道就组成了所谓的磁柱不动),硬盘盘转一圈所画出来的圆就是所谓 的磁道(Track );而如同我们前面刚刚提到的, 一块硬盘里面可能具有多个硬盘盘,所有硬盘(Cylinder )。Linux磁盘与档案系统管理我们在前面的档案权限介绍的章节当中,提到很多的权限与属性的观念,那么接下来要了解的是,这些属性是记录在硬盘的那个地方?这里就要特别了解到Linux档案系统(filesystem )是如何记录档案,与档案是如何

5、被读取的啰!而要了解整个档案系统的观念,就不能不知道硬盘的组成组件!所以,在这个章节当中,我们由最基础的硬盘组成组件介绍起,并介绍in ode与连结文件等基本知识,以及如何利用开机即可挂载的方式来使我们的各个partition可以在开机时就已经进行好挂载的动作喔!认识EXT2档案系统既然这个章节主要在探讨 Linux的磁盘档案系统,所以我们当然就需要先来了解一下硬 盘是个什么东西啦!首先,我们就来看一看硬盘的物理组成,了解了物理组成之后,再来说明一下怎么样进行硬盘的分割(partitio n)吧!硬盘物理组成就硬盘的物理组件来说,硬盘其实是由许许多多的圆形硬盘盘所组成的,够容纳的数据量,而有所

6、谓的单碟(一块硬盘里面只有一个硬盘盘)或者是多碟(一块硬图二、磁柱示意图这个磁柱也是磁例如上图二所示意,在两个硬盘盘上面的同一个磁道就是一个磁柱啦!盘分割(partition )时的最小单位了;另外,由圆心向外划直线,则可将磁道再细分为一个一个的扇区(Sector ),这个扇区就是硬盘盘上面的最小储存物理量了!通常一个sector的大小约为 512 Bytes。以上就是整个硬盘的基本组件。在计算整个硬盘的储存量时,简单的计算公式就是:Cylinder x Head x Sector x 512 Bytes 。另外,硬盘在读取时,主要是硬盘盘会转动,利用机械手臂将磁头移动到正确的数据位置(单方向

7、的前后移动),然后将数据依序读出。在这个操作的过程当中,由于机械手臂上的磁头与硬盘盘的接触是很细微的空间,如果有抖动或者是脏污在磁头与硬盘盘之间时,就会造成数据的损毁或者是实体硬盘整个损毁因此,正确的使用计算机的方式,应该是在计算机通电之后,就绝对不要移动主机,并 免抖动到硬盘,而导致整个硬盘数据发生问题啊!另外,也不要随便将插头拔掉就以为是顺利关机!因为机械手臂必须要归回原位,所以使用操作系统的正常关机方式,才能够有比较好的硬盘保养啊!因为他会让硬盘的机械手臂归回原位啊!磁盘分割(Partition )在了解了硬盘的物理组件之后,再接着下来介绍的就是硬盘的分割(Partition )啰!为什

8、么要进行硬盘分割啊?!因为我们必须要告诉操作系统:我这块硬盘可以存取的区域是由A磁柱到B磁柱,如此一来,操作系统才能够控制硬盘磁头去A-B范围内的磁柱存取数据;如果没有告诉操作系统这个信息,那么操作系统就无法利用我们的硬盘来进行数据的存取了,因为操作系统将无法知道他要去哪里读取数据啊!这就是磁盘分割(Partition )的重点了:也就是记录每一个分割区(Partition )的起始与结束磁柱!好了,那么这个分割区的起始与结束磁柱的数据放在哪里呢?!那就是我们在Linux安装与多重开机技巧 那个章节提到的 主要开机扇区(Master Boot Recorder, MBR )啰!事实 上,MBR

9、就是在一块硬盘的第零轨上面, 这也是计算机开机之后要去利用该硬盘时,必须要读取的第一个区域!在这个区域内记录的就是硬盘里面的所有分割信息,以及开机的时候可以进行开机管理程序的写入的处所啊!所以,当一个硬盘的MBR坏掉时,由于分割的数据不见了,呵呵,那么这个硬盘也就几乎可以说是寿终正寝了,因为操作系统不知道该去哪个磁柱上读取数据啊那么MBR有什么限制呢?他最大的限制来自于他的大小不够大到储存所有分割与开机管理程序的信息,因此,MBR仅提供最多四个 partition的记忆,这就是所谓的 Primary(P)与Extended (E)的partition最多只能有四个的原因了。所以说,如果你预计分

10、割超 过4个partition的话,那么势必需要使用3P + 1E,并且将所有的剩余空间都拨给Extended才行(记得呦! Extended最多只能有一个 ),否则只要 3P + E之后还有剩下 的空间,那么那些容量将成为废物而浪费了,所以结论就是如果您要分割硬盘时,并且已经预计规划使用掉MBR所提供的4个partition ( 3P + E 或4P )那么磁盘的全部容量需要使用光,否则剩下的容量也不能再被使用。不过,如果您仅是分割出1P + 1E的话,那么剩下的空间就还能再分割两个primary partition !档案系统在告知系统我的 partition所在的起始与结束磁柱之后,再来

11、则是需要将 partition格式化 为我的操作系统认识的档案系统 (Filesystem )啰!因为每个操作系统认识的 filesystem 并不相同!例如 Windows操作系统在预设状态下就无法认识Linux的档案系统(这里指Linux的标准档案系统 ext2 )。所以当然要针对我们的操作系统来格式化partition啰!我们可以说,每一个 partition就是一个 Filesystem,那么一个 partition是否可以具有 两个Filesystem呢?!理论上应该是不行的!因为每个档案系统都有其独特的支持方式,例如Linux的ext3就无法被 Windows系统所读取!而你将一个

12、 partition格式化的时 候,总不能格式化为ext3也同时格式化为fat32吧?!那是不可能的啊!不论是哪一种 filesystem,数据总是需要储存的吧!既然硬盘是用来储存数据的,想当 然尔,数据就必须写入硬盘啦!刚刚我们提到硬盘的最小储存单位是sector,不过数据所储存的最小单位并不是sector喔,因为用sector来储存太没有效率了。怎么说呢?因为一个 sector只有512 Bytes ,而磁头是一个一个sector的读取,也就是说,如果我的档案有10 MBytes,那么为了读这个档案,我的磁头必须要进行读取(I/O) 20480次!为了克服这个效率上的困扰,所以就有逻辑区块

13、(Block )的产生了!逻辑区块是在partition进行filesystem的格式化时,所指定的最小储存单位,这个最小储存单位当然是架构在 sector的大小上面(因为sector为硬盘的最小物理储存单位啊!),所以啦,Block的大小为sector的2的次方倍数。此时,磁头一次可以读取一个block ,如果假设我们在格式化的时候,指定Block为4 KBytes (亦即由连续的八个 sector所构成一个 block ),那么同样一个 10 MBytes的档案,磁头要读取的次数则大幅降为2560次,这个时候可就大大的增加档案的读取效能啦!不过,Block单位的规划并不是越大越好喔!怎么说

14、呢?因为一个Block最多仅能容纳一个档案(这里指Linux的ext2档案系统)!这有什么问题呢?举例来说好了,假如您 的Block规划为4 KBytes ,而您有一个档案大小为0.1 KBytes ,这个小档案将占用掉一个Block的空间,也就是说,该Block虽然可以容纳 4 Kbytes的容量,然而由于档案只占用了 0.1 Kbytes,所以,实际上剩下的3.9 KBytes是不能再被使用了,所以,在考虑Block的规划时,需要同时考虑到:*档案读取的效能*档案大小可能造成的硬盘空间浪费因此,在规划您的磁盘时,需要留意到您主机的用途来进行规划较佳!例如BBS主机由于文章较短,也就是说档案

15、较小,那么Block小一点的好;而如果您的主机主要用在储存大容量的档案,那么考虑到效能,当然Block理论上,规划的大一点会比较妥当啦!Superblock :如同前面说的,当我们在进行磁盘分割(partition )时,每个磁盘分割槽(partition )就是一个档案系统(filesystem ),而每个档案系统开始的位置的那个block就称为superblock ,superblock的作用是储存像是档案系统的大小、空的和填满的区块, 以及他各自的总数和其它诸如此类的信息等等,这也就是说,当您要使用这一个磁盘分割槽(或者说是档案系统)来进行数据存取的时候,第一个要经过的就是superbl

16、ock这个区块了,所以啰,superblock坏了,您的这个磁盘槽大概也就回天乏术了!Lin ux 的 EXT2 档案系统(in ode )看完了上面的说明,您应该对于硬盘有一定程度的认识了!好了,那么接下来就是要谈一谈Linux的档案系统(Filesystem )啰!我们这里以Linux最标准的ext2这个档案系统来作为说明。还记得我们在Linux档案属性与目录配置那个章节提到的,在Linux系统当中,每个档案不止有档案的内容数据,还包括档案的种种属性, 例如:所属群组、所属使用者、能否执行、档案建立时间、档案特殊属性等等。由于Linux操作系统是一个多人多任务的环境,为了要保护每个使用者所

17、拥有数据的隐密性,所以具有多样化的档案属性是在所难免的! 在标准的ext2档案系统当中,我们将每个档案的内容分为两个部分来储存,一个是档案的属性,另一个则是档案的内容。为了应付这两个不同的咚咚,所以ext2规划出in ode与Block来分别储存档案的属性(放在in ode当中)与档案的内容(放置在 Block area当中)。当我们要将一个partition格式化(format )为ext2时,就必须要指定in ode与Block的大小才行,也就是说,当partition 被格式化为 ext2的档案系统时,他一定会有inode table与block area这两个区域。Block已经在前面

18、说过了,他是数据储存的最小单位。那么in ode是什么?!简单的说,Block是记录档案内容数据的区域,至于 in ode则是记录该档案的相关属性,以 及档案内容放置在哪一个Block之内的信息。 简单的说,in ode除了记录档案的属性外,同时还必须要具有指向(pointer )的功能,亦即指向档案内容放置的区块之中,好让操作系统可以正确的去取得档案的内容啊!底下几个是in ode记录的信息(当然不止这些):*该档案的拥有者与群组(owner/group);*该档案的存取模式(read/write/excute);*该档案的类型(type);*该档案建立或状态改变的时间(ctime)、最近一

19、次的读取时间(atime)、最近修改的时间(mtime);*该档案的容量;*定义档案特性的旗标(flag),女口 SetUID.;*该档案真正内容的指向(pointer);我们在前一章 Linux档案与目录管理当中提到过利用ls查询档案所记载的时间,就是atime / ctime / mtime 三种时间。这三种时间的意义我们已经在前一章的touch指令介绍时提过,这三种时间就是记录在 in ode里面的啦如果回到前一章,您会发现,我们可 以利用ls的相关功能来查询到时间喔!而预设的显示时间是mtime。rootxli nux # Is -la -time=atime PATH那个PATH是您

20、所想要查询的档案或目录名称。利用上面的Is相关参数,就可以取得您想要知道的档案相关的三种时间啰至于一个in ode的大小为 128 bytes这么大(可以使用底下要介绍的dumpe2fs来查阅in ode的大小喔!)!好了,那么我的Lin ux系统到底是如何读取一个档案的内容呢?底下我们分别针对目录与档案来说明:*目录:当我们在 Linux下的ext2档案系统建立一个目录时,ext2会分配一个inode与至少一块 Block给该目录。其中,in ode记录该目录的相关属性,并指向分配到的那 块Block ;而Block则是记录在这个目录下的相关连的档案(或目录)的关连性!*档案:当我们在 Li

21、nux下的ext2建立一个一般档案时, ext2会分配至少一个 inode 与相对于该档案大小的 Block数量给该档案。例如:假设我的一个 Block为4 Kbytes , 而我要建立一个 100 KBytes的档案,那么 linux 将分配一个 in ode与25个 Block来 储存该档案!要注意的是,inode本身并不纪录文件名,而是记录档案的相关属性,至于文件名则是 记录在目录所属的block区域!那么档案与目录的关系又是如何呢?就如同上面的目录提到的,档案的相关连结会记录在目录的block数据区域,所以当我们要读取一个档案的内容时,我们的 Linux会先由根目录/取得该档案的上层目

22、录所在in ode ,再由该目录所记录的档案关连性(在该目录所属的 block区域)取得该档案的in ode ,最后在经由in ode内提供的block指向,而取得最终的档案内容。我们以/etc/cro ntab这个档案的读取为例,他的内容数据是这样取得的:#注意看一下,在上面的#也就是说,/与其上层目录#而在根目录所记载的档案关连性一块partition在ext2底下会被格式化为inode table与block area两个区域,所以在图三里面,我们将 partitio n以长条的方式来示意,会比较容易理解的啦!而读取/etc/crontab 的流程为:1.操作系统根据根目录(/)的相关资

23、料可取得 /etc这个目录所在的in ode,并前往 读取/etc这个目录的所有相关属性;2.根据/etc的in ode的资料,可以取得/etc这个目录底下所有档案的关连数据是放置在哪一个 Block当中,并前往该block读取档案的关连性内容;3.由上个步骤的 Block当中,可以知道crontab这个档案的in ode所在地,并前往该 inode ;4.由上个步骤的in ode当中,可以取得cron tab这个档案的所有属性,并且可前往由in ode所指向的 Block区域,顺利的取得cro ntab的档案内容。整个读取的流程大致上就是这样,如果您想要实作一下以了解整个流程的话,可以这样1

24、.察看一下根目录所记载的所有档案关连性数据rootxli nux # ls -lia /2 drwxr-xr-x 24 root root 4096 Jul 16 23:45 .2 drwxr-xr-x 24 root root 4096 Jul 16 23:45 .719489 drwxr-xr-x 83 root root 12288 Jul 21 04:02 etc523265 drwxr-xr-x 24 root root 4096 Jun 25 20:16 var与.都是连结到in ode 号码为2的那个inode都是指向同一个in ode number 啊!两者是相同的。(在 bl

25、ock 内)得到 /etc 的 in ode number # 为 719489 那个 in ode number 喔!2.察看一下/etc/ 内的档案关连性的数据rootxli nux # ls -liad /etc/cro ntab /etc/.719489 drwxr-xr-x 83 root root 12288 Jul 21 04:02 /etc/.723496 -rw-r-r- 1 root root 663 Jul 4 12:03 /etc/cro ntab#瞧!此时就能够将 /etc/crontab找到关连性啰!所以您知道,目录的最大功能就是在提供档案的关连性,在关连性里面,当

26、然最主要的就是档名与in ode的对应数据啰!另外,关于 EXT2档案系统,这里有几点小事情 要提醒一下:* ext2与ext3档案在建立时(format)就已经设定好固定的 in ode数与block数目了;*格式化Linux的ext2档案系统,可以使用mke2fs这个程序来执行!* ext2 允许的 block size 为 1024, 2048 及 4096 bytes ;*一个partition (filesystem)所能容许的最大档案数,与in ode的数量有关,因为一个档案至少要占用一个in ode啊!*在目录底下的档案数如果太多而导致一个Block无法容纳的下所有的关连性数据时

27、,Linux会给予该目录多一个Block来继续记录关连数据;*通常in ode数量的多寡设定为(partiti on的容量)除以(一个in ode预计想要控制的容量)。举例来说,若我的 block规划为4Kbytes,假设我的一个in ode会控制两个block,亦即是假设我的一个档案大致的容量在8Kbytes左右时,假设我的这个partition 容量为 1GBytes,贝 U in ode 数量共有:(1G * 1024M/G * 1024K/M ) / ( 8K )= 一 三1072个。而一个in ode占用128 bytes的空间,因此格式化时就会有 (一三1072个* 128byte

28、s/ 个)=16777216 byes = 16384 Kbytes 的 inode table。也就是说,这一个 1GB 的partition在还没有储存任何数据前,就已经少了16MBytes的容量啊!*因为一个in ode只能记录一个档案的属性,所以in ode数量比block多是没有意义的!举上面的例子来说,我的Block规划为4 Kbytes,所以1GB大概就有262144 个4Kbytes的block,如果一个 block对应一个in ode的话,那么当我的in ode数量大于262144时,多的in ode将没有任何用处,徒然浪费硬盘的空间而已!另外一层想 法,如果我的档案容量都很

29、大,那么一个档案占用一个in ode以及数个block,当然inode数量就可以规划的少很多啦!*当block大小越小,而in ode数量越多,则可利用的空间越多,但是大档案写入 的效率较差;这种情况适合档案数量多,但是档案容量小的系统,例如BBS或者是新闻群组(News )这方面服务的系统;*当Block大小越大,而in ode数量越少时,大档案写入的效率较佳,但是可能浪 费的硬盘空间较多;这种状况则比较适合档案容量较大的系统!简单的归纳一下,ext2有几个特色:7* Blocks与in odes在一开始格式化时(format)就已经固定了;*一个partiti on能够容纳的档案数与in

30、ode有关;*一般来说,每 4Kbytes的硬盘空间分配一个in ode ;*一个 in ode 的大小为 128 bytes ;* Block 为固定大小,目前支持1024/2048/4096 bytes等;* Block越大,则损耗的硬盘空间也越多。*关于单一档案:若 block size=1024,最大容量为16GB,若 block size=4096,容量最大为 2TB ;*关于整个 partition :若 block size=1024,则容量达 2TB,若 block size=4096,则容量达 32TB。*文件名最长达 255字符,完整文件名长达4096字符。另外,关于par

31、tition的使用效率上,当您的一个 partition规划的很大时,例如100GB这 么大,由于硬盘上面的数据总是来来去去的,所以,整个partition上面的档案通常无法连续写在一起,而是填入式的将数据填入没有被使用的block当中。如果档案写入的block真的分的很散,此时就会有所谓的档案离散的问题发生了。虽然我们的ext2在inode处已经将该档案所记录的block number都记上了,所以资料可以一次性读取,但是如果档案真的太过离散,确实还是会发生读取效率低落的问题。果真如此,那么可以将整个partition内的数据全部复制出来,将该partition重新格式化,再将数据给他复制回

32、去即可解决。此外,如果partition真的太大了,那么当一个档案分别记录在这个partition的最前面与最后面的block,此时会造成硬盘的机械手臂移动幅度过大,也会造成数据读取效能的 低落。因此,partitio n的规划并不是越大越好,而是真的要针对您的主机用途来进行规划才行! A_AEXT2/EXT3档案的存取与日志式档案系统的功能综合上面谈的种种,我们可以知道,当一个ext2的filesystem被建立时,他拥有superblock / group descripti on / block bitmap / inode bitmap / inode table / data blo

33、cks 等等区 域。要注意的是,每个 ext2 filesystem在被建立的时候,会依据 partition的大小, 给 予数个 block group ,而每个 block group 就有上述的这些部分。 整个filesystem 的架构 可以下图展现:Croup 1Bpck Group 2Group 3Block Group 4Block Group 51 一 一一一SuDerBlockInoda bitmapInocte lable图四、整个filesystem的展现示意图我们将整个filesystem简单化,假设仅有一个block group,那么上面的各个部分分别代表什么呢?*S

34、uperBlock :如前所述,Superblock是记录整个 filesystem相关信息的地方,没有Superblock,就没有这个 filesystem 了。他记录的信息主要有:o block 与 inode 的总量;o未使用与已使用的inode / block数量;o 一个 block 与一个 inode 的大小;o filesystem的挂载时间、最近一次写入数据的时间、最近一次检验磁盘(fsck)的时间等档案系统的相关信息;o 一个valid bit数值,若此档案系统已被挂载,则valid bit为0 ,若未被挂载,则 valid bit为1 。* Group Descriptio

35、n :纪录此 block由由何处开始记录;* Block bitmap :此处记录那个block有没有被使用;* Inode bitmap :此处记录那个in ode有没有被使用;* Inode table :为每个in ode数据存放区;* Data Blocks :为每个 block数据存放区。如果想要知道某个ext2/ext3的档案系统内,关于上述提到的相关信息时,可以使用dumpe2fs这个指令来读取,举例来说,鸟哥将我自己的主机/dev/hda1读出ext3的讯息:rootxli nux # dumpe2fs /dev/hda1Filesystem volume n ame: / F

36、ilesystem state:clea nErrors behavior:Con ti nueFilesystem OS type:LinuxIn ode cou nt:五 37088Block count:一五 36207Free blocks:735609Free ino des:一三 93089First block:0Block size:4096Filesystem created:Sat Jun 25 16:21:一三 2005Last mount time:Sat Jul 16 23:45:04 2005Last write time:Sat Jul 16 23:45:04 2

37、005Last checked:Sat Jun 25 16:21:一三 2005First ino de:11Inode size:128Jour nal ino de:8Group 0: (Blocks 0-32767)Primary superblock at 0, Group descriptors at 1-1Reserved GDT blocks at 2-376Block bitmap at 377 什377), I node bitmap at 378 什378)In ode table at 379-1400 (+379)0 free blocks, 32424 free in

38、o des, 11 directoriesFree blocks:Free ino des: 281-32704Group 1: (Blocks 32768-65535)Backup superblock at 32768, Group descriptors at 32769-32769Reserved GDT blocks at 32770-33144Block bitmap at 33145 (+377), I node bitmap at 33146 (+378)Inode table at 33147-34168 (+379)一八 free blocks, 24394 free in

39、 odes, 349 directoriesFree blocks: 37882-37886, 38263-38275Free in odes: 38084-38147, 39283-39343, 41一三 5, 41141-65408#因为数据很多,所以鸟哥略去了一些信息了上面是比较精简的显示内容。#在Group 0 之前的都是 Superblock的内容,记录了 inode/block的总数,#还有其它相关的讯息。至于由Group 0 之后,则是说明各个bitmap 及inode table# 与 block area 等等。透过这些记录,我们可以很轻易的就知道哪些in ode没有被使用,

40、哪些block还可以记录,如此一来,在新增、建立档案与目录时,系统就会根据这些记录来将数据分别写入 尚未被使用的in ode与block area 了!不过,要注意的是,当我们新增一个档案(目录)时:101.根据in ode bitmap / block bitmap 的信息,找到尚未被使用的in ode与block ,进而将档案的属性与数据分别记载进in ode与block ;2.将刚刚被利用的 in ode 与 block 的号码(n umber)告知 superblock、inode bitmap、 block bitmap等,让这些 metadata更新信息。一般来说,我们将in od

41、e table与block area称为数据存放区域,至于其它的例如superblock、block bitmap 与inode bitmap 等记录就被称为 metadata啰。经由上面两个 动作,我们知道一笔数据写入硬盘时,会有这两个动作。数据的不一致(Inconsistent)状态那么万一您的档案在写入硬盘时,因为不知名原因导致系统中断(例如突然的停电啊、系统核心发生错误啊等等的怪事发生时),所以数据就只有纪录到动作一,而动作二尚未进行这就会产生 metadata与数据存放区产生不一致(In co nsiste nt) 的情况发生了。在早期的EXT2档案系统中,如果发生这个问题,那么系统

42、在重新开机的时候,就会藉由Superblock当中记录的 valid bit与filesystem state等状态来判断是否强制进行数 据一致性的检查!检查则以e2fsck这支程序来进行的。不过,这样的检查真的是很费时因为要针对 metadata区域与实际数据存放区来进行比对,呵呵得要搜寻整个partition呢哇!系统真忙碌而且在对In ternet提供服务的服务器主机上面,这样的检查真的会造成主机复原时间的拉长真是麻烦这也就造成后来所谓日志式档案系统 的兴起了。稍微了解了所谓数据不一致的状态后,再来要了解的,就是,那么为何要有日志式档案系统的产生呢?我们已经在 Linux档案属性与目录配

43、置当中提到过一些档案系统的注意事项,也提过日志式(Journal)档案系统的相关功能,这里我们再稍微深入的讨论一下。刚刚提到了,在EXT2档案系统当中,要进行档案的写入时,会将数据分别在数据存放区与metadata区记录下来,若当这两个动作无法一次完成时,就会造成所谓的不一致 现象。若发生不一致现象,因为系统不知道是那个档案发生不一致现象,所以就会将整个filesystem 做一致性的检查,如此一来,很费时啊!想一想,如果在我们的 filesystem当中,要是能够规划出一个区块,专门来记录写入或修订档案时的步骤,那不就可以简化一致性检查的步骤了?也就是说:1.当系统要写入一个档案的时候,会先

44、在日志记录区块中纪录:某个档案准备要写入磁盘了;2.开始写入档案的权限与数据;11如果您对于3.开始更新metadata的数据;4.完成数据与 metadata的更新后,在日志记录区块当中完成该档案的纪录。在这样的程序当中,万一数据的纪录过程当中发生了问题,那么我们的系统只要去检查日志记录区块,就可以知道那个档案发生了问题,针对该问题来做一致性的检查即可,而不必针对整块 filesystem去检查,真的就可以达到快速修复filesystem的能力了!这就是日志式档案最基础的功能啰那么我们的 ext2可达到这样的功能吗?当然可以啊!就透过ext3即可! ext3是ext2的升级版本,并且可向下兼

45、容 ext2版本呢! 所 以啰,目前我们才建议大家,可以直接使用ext3这个filesystem啊! A_AEXT2 / EXT3系统还有更多的兴趣,可以参考底下这几篇文章:* Desig n and Impleme ntatio n of the Second Exte nded Filesystemxe2fsprogs.sourceforge .n et/ext2 in tro.html* The Second Exte nded File System - An in troduct ionxxfreeosx/articles/3912/* ext3 or ReiserFS? Ha ns

46、 Reiser Says Red Hats Move Is Un dersta ndablexxli nuxpla netx/l in uxpla net/reports/3726/1/或者参考鸟哥由网络上面找到的相关中文翻译,不过.原发文者的文章出处已经找不到了 真是不好意思请参考:附录 B : EXT2/EXT3档案系统。Linux档案系统的运作好了,我们知道整个ext2/ext3的数据存取是透过 journal与metadata还有数据存放区在纪录的。 不过,实际上,Linux档案系统在运作的时候,真的要将数据直接存放到硬盘上面吗?!有没有更有效率的作法?我们来看看整部计算机的运作当中,

47、那个数据的存取速度最慢呢?数据处理最快速的地方应该是 CPU 了,接下来则是主存储器 (RAM),至于硬盘,哈哈!没错,速度可是 比CPU还有RAM要慢的很多很多。 为了让Linux加快整个系统的存取效率,因此 在Linux 上面通常采取异步处理 (asynchronously )的方式。什么是异步呢?举例来说:当系统读取了某一个档案,则该档案所在的区块数据会被加载到内存当中,所以该磁盘区块就会被放置在主存储器的缓冲快取区中,若这些区块的数据被改变时,刚开始数据仅有主存储器的区块数据会被改变,而且在缓冲区当中的区块数据会被标记为Dirty,这个时候磁盘实体区块尚未被修正!所以亦即表示,这些Di

48、rty区块的数据必需回写到磁盘当中,以维持磁盘实体区块上的数据与主存12储器中的区块数据的一致性。为什么要这么做呢?这是因为主存储器的运作速度比起硬盘来实在是快太多了,万一系统当中有一个档案相当的大,而又持续性的存取,那么由于较慢的硬盘存取速度,将使 得整个Linux速度被拖垮,所以才会使用异步方式的数据处理啊!不过,也由于硬盘与主存储器的数据可能没有同步化,因此,如果Linux不正常关机(例如跳电或者是当机)时,则由于数据尚未回写入磁盘当中,会导致系统在再次开机时,会花相当多的时间进行磁盘检验,同时也有可能造成磁盘的损毁啊!挂载点的意义 (mount point)我们上面提到的都是关于档案系

49、统(filesystem),但是要能够让我们的Linux使用的话,非得挂载(mount)上我们的Linux系统才行啊!冈删我们上面提到了目录可以记录 文件名与in ode的相关信息,此外,目录也是让我们得以跟filesystem产生对应的入口点。因此,我们称那个入口点目录为挂载点(mount point)举例来说,在鸟哥的 安装FC4范例当中,我们将硬盘分割为几大部分,同时主要将/与/home设定为两个 partition的挂载点。假设 /是接在/dev/hda1 , 而/home是接 在/dev/hda2上面,那么,也就是说,在/home底下的所有次目录,使用的都是/dev/hda2 那个p

50、artition的资料呢!而非 /home的则都是使用 /dev/hda1的数据!那么来看看系统中如果主要分为/与/home时,他们对应的in ode会有什么现象呢?rootxli nux # ls -lid / /home2 drwxr-xr-x 26 root root 4096 7月 21 09:08 /2 drwxr-xr-x 42 root root 4096 7月 14 23:37 /home看到了吧?咦!怎么 /与/home的inode number都是2啊?这太不合理了 原因 很简单啊!因为 /是/dev/hda1而/home是/dev/hda2,这两个 partition都有

51、inode number为2的号码啊!所以啊,请注意,挂载点一定是目录而不是档案喔!也就是说,这个挂载点就是进入该 filesystem的入口啦!其它Linux支持的档案系统虽然Linux的标准档案系统是ext2,且还有增加了日志功能的ext3之外,事实上,Linux还有支持很多档案格式的,尤其是最近这几年推出了好几种速度很快的日志式档案系统,包括 SGI的XFS档案系统,可以适用更小型档案的Reiserfs档案系统,以及Windows的FAT档案系统等等,都能够被Linux所支持喔!常见的支持档案系统有:13*传统档案系统:ext2 / mi nix / MS-DOS / FAT (用 vf

52、at 模块)/ iso9660 (光盘)等等;*日志式档案系统:ext3 / ReiserFS / Windows NTFS / IBMs JFS / SGIs XFS*网络档案系统:NFS / SMBFS想要知道您的 Linux支持的档案系统有哪些,可以察看底下这个目录:rootxlinux # Is -l /lib/modules/uname -r/kernel/fs系统目前已启用的档案系统则有:rootxli nux # cat /proc/filesystems假设您的 /使用的是 /dev/hda1,用ext3,而/home使用/dev/hda2,用reiserfs ,那 么您取用/

53、home/dmtsai/.bashrc时,有特别指定要用的什么档案系统的模块来读取吗?!应该是没有吧!嘿嘿!这个就是我们Linux kernel的Virtual Filesystem Switch (VFS) 的功能啦!透过这个VFS的功能来管理所有的filesystem,省去我们需要自行设定读取档案系统的定义啊方便很多!档案系统的简单操作在了解了一些简单的硬盘与档案系统的概念之后,并且知道如何以ls查询档案系统相关的信息后, 接下来就是得要了解如何知道整个磁盘的剩余容量与总容量啰此外,也得要知道一下,前一章还没有介绍到的连结档(li nk file)啰磁盘与目录的容量在文字接口底下有什么方法

54、可以查看目前的磁盘最大容许容量、已经使用掉的容量、 目 前所在目录的已使用容量?还有还有, 怎么知道目前目录底下使用掉的硬盘容量呢? 以 及如何查询目前的 in odes数目?呵呵!底下我们就来谈一谈主要的两个指令:dfrootxlinux # df -ahikHTm目录或文件名参数:-a :列出所有的档案系统,包括系统特有的/proc 等档案系统;-k :以KBytes的容量显示各档案系统;-m :以MBytes的容量显示各档案系统;-h:以人们较易阅读的 GBytes, MBytes, KBytes等格式自行显示;-H :以M=1000K取代 M=1024K的进位方式;14-T :连同该

55、partition 的filesystem 名称(例如ext3) 也列出; -i :不用硬盘容量,而以 in ode 的数量来显示范例:范例一:将系统内所有的partition 列出来!rootxli nux # dfFilesystem1K-blocks Used Available Use% Moun ted on/dev/hda15952252 3012332 2632680 54%/dev/shm1928360192836 0% /dev/shm/dev/hda59492644221604 8781060 3% /home#特别注意,在 Linux (FC4)#那么预设会将系统内所有的

56、#的容量来列出来!至于那个底下,如果df没有加任何参数,(不含特殊内存内的档案系统与swap)都以Kbytes/dev/shm 是与内存有关的挂载,先不要理他!范例二:将容量结果以易读的容量格式显示出来rootxli nux # df -hFilesystem /dev/hda1 /dev/shm /dev/hda5Size Used Avail Use% Moun ted on5.7G 2.9G 2.6G 54% /一八 9M 0一八 9M 0% /dev/shm9.1G 217M 8.4G 3% /home#不同于范例一,这里会以G/M等容量格式显示出来,比较容易看啦!范例三:将系统内的所

57、有特殊档案格式及名称都列出来rootxli nux # df -aTFilesystem Type1K-blocksUsed Available Use% Moun ted on/dev/hda1 ext359522523012332 2632680 54% /dev/proc proc00 0 -/proc/dev/sys sysfs00 0 -/sys/dev/devpts devpts00 0-/dev/pts/dev/shm tmpfs1928360192836 0% /dev/shm/dev/hda5 ext394926442216048781060 3% /homenone bi

58、nfmt_misc00 0-/proc/sys/fs/bi nfmt_misc#看到了吧!系统里面其实还有很多的特殊档案系统在跑得!#不过,那些比较特殊的档案系统几乎都是在内存当中,例如/proc 这个挂载点。#因此,这些特殊的档案系统都不会占据硬盘空间喔!A_A范例四:将/etc底下的可用的磁盘容量以易读的容量格式显示rootxli nux # df -h /etcFilesystem Size Used Avail Use% Moun ted on15Filesystem/dev/hda1Inodes lUsed1.5M/dev/shm/dev/hda5IFree lUse% Moun t

59、ed on141K1.4M 10% /48K148K1% /dev/shm2.4M672.4M1% /home/dev/hda15.7G 2.9G 2.6G 54% /#这个范例比较有趣一点啦,在df后面加上目录或者是档案时,df#会自动的分析该目录或档案所在的partition ,并将该partition的容量显示出来,#所以,您就可以知道某个目录底下还有多少容量可以使用了!A_A范例五:将目前各个 partition当中可用的in ode数量列出rootxli nux # df -ih这是用来显示目前磁盘的总容量与剩余可用容量的指令!需要注意的是,由于我们的档案或者是外挂的磁盘都是加在/底

60、下,所以当根目录没有空间的时候,嘿嘿!你的Linux系统可能大概就要挂了吧当然啰!你可以将你的资料放置在加挂的硬盘中,那么如何知道目前哪一个磁盘还有多少空间呢?!Tips:说个笑话!当初我们系上有个研究生在管理Sun的工作站,是别研究室的,他的硬盘明明有好几 GB,但是就是没有办法将几MB的数据copy进去,他就去跟老板讲说机器坏了!嘿!明明才来维护过几天而已为何会坏了!结果老板将维护商叫来骂了2小时左右吧!后来,维护商发现原来硬盘的总空间还有很多,只是某个扇区填满了,偏偏该研究生就是要将数据copy去那个扇区!呵呵!后来那个研究生就被命令再也不许碰 Sun主机了这里要请大家再复习一下,我们的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论