Linux磁盘与文件系统管理
1、Linux系统中硬盘分区主要分为:主分区和扩展分区两种,且主分区与扩展分区之和最多只有4个,即磁盘最多只能4个;主分区可以马上使用但不能进行在分区;而扩展分区必须进行再分区,即逻辑分区,才可使用,并且扩展分区最多只有一个(对操作系统的的限制,最多只能装一个操作系统);逻辑分区的数据依操作系统而不同,在Linux系统中,IDE硬盘最多可以有59个逻辑分区(5号到63号,磁盘前缀为:hd),SATA硬盘最多有11个逻辑分区(5号到15号,磁盘前缀为:sd)。
2、Linux文件系统通常会将数据和文件权限、属性分开存放在不同的块中,权限和属性放置到inode中,实际数据存放到data block中,具体信息如下:
super block:记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量、以及文件系统的格式与相关信息等;
inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码;
block:实际记录文件的内容,若文件太大时,就占用多个block。
3、Linux的Ext2文件系统
文件系统一开始就将inode与block规划好了,除非重新格式化(或者利用resize2fs等命令更改系统大小),否则inode与block固定后就不会再变动的。
在文件系统整体的规划中,文件系统最前面有一个启动扇区,可以安装引导装载程序。
①inodetable(inode表格)
inode记录文件数据至少有下面这些:
·该文件的访问模式(read/write/excute)
·该文件的所有者与组(owner/group)
·该文件的大小
·该文件创建或状态改变的时间(ctime)
·最近一次的读取时间(atime)
·最近修改时间(mtime)
·定义文件特性的标志(flag),如设置SetUID等
·该文件真正内容的指向(pointer)
·每个inode的大小均固定为128bytes
·每个文件都会仅占用一个inode而已,因此文件系统能够创建的文件数量与inode的数量有关
·系统读取文件时需要先找到inode,并分享inode所记录的权限与用户是否符合,如符合才能够开始实际读取数据block的内容
·inode记录block号码的区域定位12个直接、1个间接、与1个三间接记录去,即拿block来记录额外的号码
②data block(数据块)
在Ext2文件系统中,所支持的block大小有1kb、2kb及4kb三种。
③Superblock(超级块)
④File System Description(文件系统描述说明)
⑤block bitmap(块对照表)
⑥inode bitmap(inode对照表)
4、Ext2/Ext3文件的访问与日志文件系统的功能
新增一个文件,此时文件系统的行为是:
①先确定用户对欲添加文件的目录是否具有w与x的权限,若有的话才能添加
②根据inode bitmap找到没有使用的inode号码,并将新文件的权限/属性写入
③根据block bitmap找到没有使用中的block号码,并将时间的数据写入block中,且更新inode的block指向数据
④将刚才写入的inode与block数据同步更新inode bitmap与block bitmap,并更新supervblock的内容
一般将inodetable与datatable称为数据存放区域,至于superblock、blockbitmp、inodebitmap等区段被称为中间数据(metadata),这些区段的数据经常变动,每次添加、删除、编辑时都可能会影响到这三个部分的数据。
为了保证文件系统信息一致性,Ext3加入了日志文件系统。Ext3是Ext2的升级版。
5、文件系统的简单操作
(1)磁盘与目录的容量:df,du
df:列出文件系统的整体磁盘使用量
df [-ahikHtm] [目录或文件名]
-a:列出所有的文件系统,包括系统特有的/proc等文件系统
-k:以KB的容量显示各文件系统
-m:以MB的容量显示各文件系统
-h:以人们较易阅读的GB、MB、KB等格式自行显示
-i:不用硬盘容量,而以inode的数量来显示
du:评估文件系统的磁盘的使用量,目录所占容量
du [-ahskm] 文件或目录名称
-a:列出所有的文件与目录的容量,默认仅统计目录下面的文件量
-s:列出总量而已,而不列出每个各别的目录占用量
(2)连接文件:ln
在Linux下面的连接文件有两种:一种是类似Windows的快捷方式功能的文件,可以快速连接到目标文件或目录(符号连接,symbolic link);另一种则是通过文件系统的inode连接来产生新的文件名,而不产生新文件(硬连接,hard link)。
hard link:只是在某个目录下新建一条文件名连接到某个inode号码的关联记录上。相对于symbolic link更安全,如果你将任何一个“文件名”删除,其是inode与block都还是存在的。使用hard link设置连接文件时,磁盘的空间与inode的数目都不会改变,只是在该目录的关连数据上多写了一个。但使用hard link要注意:不能跨文件系统,也不能连接到目录。
symbolic link:类似Windows的快捷方式,创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件的文件名,当源文件被删除之后,symbolic link的文件会打开,实际上就是找不到源文件的“文件名”。
ln [-sf] 源文件 目标文件
其中,-s:如果不加任何参数就是hard link,加上-s 就是symbolic link
-f:如果目标文件存在时,就主动将目标文件直接删除后再创建
6、磁盘的分区、格式化、检验与挂载
(1)磁盘分区:fdisk
fdisk [-l] 设备名称
其中,-l:输出后面接的设备所有的分区内容。若仅有fdisk -l时,则系统将会把整个系统内能够找到的设备的分区均列出来。fdisk只有root才能执行。
(2)磁盘格式化:mkfs
mkfs [-t 文件系统格式] 设备文化名
其中,-t:可以接文件系统格式,如ext3,ext2,vfat等
磁盘格式化指定文件系统的具体选项使用:mke2fs
mke2fs [-b block的大小] [-i inode大小] [-L 卷标] [-cj]设备
7、磁盘挂载与卸载
磁盘挂载要注意:
①单一文件系统不应该被重复挂载在不同的挂载点(目录)中;
②单一目录不应该重复挂载多个文件系统;
③作为挂载点的目录理论上应该是都是空目录才是;如果挂载的目录不是空,那么挂载子文件系统之后,原目录下的东西就会暂时消失,并不会被覆盖掉,等新分区卸载之后,原目录的内容就会再次显示出来。
mount -a
-a:依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上来;
monut [-t 文件系统] [-L Label名] [-o 额外选项] \
[-n] 设备文件名 挂载点
-t:指定文件系统种类
-n:系统将实际挂载情况实时写入/etc/mtab中,其他参数请使用man monut查看。
umonut [-fn] 设备文件名或挂载点
其中,-f:强制卸载,可用在类似网络文件系统(NFS)无法读取到的情况下;
-n:不更新/etc/mtab的情况下卸载
8、文件常用压缩命令
压缩命令:
①compress:这个压缩命令是非常老旧的压缩命令,已经不再流行了。
compress [-rcv] 文件或目录
其中,-r:可以连同目录下的文件也同时给予压缩;
-c:将压缩数据输出成为standard output(输出到屏幕);
-v:可以显示出压缩后的文件信息以及压缩过程中的一些文件名变化。
②gzip:目前应用最为广泛的压缩命令,可以解压compress、zip与gzip等软件所在压缩文件,建立的压缩文件为*.gz的文件名。可以使用zcat命令直接读取纯文本压缩文件。
gzip [-cdtv#] 文件名
其中,-c:将压缩的数据输出到屏幕上,可以通过数据流重定向来处理;
-d:解压缩的参数;
-t:可以用来检验一个压缩文件的一致性,看看文件有无错误;
-v:可以显示原文件/压缩文件的压缩比等信息;
-#:压缩等级,-1最快,但压缩比最差,-9最慢,但压缩比最好,默认是-6.
如:gzip -v man.cofig(压缩man.config文件,并显示压缩比),gzip -d man.config.gz(解压man.config.gz文件),zcat man.config.gz(查看压缩文件man.config.gz)
③bzip2:提供压缩比比gzip更佳的压缩程序,建立的压缩文件为*.bz2的文件名。bzcat:查看*.bz2d的压缩文件。
bzip2 [-cdkzv#] 文件名
其中,-k:保留原文件,而不会删除原始的文件;其他参数同gzip。
注:gzip、bzip2都只能对单一文件进行压缩,不能对目录进行压缩,若对目录进行压缩需要使用tar命令。
④打包命令:tar
打包压缩:tar [-j|-z][cv] [-f 新建文件名] filename
查看文件名:tar [-j|-z][tv] [-f 新建文件名]
加压缩:tar [-j|-z][xv] [-f 新建文件名] [-C 目录]
其中,-c:新建打包文件,可以搭配-v来查看过程中被打包的文件名(filename);
-t:查看打包文件的内容包含哪些文件名,重点在查看文件名;
-x:解打包或解压缩的功能,可以搭配-C(大写)在特定目录解压;
-j:通过bzip2的支持进行压缩/解压,此时文件名最好为*.tar.bz2;
-z:通过gzip的支持进行压缩/解压 ,此时文件名最好为*.tar.gz;
-v:在压缩/解压过程中,将正在处理的文件名显示出来;
-f filename:-f后面要接被处理的文件名,建议-f单独写一个参数;
-C 目录:在特定的目录解压缩。
其他参数,请使用man tar查看。