linux 文件系统的管理 (硬盘) [ 转]

onlykg 2011-05-13

RH133—Unit4文件系统的管理

一、系统在初始化时如何识别硬盘

1、系统初始时根据MBR的信息来识别硬盘,其中包括了一些执行文件就来载入系统,这些执行文件就是MBR里前面446bytes里的bootloader程式,而后面的16X4的空间就是存储分区表信息的位置;如下图

2、在分区表中,主要储存了以下信息:

(1)分区号,常见的分区号有以下几种:其它编号可以使用fdisk指令,再执行l(小写L)查看0x5(or0xf)扩展分区

0x82Linuxswap

0x83Linux

0x8eLinuxLVM

0xfdLinuxRAIDauto

(2)分区的起始磁柱;

(3)磁柱的总数;

所以在系统初始化时,就根据分区表中的这三项信息来识别硬盘。

二、介绍硬盘分区的相关事项

1、当主分区都用完时,可以使用扩展分区来增加额外的分区,这已在前面介绍过了,但是在Linux的kernel里:

·IDE的硬盘最多可以支持到16个分区;

·SCSI硬盘最多支持15个分区;

2、硬盘做多分区的好处:如下:

(1)从控制方面的考虑

将硬盘分成多个分区,就可以把应用程序、使用者的资料、或是一些需要有安全性的资料,分别放入不同分区中方便管理;

(2)从效率方面的考虑

因为硬盘在使用一段时间后,都分有区块不连续的情况,如果一块大容量的硬盘没有划分成多个小分区,那么硬盘在搜索信息时,因为搜索的范围非常大,所以会比较久,如果将大容量的硬盘划分多个小分区,在搜索的时候相对就会快一些;

(3)为为使用磁盘配额的功能

因为配额只能对分区做设定,所以我们可以将/home目录单独做一个分区,然后可以对这个分区做配额;

(4)从资料备份和恢复考虑

例如,/home这个目录是专门用于存放用户信息的目录,将这个目录单独设定一个分区,就可以定期就是个分区作备份工作,恢复的时候也比较方便。

三、介绍分区的管理

1、可以使用下面的指令来建立分区及查看分区

fdisk/dev/hda建立分区

参数:-l查看分区

执行fdisk指令后,如下图:

例1:在新建分区,输入n,系统会要求输入起始的磁柱编号,默认系统会指定一个最近的未使用的磁柱号,回车后,再输入结束的磁柱号,不过根据磁柱号来算一个分区的容量不太方便,可以用“+数值K或+数值M(例:+1000M)”这样直接以容量的表示方式来设定,这样直观一些;再执行p,就可以看到新增加的分区了;

例2:删除分区,输入d,要求输入要删除的分区号,在DEVICE字段列可以看到每个分区对应的编号,输入想要删除的分区号回车即可

以前所有操作认为没有问题,输入w,保存退出即可。

这时主机屏幕上会提示:

Thekernelstillusesoldtable表示目前系统还是在使用旧的分区表;

Thenewtablewillbeusedatthenextreboot.表示只有在下次重新开机后才会使用新的分区表;

2、使用下面的指令重新载入分区表到kernel中,这样可以不用重新开机就可以启用新的分区表。

partprobe

四、建立文件系统(对硬盘分区进行格式化)

1、格式化指令及指令语法:

mke2fs[参数]要格式化的分区

例如上面的例子中,格式化hda6这个分区mke2fs/dev/hda6

2、格式化后,会出现一些分区的相关信息,为了理解这些信息,先了解一下分区的格式:

我们使用fdisk建立的分区,不能直接用来存放资料,必须先对这个分区做格式化的工作,格式化就是将分区划分成一格一格的block及多少个Inode可以使用,而每个block就是文件系统存取资料的最小单位,所以才可以将资料存放在这些block中,而且每多个block会组成一个group;如下图所示:除了bootsector之外,第一个block称为superblock用来记录这个分区共有多少个block和inode已经使用;多少block和inode等信息;

如下图所示:

13blockgroups:表示这个分区被划分出了13个blockgroup;

8192blockspergroup:表示每个group中有8192个block;

2008inodespergroup:表示每个group中有8192个inodes;

如果superblock损坏,这个分区将无法访问,所以每隔一段block就会备份一次这个superblock,如下图:

superblockbackupsstoredonblock:下面的数值就是备份superblock所在的block的位置。

3、dumpe2fs指令查看分区的详细信息

dumpe2fs/dev/hda6|more查看指定分区的信息(前一页半是superblock的内容,后面是每个Group的详细信息),因为所显示的内容很多所以加上了|more用于分页显示;

显示信息的部分说明:

Inodecount:Inode的总数量;

Blockcount:Block的总数量;

Freeblocks:剩余的block数量;

Freinodes:剩余的Inode数量;

Filesystemfeatures:has_journal表是为ext3文件系统

4、mke2fs格式化指令格式及参数

格式:mke2fs[参数]要格式化的分区文件名(例:/dev/hda6)

mke2fs-j/dev/hda6

参数:

·b:设定每个block的大小,预设为1024bytes(1K),最大4096bytes(4K),如果设定太大将使用4096bytes;

·c:格式化前检查分区中是否有损坏的block;

·i:设定每个Inode的大小,例:mke2fs–i4096/dev/hda6

·N:直接设定Inode的总数量;所设置的值只是接近而矣;

·m:设定在分区上,保留多少空间给root,预设保留5%;mke2fs–m10/dev/hda6

·L:设定分区卷标,预设不设定,通常习惯将卷标名称设为同挂载点目录名称相同方便记忆;mke2fs–Ldata/dev/hda6

·j:建立成为ext3文件系统,也就是加入日志功能;

五、介绍将ext2格式的分区转成ext3

1、ext2与ext3的区别如下:

(1)ext2和ext3的格式完全相同,只是在ext3硬盘最后面有一部分空间用来存放Journal(日志)的记录;

(2)在ext2中,写资料到硬盘中时,先将资料写入缓存中,当缓存写满时才会写入硬盘中;

(3)在ext3中,写资料到硬盘中时,先将资料写入缓存中,鼗缓存写满时系统先通知Journal,再将资料写入硬盘,完成后再通知Journal,资料已完成写入工作;

(4)是否有Journal的差别:

在ext2中,系统开机时会去检查有效位(Validbit),如果值为1,表示系统上次有正常关机;如果为0,表示上次关机未正常关机,那系统就会从头检查硬盘中的资料,这样时间会很长;

在ext3中,也就是有Journal机制里,系统开机时检查Journal的资料,来查看是否有错误产生,这样就快了很多;

(5)tune2fs–j/dev/hda6将ext2转换成ext3

2、在ext3里有三个Journal的模式:

(1)ordered:预设模式,只记录Inode-table里的信息;

(2)Journaled:记录资料本身的信息,需要大量空间来做记录;

(3)writeback:不记录信息,可提供较好的效能;

六、介绍在分区里设定相应的卷标

1、前面分区的表示法一直在使用hda1或sda1类似这样的表示法,其实也可以用卷标的表示法,这样更好便记忆。

2、设定及查看卷标的指令格式及说明如下:

e2label指令:

例:e2label/dev/hda6查看hda6分区的卷标名称;如为空白表示未设定卷标;

e2label/dev/hda6data设定这个分区的卷标为data;

注:在这里先不要修改hda1~hda5的卷标,可能会造成无法开机,以后再做说明。

七、介绍mount指令挂载分区

1、挂载的概念:当要使用某个设备时,例如要读取硬盘中的一个格式化好的分区、光盘或软件等设备时,必须先把这些设备对应到某个目录上,而这个目录就称为“挂载点(mountpoint)”,这样才可以读取这些设备,而这些对应的动作就是“挂载”。

mount的详细说明将在下一小节介绍

示例如下图:

下面以卷标的方式进行挂载,注意:使用卷标挂载进必须加上–L的参数表示使用卷标挂载

八、介绍mount指令及参数

1、mount指令格式:

mount[-t文件系统类型][-o参数]设备名或卷标挂载点目录名

注:如果使用卷标方式挂载,必须使用–L参数。

(1)-t后面设定所要挂载的文件系统的类型,例如:vfat、ext2、ext3、iso9660(光盘),通常这部分不需要加kernel可以自己判断

(2)-o后面加一些设定参数:

·suid:允许挂载后的文件系统可以使用suid、sgid的特殊权限;

·dev:允许挂载的文件系统建立设备文件,例如:/dev/hda6下的hda6就是设备文件;

·exec:允许挂载文件系统后,可以执行里面的执行文件;

·noexec:不允许执行文件;

·auto:在电脑开机后自动挂载这个文件系统;

·nouser:指只允许superuser(也就是root)挂载这个文件系统;

·async:设为不同步,就是电脑写入资料时先写入缓存再写到硬盘中;

·loop:用来挂载loopback设备,例如光盘机就是loopback设备;

·ro:挂载文件系统后设定为只读;

·rw:挂载文件系统后设定为可读可写;

·remount:重新挂载文件系统;

如果在挂载ext2或ext3时,预设会使用下面的参数设定:

rw,suid,dev,exec,nouser,async

九、介绍卸载文件系统

1、使用mount指令查看已挂载了哪些文件系统;

卸载指令及格式如下:

umount设备文件名或挂载点

例如:上图中已挂载到/data目录的上设备,可以使用umount/dev/hda6或umount/data进行卸载

2、如果文件系统正在使用中,就无法正常卸载,可以使用下面的指令查看并停止所有对这个文件系统的操作,然后再进行卸载操作;

fuser-v设备文件名或挂载点查看有哪个服务或使用者正在对这个文件系统做操作;

fuser–km设备文件名或挂载点强制停止所有对这个文件系统的所有操作;

3、可以使用remount这个参数来改变文件系统的状态;

例如:mount–oremount,ro/data重新挂载文件系统为只读,这样就不用先卸载再挂载了。

十、介绍一些挂载的范例

1、挂载一个不允许执行的文件系统

mount–onoexec/dev/hda6/datanoexec表示为不允许执行;

2、挂载一个文件系统的镜像文件

mount–tiso9660-oro,loopboot.iso/iso加loop参数是因为光盘是loopback设备,boot.iso为镜像文件名,/iso为挂载点;

十一、介绍挂载网络上的共享资源

1、在Unix和Linux的网络资源主要分为两种NFS(NetworkFileSystem)和SMB

·NFS:Linux/Unix和Unix/Linux之间用来共享资源的;

·SMB:Linux/Unix和Microsoft(windows)之间用来共享资源的;

2、共享NFS网络资源的主机称为:NFSServer;

共享SMB网络资源折主机称为:SambaServer;

3、这些网络资源的连接方式:

(1)NFS部分的连接方式:

showmount–eIP地址#查看共享资源

mountip地址:/共享目录/挂载点#挂载网络资源

(2)SMB部分的连接方式:

smbclient–Lip地址-N#查看指定SambaServer上有哪些共享目录;

mount//IP地址/共享目录/挂载点-ousername=用户名%密码#挂载windows网络共享资源;

十二、介绍/etc/fstab文件的功能

1、fstab文件的功能就是根据fstab文件中设定的内容自动挂载设备到指定的挂载点上;

2、下面就介绍fstab这个文件内容的详细说明:

如下图:fstab文件内容共分为6个栏位

下面对上图中6个栏位分别说明:

(1)设备名:可以用“LABEL=”卷标表示法,也可以使用设备名称表示法“/dev/hda6”;

(2)挂载点:挂载点目录必须是已存在的目录;

(3)文件系统类型:例如ext3,ext2等;

(4)挂载参数:就是前面mount指令中–o后面的参数,defaults代表使用预设参数设定;例如如/dev/hdc(光盘)和/dev/fd0(软盘)的这两行设定,exec可以执行文件,noauto不会自动挂载,

(5)备份:设定备份次数,0表示不备份,1表示每天做一次备份,2表示每两天做一次备份;

(6)检查顺序:设定文件系统的检查顺序,0表示不检查,1表示第一个检查,2表示第二个检查,以此类推检查顺序最多到9,如果值相同,按从上到下的顺序检查,通常根目录的检查顺序排在第一位;

所以如果要在电脑开机后自动挂载文件系统就可以修改fstab这个文件的设定。

例如:可以将前面挂载的hda6写入这个文件中,当开机后自动挂载,设定方法如下,使用VI编辑fstab文件将下面的一行设定加入到最后一行即可:

/dev/hda6/dataext3defaults00

2、在挂载光盘或软盘时,只需要执行mount/media/cdrom或mount/media/floppy就可以了,而不用指定要挂载的设备,这是因为在fstab文件中有所设定,因为在挂载目录和设备时,如果未指定要挂载的设备,电脑会先到fstab文件中查看,有没有相对应的设备及目录挂载,如果没有还会到mtab文件(其实mtab文件就是目前系统的挂载设定,所以在卸载时也查看这个mtab文件,卸载时也就只需要指定挂载点或设备就可以了)中查看。

十三、介绍auto-mounter自动挂载程序在使用网络共享时自动挂载网络共享资源

1、automounter是一个daemon程式,automounters可以监控某个目录,例如:监控/mnt/nfs目录,当我们需要存取这个目录时,使用cd/mnt/nfs进入这个目录时,这时automounter程式发现使用者要存取这个目录时,就会按照设定自动将网络共享资源自动进行挂载,如果过一段时间(预设60秒)不使用也会自动卸载这个目录,这样可以减少对网络产生的负荷,使用网络的利用率更高。

2、automounter的设定,以实例说明,仅供参考:

(1)vi/etc/auto.master编辑automount主要的设定文件

(2)复制有--timeout=60那一行到下面,修改如下图:

(3)建立auto.nfs设定文件,预设/etc目录下没有这个文件,需要自己建立;

可以由auto.misc做为模板复制得来,并重命名为auto.nfs,编辑auto.nfs修改如下:

(4)serviceautofsstart启动automount服务,如果已经启动可执行serviceautofsrestart或serviceautofsreload重新启动或重新加载配置文件;

(5)使用cd/mnt/nfs目录,再执行ls指令没有未何文件,

使用cdserver1却可以进入,这时已经进行自动挂载了,这时就可以查看NFS服务器上的共享文件了。

使用mount可以查看到刚刚挂载上来的NFS网络共享目录。

注:我这里还未建立NFS文件服务器,所以这里只能做客户端的设定,现在还无法试测;

十四、介绍在ext2和ext3文件系统里有哪些属性可以设定

1、在ext2和ext3的文件系统里,都支持一些特殊的属性来控制文件的特性:

·lsattr指令:显示文件的属性设定;

·chattr指令:设定文件的属性;

格式:

chattr+|-|=属性[属性…]文件名[文件名…]

+:增加属性

-:去除属性

=:设定属性

可以设定一个或多个属性

常见属性说明如下:

·A:当文件被修改时,atime(存取时间)记录不会被修改;

·a:让文件只可以附加内容,不允许原来的内容被覆盖掉;

·d:让系统在使用dump指令做备份时,可以不用备份这个文件;

·i:让文件永远不改变,不能删除或更改文件名;

·j:让系统将文件本身的信息记录在ext3的日志里,就算ext3的文件系统是挂载成ordered(有序)或writeback模式,都会将文件本身的信息记录在ext3的日志里。

·S:当文件被修改时,就做同步的动作,立刻将资料写入硬盘中;

例:

chattr+atest添加只允许附加内容的属性

chattr=test去除掉所有的属性

十五、介绍如何使用划分好的分区或文件来当作虚拟内存(swap)

1、在Linux系统中虚拟内存称为:SWAP;

2、SWAP分为两种类型:

·用划分好的分区作为SWAP;

·用文件当作SWAP;

3、要建立SWAP的虚拟内存主要有以下几个基本设定:

(1)建立SWAP的分区或是文件,并且在建立SWAP的分区时分区的编号要设定为82;

(2)使用mkswap指令对swap分区或是swap文件写入一个特定的SWAP识别标志;

(3)必须要在/etc/fstab文件中加入适当的记录,这样才能让系统在开机后能够自动挂载SWAP;

(4)如果是SWAP的分区,要使用swapon–a指令启用SWAP,其实swapon–a指令会去读取fstab文件,并根据fstab里的记录,来启用所有的swap分区;

(5)如果是使用SWAP文件,则使用swapon指令再指定要启用哪个SWAP文件;

(6)可以使用swapon–s来检查SWAP的使用情况;

范例1如下:

(1)使用分区作为SWAP

·fdisk/dev/hda

·输入n;新建一个分区,如果一直以前面的例子做下来,硬盘应该还有剩余空间的,这里创建一个100M的分区;

·输入t;再输入7(我这里新建的分区是hda7,可以输入p查看到);再输入82(82表示设定为swap分区类型);

·再输入p;可以查看到hda7的system(系统)已经变为Linuxswap

·wq:保存退出;

·执行“partprobe”指令,让kernel重新读取分区表;

(2)mkswap/dev/hda7对SWAP分区或是SWAP文件写入特定的标志;类似于格式化成虚拟内存的格式;

(3)编辑/etc/fstab文件添加记录,这样一会的swapon指令才可以在fstab文件中找到相应的分区,在下次开机时也可以找到新的SWAP分区的位置;复制原来的SWAP那行记录,将原来的卷标表示法修改为/dev/hda7的设备表示法,其它保持不变;

(4)swapon–a指令,根据fstab文件启动所有SWAP分区;为了验证可以先使用swapon–s指令查看当前SWAP的状态;

范例2如下:使用文件当虚拟内存这和windows下的虚拟内存使用方式非常相似

(1)建立SWAP文件,这里建立的是100M的SWAP文件

指令:ddif=/dev/zeroof=/swapfilebs=1Mcount=100

说明:dd:转换并复制文件;

if:是inputfile的缩写,if=/dev/zero代表要把zero文件当作输入的文件,zero文件可以是当作都是零的文件;

of:是outputfile的缩写,of=/swapfile代表要输入到/swapfile文件上;

bs:是blocksize的缩写,表示强制设定swapfile的block的大小;

count:代表要建立多少个block;

(2)mkswap/swaplife为swapfile文件写入一个swap的标志,相当于格式化成虚似内存的格式;设定成功将会出现提信息;

(3)修改/etc/fstab文件,方式同上一范例相同,只是把/dev/hda7改写成/swapfile,其它不变;

(4)swapon–a启用swap文件

在启用前也可以用swapon–s查看,等启用后再次查看SWAP是否加载进来了。

十六、介绍一些维护文件系统的工具及一些重要的相关事项

1、如果文件系统的文件有丢失或毁损,可以使用fsck指令来维护文件系统的一致性:

检查某个分区前,分区必须处于未挂载状态,如正在使用中,必须先进行卸载,再执行检查工作;

格式:fsck-Y/dev/hda6-Y参说表示中途提示问题都回答Yes;

2、系统在开机时就会检查文件有没有丢失或损坏的,系统是根据/etc/fstab文件中最后一栏的设定来决定检查的先后顺序的,这个栏位前面已做过介绍;

3、如果检查出有问题文件,就会先放到lost+found目录中当作备分;所以当一个分区挂载成功后都会发现有这个目录存在;

4、电脑在开机时,发生严重错误,系统会用sulogin的方式启动,下图例中我将fstab文件中根目录的卷标随意的修改了一下,重新启动后将会出现严重错误,就停在了下图图的位置:

5、将ext2文件系统转成ext3文件系统,指令下如:

tune2fs-j/dev/hda6将hda6分区转成ext3文件系统,转换成功后将有提示信息;这样原有分区内的资料将不会丢失;

6、查看文件系统目前的状态信息

dumpe2fs-h/dev/hda6显示hda6的分区信息,这个指令前面已介绍过;

-h可以显示superblock的信息

十七、如何加入一块新硬盘

1、第一步当然是要将硬盘接在电脑上啦;

2、进入系统后,使用fdisk对硬盘进行分区,并设定好分区类型编号;例如:linux为83

3、建立好分区后,执行patrprobe重新载入分区,使用最新分区表;

4、建立完分区后,格式化分区,如果建立的是SWAP分区,需要为这个SWAP分区写入一个SWAP标志;

5、如果要使用卷标表示法,需要为分区创建卷标名称;

6、建立新的挂载点,并将分区挂载上;

7、在/etc/fstab文件中加入新分区的记录,让电脑以后可以自动挂载这个新建的分区;

http://apps.hi.baidu.com/share/detail/19264886

相关推荐