实训8磁盘管理.docx
- 文档编号:25406105
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:25
- 大小:136.64KB
实训8磁盘管理.docx
《实训8磁盘管理.docx》由会员分享,可在线阅读,更多相关《实训8磁盘管理.docx(25页珍藏版)》请在冰豆网上搜索。
实训8磁盘管理
一、磁盘分区基本知识
1、硬盘组成与分区
扇区(Sector)为最小的物理储存单位,每个扇区为512bytes;
将扇区组成一个圆,那就是磁柱(Cylinder),磁柱是分区(partition)的最小单位;
第一个扇区最重要,里面有:
(1)主要启动区(Masterbootrecord,MBR)及分区表(partitiontable),其中MBR占有446bytes,而partitiontable则占有64bytes。
2、磁盘分区
磁盘分区指指定分区的启始与结束磁柱。
即告诉操作系统『这颗磁盘在此分区可以存取的区域是由A磁柱到B磁柱之间的区块』,这样操作系统就能够知道他可以在所指定的区块内进行文件数据的读/写/搜寻等动作。
指定分区的磁柱范围记录位置:
就是第一个扇区的分区表中。
但是因为分区表仅有64bytes而已,因此最多只能记录四笔分区的记录,这四笔记录我们称为主要(primary)或扩展(extended)分区,其中扩展分区还可以再分割出逻辑分区表(logical),而能被格式化的则仅有主要分区与逻辑分区。
⏹主要分区与扩展分区最多可以有四笔(硬盘的限制)
⏹扩展分区最多只能有一个(操作系统的限制)
⏹逻辑分区是由扩展分区持续切割出来的分区;
⏹能够被格式化后,作为数据存取的分割槽为主要分区与逻辑分区。
扩展分区无法格式化;
⏹逻辑分区的数量依操作系统而不同,在Linux系统中,IDE硬盘最多有59个逻辑分区(5号到63号),SATA硬盘则有11个逻辑分区(5号到15号)。
3、各种接口的磁盘在Linux中的文件名分别为:
/dev/sd[a-p][1-15]:
为SCSI,SATA,U盘,Flash闪盘等接口的磁盘文件名;
/dev/hd[a-d][1-63]:
为IDE接口的磁盘文件名;
二、文件系统
1、格式化
因为每种操作系统所配置的文件属性/权限并不相同,为了存放这些文件所需的数据,因此就需要将分区进行格式化,以成为操作系统能够利用的『文件系统格式(filesystem)』。
Linux的文件系统则为Ext2(Linuxsecondextendedfilesystem,ext2fs)
一个分区可以格式化为多个文件系统,如LVM、软件磁盘阵列等
2、文件系统工作原理
操作系统的文件数据除了文件实际内容外,通常含有非常多的属性,例如Linux操作系统的文件权限(rwx)与文件属性(拥有者、群组、时间参数等)。
文件系统通常会将这两部份的数据分别存放在不同的区块,权限与属性放置到inode中,至于实际数据则放置到datablock区块中。
另外,还有一个超级区块(superblock)会记录整个文件系统的整体信息,包括inode与block的总量、使用量、剩余量等。
每个inode与block都有编号。
●superblock:
记录此filesystem的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息等;
●inode:
记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码;
●block:
实际记录文件的内容,若文件太大时,会占用多个block。
索引式文件系统(indexedallocation):
图1inode/block数据存取示意图
3、inodetable(inode表格)
inode记录的文件数据包括底下这些:
∙该文件的存取模式(read/write/excute);
∙该文件的拥有者与群组(owner/group);
∙该文件的容量;
∙该文件创建或状态改变的时间(ctime);
∙最近一次的读取时间(atime);
∙最近修改的时间(mtime);
∙定义文件特性的旗标(flag),如SetUID...;
∙该文件真正内容的指向(pointer);
inode的数量与大小也是在格式化时就已经固定了:
∙每个inode大小均固定为128bytes;
∙每个文件都仅会占用一个inode而已;
∙承上,因此文件系统能够创建的文件数量与inode的数量有关;
∙系统读取文件时需要先找到inode,并分析inode所记录的权限与用户是否符合,若符合才能够开始实际读取block的内容。
4、Superblock(超级区块)
Superblock是记录整个filesystem相关信息的地方,没有Superblock,就没有这个filesystem了。
其记录的信息主要有:
∙block与inode的总量;
∙未使用与已使用的inode/block数量;
∙block与inode的大小(block为1,2,4K,inode为128bytes);
∙filesystem的挂载时间、最近一次写入数据的时间、最近一次检验磁盘(fsck)的时间等文件系统的相关信息;
∙一个validbit数值,若此文件系统已被挂载,则validbit为0,若未被挂载,则validbit为1。
图2文件系统示意图
练习:
查看文件系统
[root@www~]#dumpe2fs[-bh]装置文件名
选项与参数:
-b:
列出保留为坏轨的部分
-h:
仅列出superblock的数据,不会列出其他的区段内容!
范例:
找出我的根目录磁盘文件名,并观察文件系统的相关信息
[root@www~]#df<==这个命令可以叫出目前挂载的装置
Filesystem1K-blocksUsedAvailableUse%Mountedon
/dev/hdc299206243822848558570841%/<==就是这个光!
/dev/hdc3495631614137645591084%/home
/dev/hdc1101086111268474112%/boot
tmpfs37133203713320%/dev/shm
[root@www~]#dumpe2fs/dev/hdc2
dumpe2fs1.39(29-May-2006)
Filesystemvolumename:
/1<==这个是文件系统的名称(Label)
Filesystemfeatures:
has_journalext_attrresize_inodedir_index
filetypeneeds_recoverysparse_superlarge_file
Defaultmountoptions:
user_xattracl<==默认挂载的参数
Filesystemstate:
clean<==这个文件系统是没问题的(clean)
Errorsbehavior:
Continue
FilesystemOStype:
Linux
Inodecount:
2560864<==inode的总数
Blockcount:
2560359<==block的总数
Freeblocks:
1524760<==还有多少个block可用
Freeinodes:
2411225<==还有多少个inode可用
Firstblock:
0
Blocksize:
4096<==每个block的大小啦!
Filesystemcreated:
FriSep501:
49:
202008
Lastmounttime:
MonSep2212:
09:
302008
Lastwritetime:
MonSep2212:
09:
302008
Lastchecked:
FriSep501:
49:
202008
Firstinode:
11
Inodesize:
128<==每个inode的大小
Journalinode:
8<==底下这三个与下一小节有关
Journalbackup:
inodeblocks
Journalsize:
128M
Group0:
(Blocks0-32767)<==第一个datagroup内容,包含block的启始/结束号码
Primarysuperblockat0,Groupdescriptorsat1-1<==超级区块在0号block
ReservedGDTblocksat2-626
Blockbitmapat627(+627),Inodebitmapat628(+628)
Inodetableat629-1641(+629)<==inodetable所在的block
0freeblocks,32405freeinodes,2directories<==所有block都用完了!
Freeblocks:
Freeinodes:
12-32416<==剩余未使用的inode号码
Group1:
(Blocks32768-65535)
....(底下省略)....
#前半部在显示supberblock的内容,包括标头名称(Label)以及inode/block的相关信息
#后面则是每个blockgroup的个别信息!
您可以看到各区段数据所在的号码!
#也就是说,基本上所有的数据都与block的号码有关。
三、目录树
1、目录
在Linux下的ext2文件系统创建一个目录时,ext2会分配一个inode与至少一块block给该目录。
其中,inode记录该目录的相关权限与属性,并可记录分配到的那块block号码;而block则是记录在这个目录下的文件名与该文件名占用的inode号码数据。
目录所占用的block内记录如下的信息:
图:
目录占用的block记录的数据示意图
练习:
观察root家目录内的文件所占用的inode号码
[root@www~]#ls-li
total92
654683-rw-------1rootroot1474Sep418:
27anaconda-ks.cfg
648322-rw-r--r--1rootroot42304Sep418:
26install.log
648323-rw-r--r--1rootroot5661Sep418:
25install.log.syslog
2、文件
当我们在Linux下的ext2创建一个一般文件时,ext2会分配一个inode与相对于该文件大小的block数量给该文件。
例如:
假设我的一个block为4Kbytes,而我要创建一个100KBytes的文件,那么linux将分配一个inode与25个block来储存该文件!
但同时请注意,由于inode仅有12个直接指向,因此还要多一个block来作为区块号码的记录。
3、目录树读取
文件的inode本身并不记录文件名,文件名的记录是在目录的block当中。
因此在文件与目录的权限中,我们才会提到『新增/删除/更名文件名与目录的w权限有关』!
那么因为文件名是记录在目录的block当中,因此当我们要读取某个文件时,就务必会经过目录的inode与block,然后才能够找到那个待读取文件的inode号码,最终才会读到正确的文件的block内的数据。
由于目录树是由根目录开始读起,因此系统通过挂载的信息可以找到挂载点的inode号码(通常一个filesystem的最顶层inode号码会由2号开始!
),此时就能够得到根目录的inode内容,并依据该inode读取根目录的block内的文件名数据,再一层一层的往下读到正确的文件名。
练习:
观察读取/etc/passwd这个文件的过程(假设身份为一般使用者):
[root@www~]#ll-di//etc/etc/passwd
2drwxr-xr-x23rootroot4096Sep2212:
09/
1912545drwxr-xr-x105rootroot12288Oct1404:
02/etc
1914888-rw-r--r--1rootroot1945Sep2902:
21/etc/passwd
流程:
/的inode:
透过挂载点的信息找到/dev/hdc2的inode号码为2的根目录inode,且inode规范的权限让我们可以读取该block的内容(有r与x);
⏹/的block:
经过上个步骤取得block的号码,并找到该内容有etc/目录的inode号码(1912545);
⏹etc/的inode:
读取1912545号inode得知vbird具有r与x的权限,因此可以读取etc/的block内容;
⏹etc/的block:
经过上个步骤取得block号码,并找到该内容有passwd文件的inode号码(1914888);
⏹passwd的inode:
读取1914888号inode得知vbird具有r的权限,因此可以读取passwd的block内容;
⏹passwd的block:
最后将该block内容的数据读出来。
4、EXT2/EXT3文件的存取与日志式文件系统的功能
新建一个文件或目录的流程:
⏹先确定用户对于欲新增文件的目录是否具有w与x的权限,若有的话才能新增;
⏹根据inodebitmap找到没有使用的inode号码,并将新文件的权限/属性写入;
⏹根据blockbitmap找到没有使用中的block号码,并将实际的数据写入block中,且升级inode的block指向数据;
⏹将刚刚写入的inode与block数据同步升级inodebitmap与blockbitmap,并升级superblock的内容。
5、数据的不一致(Inconsistent)状态
你的文件在写入文件系统时,因为不知名原因导致系统中断(例如突然的停电啊、系统核心发生错误啊~等等的事情发生时),所以写入的数据仅有inodetable及datablock而已,最后一个同步升级中介数据的步骤并没有做完,此时就会发生metadata的内容与实际数据存放区产生不一致(Inconsistent)的情况了。
日志式文件系统的兴起。
6、日志式文件系统(Journalingfilesystem)
为了避免上述提到的文件系统不一致的情况发生,因此提出一个新的方式,如果在filesystem当中规划出一个区块,该区块专门在记录写入或修订文件时的步骤,那不就可以简化一致性检查的步骤了?
也就是说:
1.预备:
当系统要写入一个文件时,会先在日志记录区块中纪录某个文件准备要写入的信息;
2.实际写入:
开始写入文件的权限与数据;开始升级metadata的数据;
3.结束:
完成数据与metadata的升级后,在日志记录区块当中完成该文件的纪录。
在这样的程序当中,万一数据的纪录过程当中发生了问题,那么我们的系统只要去检查日志记录区块,就可以知道哪个文件发生了问题,针对该问题来做一致性的检查即可,而不必针对整块filesystem去检查,这样就可以达到快速修复filesystem的能力!
这就是日志式文件最基础的功能。
ext3:
日志式文件系统,是ext2的升级版本,并且可向下兼容ext2版本。
7、挂载点(mountpoint):
每个filesystem都有独立的inode/block/superblock等信息,这个文件系统要能够链接到目录树才能被我们使用。
将文件系统与目录树结合的动作我们称为『挂载』。
重点是:
挂载点一定是目录,该目录为进入该文件系统的入口。
因此并不是你有任何文件系统都能使用,必须要『挂载』到目录树的某个目录后,才能够使用该文件系统的。
练习:
观察/,/boot,/home三个 目录,由于filesystem最顶层的目录之inode一般为2号,因此可以发现/,/boot,/home为三个不同的filesystem
[root@www~]#ls-lid//boot/home
2drwxr-xr-x23rootroot4096Sep2212:
09/
2drwxr-xr-x4rootroot1024Sep418:
06/boot
2drwxr-xr-x6rootroot4096Sep2902:
21/home
四、文件系统操作
1、查看磁盘与目录的容量
▪df
[root@www~]#df[-ahikHTm][目录或文件名]
选项与参数:
-a:
列出所有的文件系统,包括系统特有的/proc等文件系统;
-k:
以KBytes的容量显示各文件系统;
-m:
以MBytes的容量显示各文件系统;
-h:
以人们较易阅读的GBytes,MBytes,KBytes等格式自行显示;
-H:
以M=1000K取代M=1024K的进位方式;
-T:
连同该partition的filesystem名称(例如ext3)也列出;
-i:
不用硬盘容量,而以inode的数量来显示
范例一:
将系统内所有的filesystem列出来!
[root@www~]#df
Filesystem1K-blocksUsedAvailableUse%Mountedon
/dev/hdc299206243823112558544441%/
/dev/hdc3495631614137645591084%/home
/dev/hdc1101086111268474112%/boot
tmpfs37133203713320%/dev/shm
#在Linux底下如果df没有加任何选项,那么默认会将系统内所有的
#(不含特殊内存内的文件系统与swap)都以1Kbytes的容量来列出来!
#至于那个/dev/shm是与内存有关的挂载!
范例二:
将容量结果以易读的容量格式显示出来
[root@www~]#df-h
FilesystemSizeUsedAvailUse%Mountedon
/dev/hdc29.5G3.7G5.4G41%/
/dev/hdc34.8G139M4.4G4%/home
/dev/hdc199M11M83M12%/boot
tmpfs363M0363M0%/dev/shm
#不同于范例一,这里会以G/M等容量格式显示出来,比较容易看!
范例三:
将系统内的所有特殊文件格式及名称都列出来
[root@www~]#df-aT
FilesystemType1K-blocksUsedAvailableUse%Mountedon
/dev/hdc2ext399206243823112558544441%/
procproc000-/proc
sysfssysfs000-/sys
devptsdevpts000-/dev/pts
/dev/hdc3ext3495631614137645591084%/home
/dev/hdc1ext3101086111268474112%/boot
tmpfstmpfs37133203713320%/dev/shm
nonebinfmt_misc000-/proc/sys/fs/binfmt_misc
sunrpcrpc_pipefs000-/var/lib/nfs/rpc_pipefs
#系统里面其实还有很多特殊的文件系统存在的。
那些比较特殊的文件系统几乎
#都是在内存当中,例如/proc这个挂载点。
因此,这些特殊的文件系统
#都不会占据硬盘空间!
范例四:
将/etc底下的可用的磁盘容量以易读的容量格式显示
[root@www~]#df-h/etc
FilesystemSizeUsedAvailUse%Mountedon
/dev/hdc29.5G3.7G5.4G41%/
#在df后面加上目录或者是文件时,df
#会自动的分析该目录或文件所在的partition,并将该partition的容量显示出来,
#所以,您就可以知道某个目录底下还有多少容量可以使用了!
范例五:
将目前各个partition当中可用的inode数量列出
[root@www~]#df-ih
FilesystemInodesIUsedIFreeIUse%Mountedon
/dev/hdc22.5M147K2.3M6%/
/dev/hdc31.3M461.3M1%/home
/dev/hdc126K3426K1%/boot
tmpfs91K191K1%/dev/shm
#这个范例则主要列出可用的inode剩余量与总容量。
分析一下与范例一的关系,
#你可以清楚的发现到,通常inode的数量剩余都比block还要多
▪du
[root@www~]#du[-ahskm]文件或目录名称
选项与参数:
-a:
列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
-h:
以人们较易读的容量格式(G/M)显示;
-s:
列出总量而已,而不列出每个各别的目录占用容量;
-S:
不包括子目录下的总计,与-s有点差别。
-k:
以KBytes列出容量显示;
-m:
以MBytes列出容量显示;
范例一:
列出目前目录下的所有文件容量
[root@www~]#du
8./test4<==每个目录都会列出来
8./test2
....中间省略....
12./.gconfd<==包括隐藏文件的目录
220.<==这个目录(.)所占用的总量
#直接输入du没有加任何选项时,则du会分析『目前所在目录』
#的文件与目录所占用的硬盘空间。
但是,实际显示时,仅会显示目录容量(不含文件),
#因此.目录有很多文件没有被列出来,所以全部的目录相加不会等于.的容量喔!
#此外,输出的数值数据为1K大小的容量单位。
范例二:
同范例一,但是将文件的容量也列出来
[root@www~]#du-a
12./i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实训 磁盘 管理