七、Linux磁盘与文件系统管理

1、认识EXT2文件系统

1.1、硬盘组成与分割的复习

1)磁盘组成主要有:
圆形的磁盘盘(主要记录数据的部分)
机械手臂,与在机械手臂上的磁盘读取头(可擦写磁盘盘上的数据)
主轴马达,可以转动磁盘盘,让机械手臂的读取头在磁盘盘上读取数据;
2)扇区为最小的物理单位,每个扇区为512bytes;
将扇区组成一个圆,那就是磁柱,磁柱是分割槽的最小单位;
每一个扇区最重要,里面有:主要开机区MBR以及分割表,其中MBR占有446bytes,分割表占有64bytes;
3)各种接口的磁盘在Linux中的文件名为:
/dev/sd[a-p][1-15]:为SCSI,SATA,USB,Flash随身碟等
/dev/hd[a-d][1-63]:为IDE接口的磁盘文件名;

1.2、文件系统特性:索引式文件系统

1)磁盘分区完毕后需要进行格式化,之后操作系统才能够使用这个分割槽。因为每种操作系统所设定的文件属性/权限不同,为了存档档案所需要的数据,所以需要将磁盘格式化,以成为操作系统能够利用的文件系统格式(filesystem);
例如:Windos98以前的微软操作系统主要利用的文件系统是FAT(或者FAT16),windows2000以后的版本有所谓的NTFS文件系统,而Linux的正统文件系统为Ext2。此外,默认情况下,windows操作系统是不会认识Linux的Ext2的;
传统磁盘一个分割槽只能够被格式化称为一个文件系统,但现在我们通常可以称呼一个可被挂在的数据为一个文件系统而不是一个分割槽;
2)索引式文件系统运作过程(Linux系统)
Linux操作系统将档案实际内容和档案属性分别放置在两个不同的地方,权限与属性放置到inode中,至于实际数据则放置到data block区块中,另外还有一个超级区块(superblock)会记录整个文件系统的整体信息,包括inode与block的总量、使用量、剩余量等;

  • superblock:记录此filesystem的整体信息,包括inode/block的总量、使用量、剩余量以及文件系统的格式与相关信息;
  • inode:记录档案属性,一个档案占用一个inode,同时记录此档案的数据所在的block号码;
  • block:实际记录档案的内容,若档案太大时,会占用多个block;
    每个inode和block都有编号,而每个档案都会占用一个inode,inode内则有档案数据放置的block号码,当然也能够读出该档案的实际数据了;这种数据存储的方法称为索引式文件系统;
  • 注:磁盘碎片整理的原因就是档案写入的block太过于离散了,此时档案读取的效能将会变得很差所致,这个时候可以透过碎片整理将同一档案所属的blocks汇整在一起,这样数据的读取会比较容易;故Linux一般不需要碎片整理

1.3、Linux的EXT2文件系统(inode):data block,inode table,superblock,dumpe2fs

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

  • data block(资料区块)
    data block是用来放置档案内容数据的地方,在Ext2文件系统中所支持的block大小有1k,2k及4k三种。
    block限制:
    原则上block的大小和数量在格式化完就不能够再改变了(除非重新格式化);
    每个block内最多只能够放置一个档案的数据;
    如果档案内容大于block的大小,则一个档案会占用多个block数量;
    如果档案内容消息block的大小,改block的剩余容量就不能够在使用了(磁盘空间浪费);
Block大小 1KB 2KB 4KB
最大单一档案限制 16GB 256GB 2TB
最大文件系统总容量 2TB 8TB 16TB
  • inode的内容记录档案的属性以及该档案实际数据是放置在哪些block内。基本上,inode记录的档案数据至少有以下内容:
    1、 该档案的存取模式;
    2、该档案的拥有者和群组;
    3、该档案容量;
    4、该档案建立或状态改变的时间;
    5、最近一次读取的时间;
    6、最近修改的时间;
    7、该档案真正内容的指向;
    注意:
    1、每个indoe大小固定为128bytes;
    2、每个档案都仅会占用一个inode而已;
    3、文件系统能够建立的档案数量与inode的数量有关;
    4、系统读取档案时需要先找到inode,并分析inode所记录的权限与用户是否符合,若符合才能够开始实际读取block的内容;
  • Superblock(超级区块)
    记录整个filesystem相关信息的地方,没有Superblock,就没有这个filesystem了。主要记录信息如下:
    1、block与inode总量;
    2、未使用与已使用inode/block数量;
    3、block与inode的大小(block为1,2,4kb,inode为128bytes);
    4、filesystem的挂载时间,最近一次写入数据的时间,最近一次检验磁盘的时间等的文件系统相关信息;
    5、一个valid bit数值,若次文件系统被挂载,则valid bit为0,若未被挂载,则valid bit为1;
  • Flilesystem Description (文件系统描述说明)
    这个区块可以描述每个block group的开始与结束的block号码,以及说明每个区块分别介于哪一个block号码之间;
  • block bitmap(区块对照表)
    block bitmap可以知道哪些block是空的
  • inode bitmap(inode对照表)
    inode bitmap可以知道哪些inode未使用;

1.4、与目录树关系

Linux系统下,每个档案都会占用一个inode,且可依据档案内容的大小来分配多个block给该档案使用;

  • 目录
    当我们在Linux的ext2文件系统建立一个目录时,ext2会分配一个inode与至少一块block给该目录。其中inode记录该目录的相关权限与属性,并可记录分配到的那块block号码,而block则是记录这个目录下的文件名与该文件名占用的inode号码数据。
  • 档案
    我们在Linux下的ext2建立一个一般档案时,ext2会分配一个inode与相对于该档案大小的block数量给该档案。
  • 目录树读取
    当我们读取某个档案时,就务必会经过目录的inode和block,然后找到那个待读取档案的inode号码,最终才会读取到正确的档案的block内的数据。
  • filesystems大小与磁盘读取效能
    虽然我们的 ext2 在 inode 处已经将该档案所记录的 block 号码都记上了, 所以资料可以 一次性读取,但是如果档案真的太过离散,确实还是会发生读取效率低落的问题。 因为磁盘读取头还 是得要在整个文件系统中来来去去的频繁读取! 果真如此,那举可以将整个 filesystme 内的数据全部 复制出来,将该 filesystem 重新格式化, 再将数据给他复制回去即可解决这个问题。

1.5、EXT2/EXT3档案的存取与日志式文件系统的功能

新建一个档案或目录时,Ext2处理过程:

  1. 先确定用户对于新增档案的目录是否具有w和x的权限,若有的话才新增;
  2. 根据inode bitmap找到没有使用的inode号码,并将新档案的权限/属性写入;
  3. 根据blockbitmap找到没有使用的block号码,并将实际的数据写入block中,且更新inode的block指向数据;
  4. 将刚刚蟹肉的inode与block数据同步更新到inode bitmap和block bitmap中,并更新superblock的内容;
    一般来说,我们将inode table与data block称为数据存放区域,其他如superblock,inode bitmap等区块称为metadata(中介资料);
  • 数据的不一致状态
    metadata的内容与实际数据存放区产生不一致的情况
  • 日志式文件系统
    1、预备:当系统要写入一个档案时,会现在日志记录区块中记录某个档案准备要写入的信息;
    2、实际写入:开始写入档案的权限和数据,开始更新metadata的数据;
    3、结束:完成数据与metadata的数据更新后,在日志记录区块完成该档案的记录;

1.6、Linux文件系统的运作

异步处理:解决磁盘写入的速度要比内存慢很多,耗时在等待硬盘的写入/读取上的问题
当系统加载一个档案到内存后,如果该档案没有被更动过,则在内存区段的档案数据会被设定为干净的(clean)。但如果内容中的数据被更改过了,此时内容中的数据会被设定为脏的(dirty)。此时所有的动作都还在内容中执行,并没有写入到磁盘中,系统会不定时的将内存中设定为脏(dirty)的数据写入到磁盘中,以保证磁盘与内容数据的一致性;

1.7、挂载点的意义

挂载:将文件系统与目录树结合的动作;
重点:挂载点一定是目录,该目录为进入该文件系统的入口。因此并不是你有任何文件系统都能使用,必须要挂载到目录树的某个目录后,才能够使用该文件系统的。

1.8、其他Linux支持的文件系统与VFS

常见的文件系统有:

  • 传统文件系统:ext2/minix/MS-DOS/FAT/iso9660(光盘)
  • 日志式文件系统:ext3/ReiserFS/Windows NTFS/IBM's JFS
  • 网络文件系统:NFS/SMBFS
    虚拟档案系统VFS用于管理filesystem,省去我们需要自行设定读取文件系统的定义;

2、文件系统简单操作

2.1、磁盘与目录的容量:df,du

  • df:列出文件系统的整体磁盘容量;
    df 【-ahikHTM】目录或文件名
    由于df主要读取的数据几乎都是针对一着整个文件系统,因此读取的范围主要是Superblock内的信息,所以这个指令显示结果的速度会非常的快。在显示的结果中要特别注意那个根目录的剩余容量,因为我们所有的数据都是由根目录衍生出来的,因此当根目录剩余容量为0时,Linux可能就问题很大了。
  • du:评估文件系统的磁盘使用量(常用在推估目录所占容量)
    du 【-ahskm】档案或目录名称
    与df不一样的是,du这个指令其实会直接到文件系统内去搜寻所有的档案数据,所以du指令运作会执行一小段时间,默认情况下,容量的输出是以KB来设计的;

2.2、实体链接与符号链接:ln

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

  • Hard Link(实体链接,硬式链接或实际链接)
    hard link只是在某个目录下新增一笔档名链接到某inode号码的关联记录而已;
    一般来说,hard link只是在某个目录下的block多写入一个关联数据而已,既不会增加inode也不会耗用block数量;
  • Symbolic Link(符号链接,亦即快捷方式)
    Symbolic Link就是建立一个独立的档案,而这个档案会让数据读取指向他link的那个档案的档名。由于只是利用档案来做为指向的动作,所以,当来源档被删除后,symbolic link的档案就会开不了。
  • ln 【-sf】来源文件 目标文件
    -s:如果不加入任何参数就进行链接,那就是hard link,而-s就是symbolic link;
    -f:如果目标文件存在时,就主动的将目标文件直接移除后再建立;

3、磁盘的分割、格式化、检验与挂载

如果想在系统新增一颗硬盘,需要:
1、对磁盘进行分割,建立可用的patition;
2、对partition进行格式化,已建立系统可用filesystem;
3、若想要仔细一点,则可对刚刚建立好的filesystem进行检验;
4、在Linux系统上,需要建立挂载点(亦即目录),并将它挂载上来;

3.1、磁盘分区:fdisk,partprobe

磁盘分区:fdisk
fdisk 【-l】 装置名称

  • 删除磁盘分区槽
  • 新增磁盘分区槽
  • 操作环境说明
    以 root 的身份进行硬盘的partition 时,最好是在单人维护模式底下比较安全一些, 此外,在迚行 fdisk 的时候,如果该硬盘某个 partition 还在使用当中, 那么很有可能系统核心会无法重载硬盘的 partition table ,解决的方法就是将该使用中的 partition 给他卸除,然后再重新进入 fdisk 一遍,重 新写入 partition table ,那举就可以成功啰!

3.2、磁盘格式化:mkfs,mke2fs

  • mkfs:(make filesystem)
    mkfs 【-t 文件系统格式】 装置文件名
  • mke2fs
    mke2fs 【-b block大小】【-i block大小】【-L 标头】【-cj】 装置

3.3、磁盘检验:fsck,badblocks

  • fsck:用来检查不修正文件系统错诨癿挃令
    fsck 【-t 文件系统】【-ACay】装置名称
  • badblocks:用来检查硬盘戒软盘扂区有没有 坏轨癿挃令
    badblocks -【svw】装置名称

3.4、磁盘挂载与卸除:mount,umount

挂载前确认:
1、单一文件系统不应该被重复挂载在不同的挂载点;
2、单一目录不应该重复挂载多个文件系统;
3、要作为挂载点的目录,理论上应该是空目录才是;

  • mount:挂载
    mount -a
    1、 挂载Ext2/Ext3文件系统
    mount 装置文件名 挂载点
    2、 挂载CD或DVD光盘
    3、格式化与挂载软盘
    4、挂载随身碟
    5、重新挂载根目录与挂载不特定目录
  • umount:将装置档案卸除
    umount 【-fn】装置文件名或挂载点
    使用Label name进行挂载

3.5、磁盘参数修订:mknod,e2label,tune2fs,hdparm

-mknod
mknod 装置文件名 【bcp】【Major】【Minor】
-e2label
e2label 装置名称 新的label名称

  • tune2fs
    tunes2fs 【-jlL】装置代号
  • hdparm
    hdparm 【-icdmXTt】装置名称

4、设定开机挂载

4.1、开机挂载/etc/fstab及/etc/mtab

开机挂载,修改/etc/fstab文件。限制
1、根目录/是必须挂载的,而且一定要先于其他mount point被挂载进来;
2、其他mount point必须为已建立的目录,可任意指定,但一定要遵守必须的系统目录架构;
3、所有的mount point在同一时间内,只能挂载一次;
4、所有patition在同一时间之内,只能挂载一次;
5、如若进行卸除,必须先将工作目录移到mount point(及其子目录)之外;
cat /etc/fstab

  • 磁盘装置文件名或该装置的Label;
  • 挂载点(mount point);
  • 磁盘分区槽的文件系统;
  • 文件系统参数;
  • 能够被dump备份指令作用;
  • 是否以fsck检验扇区;

4.2、特殊装置loop挂载(映像档不刻录就挂载使用)

  • 挂载光盘/DVD映像文件;
  • 建立大档案以制作loop装置档案;

5、内存置换空间(swap)之建制

swap的功能就是在应付物理内存不足的情况下所造成的内存延伸记录功能。
CPU读取的数据都来自于内存,当内存不足的时候,为了让后续的程序可以正常的运作,因此在内存中暂不使用的程序和数据就会被挪到swap中了。此时内存就会空出来给需要执行的程序加载。

5.1、使用实体分割槽建制swap

步骤:
1、分割:先使用fdisk在你的磁盘中分割一个分割槽给系统swap。由于Linux的fdisk预设会将分割槽的ID设定为Linux的文件系统,所以可能还得要设定一下system ID;

2、格式化:利用加你的swap格式的mkswap 装置文件名就能够格式化该分割槽称为swap格式;
3、使用:将swap装置启动,swapon 装置文件名
4、观察:透过free来观察内存容量;

5.2、使用档案建制swap

1、使用dd来新增一个128MB的档案在/tmp底下;
2、使用mkswap将/tmp/swap这个文件格式化为swap的文件格式;
3、使用swapon启动/tmp/swap;

5.3、swap使用上的限制

在核心 2.4.10 版本以后,单一 swap 量已经没有 2GB 的限制了,
但是,最多还是仅能建立到 32 个 swap的数量!
而且,由于目前 x86_64 (64 位) 最大内存寻址到 64GB, 因此, swap 总量最大也是仅能达64GB 就是了!

6、文件系统的特殊观察与操作

6.1、boot sector 与superblock的关系

6.2、磁盘空间之浪费问题

6.3、利用GNU的parted进行分割行为

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容