您的位置:首页 > 运维架构 > Linux

Linux学习笔记(八)——Linux磁盘与文件系统管理

2015-07-03 15:50 543 查看
1) 每种操作系统所设定的文件属性/权限并不相同, 为了存放这些档案所需的数据,因此就需要将分割槽进行格式化,以成为操作系统能够利用的『文件系统格式(filesystem)』。

2) Linux的正统文件系统则为Ext2 (Linux second extended file system, ext2fs)。

3) 每个 inode 与 block 都有编号,意义如下:

a) superblock:记录此 filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;

b) inode:记录档案的属性,一个档案占用一个inode,同时记录此档案的数据所在的 block 号码;

c) block:实际记录档案的内容,若档案太大时,会占用多个block 。

d) 这种数据存取的方法我们称为索引式文件系统(indexed allocation)。

e)

4) EXT2文件系统

a) 文件系统一开始就将inode和block规划好了,不会变动,除非重新格式化。

b) 因此 Ext2 文件系统在格式化的时候基本上是区分为多个区块群组(block group)的,每个区块群组都有独立的 inode/block/superblock 系统。

c)

d) 文件系统最前面有一个启动扇区(boot sector),可以安装开机管理程序,如此一来,可以将不同的开机管理程序安装到个别的文件系统最前端,而不用覆盖整颗硬盘的MBR,来实现多重引导。

5) datablock (资料区块)

用来存放档案内容,etx2支持的block大小有1K,2K,4K三种。格式化时block大小已经确定,并且编号。

基本限制如下:

a) 原则上,block 的大小与数量在格式化完就不能够再改变了(除非重新格式化);

b) 每个 block 内最多只能够放置一个档案的数据;

c) 档案大于block 的大小,则一个档案占用多个 block 数量;

d) 若档案小于block ,则该 block 的剩余容量就不能够再被使用了(磁盘空间会浪费)。

6) inodetable (inode 表格)

记录档案的属性以及内容存放于哪一个block。

记录的档案数据至少如下:

a) 该档案的存取模式(read/write/excute);

b) 该档案的所有者与群组(owner/group);

c) 该档案的容量;

d) 该档案建立或状忞改变的时间(ctime);

e) 最近一次的读取时间(atime);

f) 最近修改的时间(mtime);

g) 定义档案特性的旗标(flag),如 SetUID...;

h) 该档案真正内容的指向 (pointer);

inode的特征:

a) 每个 inode 大小均固定为 128 bytes;

b) 每个档案都仅会占用一个 inode 而已;

c) 承上,因此文件系统能够建立的档案数量与 inode 的数量有关;

d) 系统读取档案时需要先找到 inode,并分析 inode 所记录的权限与用户是否符合,若符合才能够开始实际读取 block 的内容。

node记录block号码的区域定义为12个直接,一个间接, 一个双间接与一个三间接记录区。

7) Superblock(超级区块)

Superblock 记录整个 filesystem 相关信息,如下:

a) block与 inode 的总量;

b) 未使用与已使用的 inode / block 数量;

c) block与inode大小(block为 1, 2, 4K,inode为 128 bytes);

d) filesystem的挂载时间、最近一次写入数据的时间、最近一次检验磁盘 (fsck) 的时间等文件系统的相关信息;

e) 一个 valid bit 数值,若此文件系统已被挂载,则 valid bit 为 0 ,若未被挂载,则 valid bit 为 1 。

8) 与目录树关系

a) 在ext2文件系统中创建一个目录时,ext2会分配一个inode和至少一个block块给该目录。其中inode记录该目录的相关权限和属性,以及block号,而block则是记录该目录下的文件名和该文件名对应的inode号。

b) 在ext2文件系统中创建一个档案时,ext2会分配一个inode与相对于该档案大小的block的数量给该档案。

c) 目录树读取:读取档案→经过目录的inode和block→权限检测→从block中读出档案的inode号→……→读取该档案。

d)

e) #df #查询目录树与装置的对应关系及相关信息

9) ext2中新增档案

新增档案或目录需要block bitmap和inode bitmap。

a) 先确定用户对新增的档案的目录是否具有w和x权限,若有的话才能新增。

b) 根据inode bitmap找到没有使用的inode号,并将档案的权限和属性写入。

c) 根据block bitmap找到没有使用的block号,并将实际的数据写入block中,且更新inode的block指向数据。

d) 将刚刚写入的inode和block数据同步到inodebitmap和block bitmap中,并更新superblock的内容。

inode table和data block称为数据存放区域,superblock、inode bitmap、block bitmap称为中介数据,因为每次增删改都会影响这三部分的数据。

10) 日志式文件系统 (Journaling filesystem)

从ext2升级到ext3之后,可以获得一个强有力的日志式文件系统,意味着从系统中止到快速重新复原而不是持续的等e2fsck执行长时间的修复。

11) Linux文件系统的运作

当系统加载一个档案到内存之后,如果这个档案没有被变动过,则在内存区段的档案数据会被设定为干净的(clean)。但如果有变动(例如用vi编辑过)此时该内存中的数据会被设定为脏的(dirty),此时所有的动作还在内存中进行,并没有写入磁盘中,系统会不定时的将内存中设定为dirty的数据写回磁盘,以保持磁盘与内存数据的一致性。

每个 filesystem 都有独立的 inode / block / superblock 等信息,这个文件系统要能够链接到目录树才能被我们使用。 将文件系统与目录树结合的动作我们称为『挂载』。

挂载点一定是目录,该目录为进入该文件系统的入口。

3个挂在点/ /boot /home,分别对应3个装置文件名/dev/sda2,/dev/sda1,/dev/sda3, 由于 filesystem 最顶层的目录inode 一般为 2 号,因此可以发现/, /boot, /home 为三个不同的 filesystem。

Linux系统由VFS(Virtual Filesystem Switch)来管理filesystem。

12) 文件系统简单操作

a) #df 列出整个文件系统的磁盘使用情况

b) #du 评估文件系统的磁盘使用量(常用来评估目录)

c) Linux下的连接挡有两种,一种是类似windows的快捷方式功能的档案,可以让你快速的链接到目标档案或目录。另一种是透过文件系统的inode连接来产生新档名,而不是新档案,这种称为实体链接(hard link)。

d) #ln源文件 目标文件

两个文件的所有信息都一样,inode都是1912701,第二个字段由1变为了2,说明有2个档案名链接到了这个inode。

不论使用哪个【档案】来编辑,最终的结果都会写入相同的inode与block中,因此均能进行数据的修改。

使用 hard link 设定链接文件时,磁盘的空间与 inode 的数目都不会改变!

e) hardlink不能跨filesystem,也不能link目录。

f) SymbolicLink (符号链接,亦即是快捷方式)

由上图我们发现,两个档案指向不同的inode号码,当然就是两个独立的档案存在了,而且链接挡的重要内容就是写上目标档的【文件名】。

由 Symboliclink 所建立的档案为一个独立的新档案,所以会占用掉 inode 与block 的空间。

g) 创建链接档

#ln [-sf] 源文件 目标文件

h) 目录link数量

当我们建立新的目录时,新的目录link为2,而上层目录的link树则会增加1。

13) 磁盘分区:fdisk

#fdisk [-l] 装置名称(注意不要有数字)

建立分割槽会有如下几种情况:

a) 1-4号尚有剩余,且系统未有extended: 此时会出现让你选择 Primary / Extended 的项目,且你可以指定 1~4 号间的号码;

b) 1-4号尚有剩余,且系统有extended: 此时会出现让你选择 Primary / Logical 的项目;若选择 p 则你还需要指定 1~4 号间的号码; 若选择 l(L的小写) 则不需要设定号码,因为系统会自动指定逻辑分割槽的文件名号码;

c) 1-4没有剩余,且系统有extended: 此时不会让你选择分割槽类型,直接会进入 logical 的分割槽形式。

磁盘格式化: #mkfs [–t 系统文件格式] 装置名

磁盘检查:#fsck 装置名称

磁盘挂载前,先确定如下几点:

a) 单一的文件系统不应该被重复的挂载在不同的挂载点(目录)中;

b) 单一目录不应该重复挂载多个文件系统;

c) 要作为挂载点的目录,理论上应该是空目录;

#mount 装置文件名挂载点

#mount –l 查看[已挂载]的文件系统

#mount –o remount,rw,auto / 重新挂载根目录

#umount [-fn] 装置文件名或挂载点 卸除装置档案

#dumpe2fs –h /dev/sda2 查询文件系统标头(label)

开机即挂载文件系统,要修改/etc/fstab,但是有如下限制:

a) 根目录/是必项挂载的﹐而且要先于其它mount point 被挂载。

b) 其它 mount point 必项为已建立的目录﹐可任意指定﹐但一定要遵守必须的系统目录架构原则

c) 所有 mount point 在同一时间只内﹐只能挂载一次。

d) 所有 partition 在同一时间之内﹐只能挂载一次。

e) 若卸除﹐必项先将工作目录移到mount point(及其子目录)之外。

f) 设定完毕后,务必用mount –a 测试语法正确与否。

建立大档案以制作 loop 装置档案,然后将此档案挂载,可以在无法再建立实体分割槽时使用。

fdisk无法支持2TB以上的分割槽,需要parted来处理。

#parted [装置] [指令[参数]]

14) 总结

a) 需要碎片整理的原因就是档案写入的 block 太过于离散了,此时档案读取的效能将会变的很差所致。 这个时候可以透过碎片整理将同一个档案所属的 blocks 汇整在一起。

b) 磁盘的使用必须要进过:分割、格式化、挂载,惯用的指令为:fdisk,mkfs,mount

c) 删除分割槽时需要注意以下4点

d) 1.用[df]查看分割槽是否被挂载,若被挂载,需先卸载[umount]

e) 2.如果是swap分割槽,需要先以[swapon -s]找出被使用的分割槽,然后用[swapoff]关掉,然后再删除分割槽。

f) 3.[fdisk]存在[-l]参数时只有展示功能,无法增删改分割槽。

g) 4.由于逻辑分割槽是从5开始连续编号的,故删除的时候应该从最大编号的分割槽开始删除。

------以上整理总结自鸟哥的Linux私房菜
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: