- EXT文件系统
磁盘:扇区(Sector)为磁盘的最小单元;一圈扇区为一个磁柱(Cylinder),磁柱是分区(partition)的最小单位;第一扇区很重要,里面有MBR(446字节)和分区表(64字节)
各接口在linux中均以文件名形式存在,比如sata硬盘为/dev/sdax。总之/dev/sd[a-p][1-15]为scsi,sata,usb,flash等接口的磁盘文件名,×hd×为IDE接口磁盘
硬盘分区:刚刚说道磁柱是分区的最小单位,一般分区是指从A磁柱到B磁柱之间的区域。各个分区的磁柱范围数据记录在第一扇区的分区表(partition table)中,因为分区表只有64字节, 只能记录四笔分区记录,这四笔分区记录我们称为主分区(primary )或者延伸分区(extended)。其中 延伸分区可以分割成若干逻辑分区(logical), 能被格式化的只有主分区和逻辑分区。//注意,如果一块硬盘500G,其中400g分割成4个主分区,那么剩下100g就浪费了不能使用,要想使用它,必须至少减少一个主分区,并将剩余硬盘容量划分成延伸分区,并从延伸分区中划分若干个逻辑分区。因为第一扇区的分区表中只能放四个记录,而当有了延伸分区,延伸分区所划分出来的这些逻辑分区,他们的磁柱起止信息村子啊延伸分区中而并非第一扇区。另外,由于操作系统限制, 延伸分区只能有一个。
文件系统特性:任何分区在使用前要格式化成特定的文件系统,如:ext4。那么linux的ext文件系统的实质如下:每个文件系统分为若干群组,每个群组中大致含有superblock/inode/block,具体而言,superblock存储filesystem的相关信息。
![]()
对于文件而言,一个文件对应一个inode,inode中记录文件的权限、属性、block号,而对应的一个或多个block中存放者该文档的实际内容。
对于目录而言,一个目录对应一个inode,inode指向一个或多个block,其中存着目录下所有文件名和其对应inode号的表。
dumpe2fs指令可查询某个partition下的superblock和其他分区信息,可以先 df显示当前挂载设备,再用该指令如:dumpe2fs /dev/sda1。
假设想新增一个文件,流程为:1,确定用户是否对想要新建档案的目录具有w和x权限2,根据inode bitmap找到可用的inode号码,写入文档的权限和属性3,根据block bitmap 找到没有使用的block号码,写入实际文档内容数据, 且更新inode指向的block数据4,将刚写入的inode和block数据同步更新inode bitmap和block bitmap,并更新superblock内容。
异步方式(asynchronously) :若文档被更改,则内存中这部分数据设定为脏,并不立刻写回硬盘。可用 sync强制写入。关机前系统也会主动执行sync。
- 文件系统的简单操作
磁盘与目录的容量:df:列出已挂载的文件系统的整体磁盘使用量,这些信息被存在各文件系统的superblock中df [-ahikHTm] [目录或文件名]主要参数: -h以容易阅读的格式显示 -i不用硬盘容量而用inode数目表示
du:显示目录或文件所占磁盘空间du [iahskm] [目录名或者文件名]
主要参数:-a列出所有档案和目录容量 -s列出总量 -k-m以kb或者mb显示
实体链接(hard link)与符号链接(symbolic link):ln
实体链接是将一个文档指向源文档的inode,相当于两个文档同时指向一个inode,两文档属性权限完全一样。(不能跨文件系统,不能link目录)
符号链接实际上就是快捷方式。
ln:建立链接 ln [-sf] 来源文件 目标文件
如果不加任何参数表示hard link,加上-s表示symbolic link
-f表示如果目标文件存在,则直接移除再重建
link的数量体现在文件属性中。
- 磁盘的分区、格式化、检验与挂载
磁盘使用前,需要进行分区、格式化并且一定要挂载到某个目录下才能使用。
磁盘分区:fdisk
fdisk [-l] 装置名(装置名不应加上数字,因为是对整个磁盘操作)。 加上-l表示输出后面装置中所有分区信息,也可不加装置名,则输出所有分区信息。
不加-l的话,就可以对该装置进行分区操作。按m可显示指令列表,q不保存退出,w保存退出。
分区后,可用 partprobe命令让系统读取新的分区表。
磁盘格式化:mkfsmkfs [-t 文件系统格式] 装置文件名(这里应加上数字,因为格式化是对分区的操作) eg:mkfs -t ext4 /dev/sda5 (将sata硬盘第五分区格式化为ext4)
另外,可以在格式化之后,如果不按默认值来,就可以对ext分区进行mke2fs操作,指定文件系统的标签、block大小、inode数量等。
磁盘检验:fsck,badblocks
磁盘的挂载与卸载:mount,umount
linux中所有的文件系统,要被挂载到目录树中的某个目录之后才能访问。
单一文件系统不应该被重复挂载到不同目录;单一目录不应该重复挂载多个文件系统(但实际上可以,挂在新的文件系统会暂时屏蔽掉旧的文件系统);作为挂载点的目录应为空目录。
示例:eg:mount /dev/sda2 /home/test (将sda2这个文件系统挂载到/home/test的目录下,可以不加文件系统类型,可以自动识别)
对于挂载,可以先通过fdisk -l列出所有已安装的设备名,再通过mount来挂载。
卸载:umount 装置名或文件夹名
此外,还可以将目录挂载到另一个目录下:mount --bind 目录名 目录名:可将前一个目录挂载到后一个目录。
对根目录无法卸载,可以重新挂载: mount -o remount,rw,auto / ,比如修改/etc/fstab文档来改变系统默认挂载时出问题,则可进入单人维护模式执行该指令。
可用dumpe2fs -h /dev/hdc6的方式来查询文件系统的标签,并用 mount -L “前面查询到的标签” /目录 的方式来挂载。
mount -l可以查询当前挂载的设备。
磁盘参数修订:
mknod:用以修改文件系统的标号。
在linux中,所有的装置都用文档来表示,如/dev/sda1就表示了我的电脑的sata硬盘中的第一个分区,并且每个设备都有一个major和minor标号。
用ls -l在/dev下就可以查询到,通过mknod可以修改
e2label:每个文件系统都有一个标签(比如d盘的标签叫做“software”),该标签可用于挂载,优点是可以忽略设备插在哪个接口,缺点是重名会造成问题。
label名就用e2label来修改。
挂载点的意义 (mount point):每个文件系统(分区)必须链接到目录树上才能使用,这一过程称为挂载。
设定开机挂载:/etc/fstab文件中存储开机挂载信息。
loop挂载镜像文件:mount -o loop /root/centos5.2_x86_64.iso , 可以用类似方法制作一个大的文件来挂载到某个目录下
- swap建置和第六节不详细记录,见书