Linux 磁盘与文件系统管理.docx

上传人:b****5 文档编号:5648817 上传时间:2022-12-30 格式:DOCX 页数:18 大小:29.46KB
下载 相关 举报
Linux 磁盘与文件系统管理.docx_第1页
第1页 / 共18页
Linux 磁盘与文件系统管理.docx_第2页
第2页 / 共18页
Linux 磁盘与文件系统管理.docx_第3页
第3页 / 共18页
Linux 磁盘与文件系统管理.docx_第4页
第4页 / 共18页
Linux 磁盘与文件系统管理.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

Linux 磁盘与文件系统管理.docx

《Linux 磁盘与文件系统管理.docx》由会员分享,可在线阅读,更多相关《Linux 磁盘与文件系统管理.docx(18页珍藏版)》请在冰豆网上搜索。

Linux 磁盘与文件系统管理.docx

Linux磁盘与文件系统管理

Linux磁盘与文件系统管理

磁盘分割(Partition):

在了解了硬盘的物理组件之后,再接着下来介绍的就是硬盘的分割(Partition)!

为什么要进行硬盘分割?

因为我们必须要告诉操作系统:

『我这块硬盘可以存取的区域是由A磁柱到B磁柱』,如此一来,操作系统才能够控制硬盘磁头去A-B范围内的磁柱存取数据;这就是磁盘分割(Partition)的重点了:

也就是记录每一个分割区(Partition)的起始与结束磁柱!

文件系统:

在告知系统我的partition所在的起始与结束磁柱之后,再来则是需要将partition格式化为『我的操作系统认识的文件系统(Filesystem)』!

不论是哪一种文件系统,数据总是需要储存的!

既然硬盘是用来储存数据的,想当然数据就必须写入硬盘!

刚刚我们提到硬盘的最小储存单位是扇区,不过数据所储存的最小单位并不是扇区,因为用扇区来储存太没有效率了。

怎么说呢?

因为一个扇区只有512Bytes,而磁头是一个一个扇区的读取,也就是说,如果我的文件有10MBytes,那么为了读这个文件,我的磁头必须要进行读取(I/O)20480次!

为了克服这个效率上的困扰,所以就有逻辑区块(Block)的产生了!

逻辑区块是在硬盘分割进行硬盘的分割的格式化时,所指定的『最小储存单位』,这个最小储存单位当然是架构在扇区的大小上面(因为扇区为硬盘的最小物理储存单位啊!

),所以,逻辑区块Block的大小为扇区的2的次方倍数。

此时,磁头一次可以读取一个block,如果假设我们在格式化的时候,指定一个逻辑区块(Block)为4KBytes(亦即由连续的八个扇区所构成一个block),那么同样一个10MBytes的文件,磁头要读取的次数则大幅降为2560次,这个时候可就大大的增加文件的读取效能!

不过,逻辑区块(Block)单位的规划并不是越大越好!

怎么说呢?

因为一个Block最多仅能容纳一个文件(这里指Linux的ext2文件系统)!

这有什么问题呢?

举例来说好了,假如您的Block规划为4KBytes,而您有一个文件大小为0.1KBytes,这个小文件将占用掉一个Block的空间,也就是说,该Block虽然可以容纳4Kbytes的容量,然而由于文件只占用了0.1Kbytes,所以,实际上剩下的3.9KBytes是不能再被使用了,所以,在考虑Block的规划时,需要同时考虑到:

∙文件读取的效能

∙文件大小可能造成的硬盘空间浪费

Linux的EXT2文件系统(inode):

inode译成中文就是索引节点,它用来存放档案及目录的基本信息,包含时间、档名、使用者及群组等

∙在Linux系统当中,每个文件不止有文件的内容数据,还包括文件的种种属性,例如:

所属群组、所属使用者、能否执行、文件建立时间、文件特殊属性等等。

由于Linux操作系统是一个多人多任务的环境,为了要保护每个使用者所拥有数据的隐密性,所以具有多样化的文件属性是在所难免的!

在标准的ext2文件系统当中,我们将每个文件的内容分为两个部分来储存,一个是文件的属性,另一个则是文件的内容。

为了应付这两个不同的,所以ext2规划出inode与Block来分别储存文件的属性(放在节点inode当中)与文件的内容(放置在Blockarea当中)。

当我们要将一个partition格式化(format)为ext2时,就必须要指定inode与Block的大小才行,也就是说,当partition被格式化为ext2的文件系统时,他一定会有inodetable与blockarea这两个区域。

底下我们分别针对目录与文件来说明:

∙目录:

当我们在Linux下的ext2文件系统建立一个目录时,ext2会分配一个inode与至少一块Block给该目录。

其中,inode记录该目录的相关属性,并指向分配到的那块Block;而Block则是记录在这个目录下的相关连的文件(或目录)的关连性!

∙文件:

当我们在Linux下的ext2建立一个一般文件时,ext2会分配至少一个inode与相对于该文件大小的Block数量给该文件。

例如:

假设我的一个Block为4Kbytes,而我要建立一个100KBytes的文件,那么linux将分配一个inode与25个Block来储存该文件!

要注意的是,节点inode本身并不纪录文件名,而是记录文件的相关属性,至于文件名则是记录在目录所属的block区域!

那么文件与目录的关系又是如何呢?

就如同上面的目录提到的,文件的相关连结会记录在目录的block数据区域,所以当我们要读取一个文件的内容时,我们的Linux会先由根目录/取得该文件的上层目录所在inode,再由该目录所记录的文件关连性(在该目录所属的block区域)取得该文件的inode,最后在经由inode内提供的block指向,而取得最终的文件内容。

挂载点的意义(mountpoint):

我们上面提到的都是关于文件系统(filesystem),但是要能够让我们的Linux使用的话,非得『挂载(mount)』上我们的Linux系统才行,

举例来说,,我们将硬盘分割为几大部分,同时主要将/与/home设定为两个partition的挂载点。

假设/是接在/dev/hda1,而/home是接在/dev/hda2上面,那么,也就是说,在/home底下的所有次目录,使用的都是/dev/hda2那个partition的资料!

而非/home的则都是使用/dev/hda1的数据!

请注意,挂载点一定是『目录』而不是文件!

也就是说,这个挂载点就是进入该filesystem的入口!

 

磁盘与目录的容量:

在文字接口底下有什么方法可以查看目前的磁盘最大容量、已经使用掉的容量、目前所在目录的已使用容量?

还有还有,怎么知道目前目录底下使用掉的硬盘容量呢?

以及如何查询目前的inodes数目?

底下我们就来谈一谈主要的两个指令:

df

[root@linux~]#df[-ahikHTm][目录或文件名]

参数:

-a:

列出所有的文件系统,包括系统特有的/proc等文件系统;

-k:

以KBytes的容量显示各文件系统;

-m:

以MBytes的容量显示各文件系统;

-h:

以人们较易阅读的GBytes,MBytes,KBytes等格式自行显示;

-H:

以M=1000K取代M=1024K的进位方式;

-T:

连同该partition的filesystem名称(例如ext3)也列出;

-i:

不用硬盘容量,而以inode的数量来显示

范例:

范例一:

将系统内所有的partition列出来!

[root@linux~]#df

Filesystem1K-blocksUsedAvailableUse%Mountedon

/dev/hda159522523012332263268054%/

/dev/shm19283601928360%/dev/shm

/dev/hda5949264422160487810603%/home

#特别注意,在Linux(FC4)底下,如果df没有加任何参数,那么预设会将系统内所有的(不含特殊内存内的文件系统与swap)都以Kbytes的容量来列出来!

至于那个/dev/shm是与内存有关的挂载,先不要理他!

范例二:

将容量结果以易读的容量格式显示出来

[root@linux~]#df-h

FilesystemSizeUsedAvailUse%Mountedon

/dev/hda15.7G2.9G2.6G54%/

/dev/shm189M0189M0%/dev/shm

/dev/hda59.1G217M8.4G3%/home

#不同于范例一,这里会以G/M等容量格式显示出来,比较容易看!

范例三:

将/etc底下的可用的磁盘容量以易读的容量格式显示

[root@linux~]#df-h/etc

FilesystemSizeUsedAvailUse%Mountedon

/dev/hda15.7G2.9G2.6G54%/

#这个范例比较有趣一点,在df后面加上目录或者是文件时,df会自动的分析该目录或文件所在的partition,并将该partition的容量显示出来,所以,您就可以知道某个目录底下还有多少容量可以使用了!

^_^

范例五:

将目前各个partition当中可用的inode数量列出

[root@linux~]#df-ih

FilesystemInodesIUsedIFreeIUse%Mountedon

/dev/hda11.5M141K1.4M10%/

/dev/shm48K148K1%/dev/shm

/dev/hda52.4M672.4M1%/home

du

[root@linux~]#du[-ahskm]文件或目录名称

参数:

-a:

列出所有的文件与目录容量,因为预设仅统计目录底下的文件量而已。

-h:

以人们较易读的容量格式(G/M)显示;

-s:

列出总量而已,而不列出每个各别的目录占用容量;

-k:

以KBytes列出容量显示;

-m:

以MBytes列出容量显示;

范例:

范例一:

列出目前目录下的所有文件容量

[root@linux~]#du

[root@vbird~]#du

16./.gnome2

16./.ssh

.......中间省略........

292.

#直接输入du没有加任何参数时,则du会分析『目前所在目录』的文件与目录所占用的硬盘空间。

但是,实际显示时,仅会显示目录容量,但我的.目录有很多文件没有被列出来,所以,全部的目录相加不会等于.的容量!

范例二:

同范例一,但是将文件的容量也列出来

[root@linux~]#du-a

12./install.log.syslog

16./.gnome2

16./.ssh

76./install.log

16./.bash_history

4./.bashrc

.......中间省略........

292.

#加上这个-a参数后,就会将目录底下的文件也一起列示出来,

#而不是仅列出文件信息而已!

注意~^_^

 

磁盘分割:

fdisk

[root@linux~]#fdisk[-l]装置名称

参数:

-l:

输出后面接的装置所有的partition内容。

若仅有fdisk-l时,

则系统将会把整个系统内能够搜寻到的装置的partition均列出来。

范例:

范例:

查阅您的第一颗硬盘内的相关信息

[root@linux~]#fdisk/dev/hda<==仔细看,不要加上数字!

Thenumberofcylindersforthisdiskissetto2494.

Thereisnothingwrongwiththat,butthisislargerthan1024,

andcouldincertainsetupscauseproblemswith:

1)softwarethatrunsatboottime(e.g.,oldversionsofLILO)

2)bootingandpartitioningsoftwarefromotherOSs

(e.g.,DOSFDISK,OS/2FDISK)

#在你进入fdisk这支程序的工作画面后,如果您的硬盘太大的话,就会出现如上讯息。

这个讯息仅是在告知你,因为某些旧版的软件与操作系统并无法支持大于1024磁柱(cylinter)后的扇区使用,不过我们Linux是没问题!

Command(mforhelp):

m<==输入m后,就会看到底下这些指令介绍

Commandaction

atoggleabootableflag

beditbsddisklabel

ctogglethedoscompatibilityflag

ddeleteapartition

llistknownpartitiontypes

mprintthismenu

naddanewpartition

ocreateanewemptyDOSpartitiontable

pprintthepartitiontable

qquitwithoutsavingchanges

screateanewemptySundisklabel

tchangeapartition'ssystemid

uchangedisplay/entryunits

vverifythepartitiontable

wwritetabletodiskandexit

xextrafunctionality(expertsonly)

#这里注意一下,使用fdisk这支程序是完全不需要背指令的,因为按下m之后立刻就会有一堆指令说明跑出来了!

在上面的指令当中,比较重要的有:

#d删除一个磁盘分割槽、n新增一个磁盘分割槽、p将目前的磁盘分割槽列出来、q不储存离开!

这个重要!

w写入磁盘分割表后离开!

这个危险!

Command(mforhelp):

p<==这里可以输出目前磁盘的状态

Disk/dev/hda:

20.5GB,20520493056bytes<==硬盘的信息在这底下三行

255heads(磁面),63扇区s/track,2494cylinders(磁柱)

Units=cylindersof16065*512=8225280bytes

DeviceBootStartEndBlocksIdSystem

/dev/hda1*1765614483183Linux

/dev/hda27661147306841583Linux

/dev/hda3114812741020127+82Linuxswap

/dev/hda41275249497996505Extended

/dev/hda5127524949799618+83Linux

#由上面的信息,您可以知道,我的硬盘是20GB的,而Head/扇区/Cylinder

#的数量为255/63/2494,另外,可以看到上头的Boot吗?

那个地方代表有开机信息的partition!

另外,那个start与end则是指每一个partition的开始与结束的Cylinder(磁柱)号码!

#此外,上头显示的那个Id为主要文件格式的代号,你可以按下l(L的小写)就可以知道我们linux的fdisk认识多少文件系统!

至于Blocks则以KBytes来显示该partition的容量的

Command(mforhelp):

q

#想要不储存离开吗?

按下q就对了!

不要随便按w啊!

范例:

查阅目前系统内的所有partition有哪些?

[root@linux~]#fdisk-l

Disk/dev/hda:

20.5GB,20520493056bytes

255heads,63扇区s/track,2494cylinders

Units=cylindersof16065*512=8225280bytes

DeviceBootStartEndBlocksIdSystem

/dev/hda1*1765614483183Linux

/dev/hda27661147306841583Linux

/dev/hda3114812741020127+82Linuxswap

/dev/hda41275249497996505Extended

/dev/hda5127524949799618+83Linux

Disk/dev/hdb:

30.7GB,30735581184bytes

255heads,63扇区s/track,3736cylinders

Units=cylindersof16065*512=8225280bytes

DeviceBootStartEndBlocksIdSystem

/dev/hdb1*136332918204183Linux

#由于我的这个系统有两颗硬盘,下达fdisk-l的话,所有的partition都看到了!

另外,我可以确定我的/dev/hdb还有剩余空间!

因为由上面的信息看来,

#我的/dev/hdb的磁柱应该可以到3736,但是目前只用到3633,所以,

#就肯定还有剩余空间拉!

等一下我们就用这个来测试!

这个fdisk只有root才能执行,我们知道可以利用fdisk来查阅硬盘的partition信息外,底下再来说一说进入fdisk之后的几个常做的工作!

Tips:

你可以使用fdisk在您的硬盘上面胡搞瞎搞的进行实际操作,都不打紧,但是请『万记住,不要按下w即可!

』离开的时候按下q就万事无妨!

删除磁盘分割槽

刚刚的fdisk结果当中,我知道我的/dev/hdb仅有/dev/hdb1而已,那么假设我要将这个/dev/hdb1删除的话,可以怎么做?

1.fdisk/dev/hdb:

先进入fdisk画面;

2.p:

先看一下扇区的信息,假设要杀掉/dev/hdb1;

3.d:

这个时候会要你选择一个partition,就选1!

4.w(or)q:

按w可储存到磁盘数据表中,并离开fdisk;当然,如果你反悔了,呵呵,直接按下q就可以取消刚刚的删除动作了!

[root@linux~]#fdisk/dev/hdb

1.先看看整个结果是如何~

Command(mforhelp):

p

Disk/dev/hdb:

30.7GB,30735581184bytes

255heads,63扇区s/track,3736cylinders

Units=cylindersof16065*512=8225280bytes

DeviceBootStartEndBlocksIdSystem

/dev/hdb1*136332918204183Linux

2.按下d给他删除吧!

Command(mforhelp):

d

Selectedpartition1

#因为我们这个磁盘仅有1个partition,所以系统会自动帮我们~

Command(mforhelp):

p

Disk/dev/hdb:

30.7GB,30735581184bytes

255heads,63扇区s/track,3736cylinders

Units=cylindersof16065*512=8225280bytes

DeviceBootStartEndBlocksIdSystem

#『看』不见了!

partition就这样不见了!

Command(mforhelp):

q

#这里仅是做一个练习而已,所以,按下q就能够离开~

新增磁盘分割槽

那么如何新增partition呢?

以刚刚的/dev/hdb为例,我的/dev/hdb有一个/dev/hdb1,而且还有剩余空间,那我如何利用?

1.fdisk/dev/hdb:

先进入fdisk画面中;

2.n:

新增一个扇区,这个时候系统会问你,如果您已经具有extended(扩展分区)扇区时,那么系统会问您,您要新增的是Primary(主分区)还是Logical(逻辑分区),而如果您还没有extended,那么系统仅会问你要新增(主分区)Primary还是(扩展分区)Extended。

除此之外,如果您已经用完了四个P主+E扩的话,那么就仅有(逻辑分区)Logical可以选择!

如果是选择primary的话,请按p,否则请按e(extended)或l(logical)。

3.p:

由于选择为primary所以就会按下p!

4.1-4:

primary只允许四个,所以这里请按尚未被使用的那一个扇区!

5.w:

同样的储存离开!

好了,假设想要将我刚刚的/dev/hdb剩余空间分为两个分割槽,一个是primary,另一个则是logical,且primary只要100MBytes就够了!

其它的都分给logical,那可以这么做!

[root@linux~]#fdisk/dev/hdb

Command(mforhelp):

n

Commandaction

eextended

pprimarypartition(1-4)

p<==就是这里!

可以自行决定是p还是e!

Partitionnumber(1-4):

4<==编号可以随意!

Firstcylinder(3634-3736,default3634):

<==这里按下Enter就会使用默认值

Usingdefaultvalue3634

Lastcylinderor+sizeor+sizeMor+sizeK(3634-3736,default3736):

+100M

#这个地方有趣了!

我们知道partition是由n1到n2的磁柱(cylinder),

#但是我们对于磁柱的大小不容易掌握!

这个时候可以填入+100M来让系统自动帮我们找出

#『最接近100M的那个(磁柱)cylinder号码』!

因为不可能刚好等于100MBytes!

Comman

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1