Linux磁盘与文件系统

一、磁盘组成与分区

1. 磁盘组成

  • 圆形盘片:记录数据的部分;

  • 机械手臂与在机械手臂上的磁头:可读写盘片上的数据;

  • 主轴马达:可以转动盘片,让机械手臂的磁头在盘片上读写数据;

2. 盘片组成

  • 扇区(Sector):最小的物理存储单位,依据磁盘设计不同,目前主要有512Bytes与4K两种格式;

  • 柱面(Cylinder):将扇区围成一个圆;

  • 早期的最小分区单位为柱面,现在的最小分区单位为扇区;

  • 磁盘分区的两种格式:MBR(限制较多),GPT(限制较少);

  • MBR分区表:第一个扇区有主要开机区(Master boot record,MBR)、分区表(partition table),MBR占用446Bytes,partition table占用64Bytes;

  • GPT分区表除了分区数量扩充较多之外,支持的磁盘容量也可以超过2TB;

3. 磁盘文件名

  • 实体磁盘:/dev/sd[a-p] [1-128];

  • 虚拟磁盘:/dev/vd[a-p] [1-128];

二、文件系统特性

1. 索引式文件系统

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

  • inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的 block 号码;

  • block:实际记录文件的内容,若文件太大时,会占用多个 block 。

  • 该文件系统为索引式文件系统;

2. 磁盘重组

  • 文件写入的 block 太过于离散了,此时文件读取的性能将会变的很差,可以通过磁盘重组将同一个文件所属的blocks汇整在一起,提高文件读取性能;

三、Linux的EXT2文件系统

1. data block

  • ext2文件系统支持的block大小有1K、2K、4K三种

    block大小1KB2KB4KB
    最大单一文件限制16GB256GB2TB
    最大文件系统总容量2TB8TB16TB
  • 原则上block的大小与数量在格式化完后就不能再改变了;

  • 每个block内最多只能放置一个文件的数据,文件大于block大小,一个文件会占用多个block数量,文件小于block,该block的剩余容量不能再被使用;

2. inode table

  • inode记录的文件数据:

    • 该文件的存取模式(r/w/x);

    • 该文件的拥有者与群组(owner/group);

    • 该文件的容量;

    • 该文件创建或状态改变的是时间(ctime);

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

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

    • 定义文件特性的旗标(flag);

    • 该文件真正内容的指向(pointer);

  • 每个inode大小为固定的128Bytes(新的ext4与xfs可设置到256Bytes);

  • 每个文件都仅会占用一个inode;

  • 系统读取文件时需要先找到inode,并分析inode所记录的权限与使用者是否符合,若符合才能够开始实际读取block的内容;

  • 间接指向block就是再拿一个block来当作记录block号码的记录区,如果文件太大时就会使用间接的block来记录号码;

3. superblock

  • superblock记录的信息:

    • block与inode的总量;

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

    • block与inode的大小(block为1,2,4K,inode为128Bytes或256Bytes);

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

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

  • 每个block group都可能含有superblock,除第一个以外其他的都是第一个的备份;

4. Filesystem Description

  • 描述每个block group的开始与结束的block号码,以及说明每个区段 (superblock, bitmap, inodemap, data block) 分别介于哪一个block号码之间;

5. block bitmap

  • 记录的是使用与未使用的block号码;

6. inode bitmap

  • 记录使用与未使用的inode号码;

7. dump2fs

  • 查询Ext家族superblock信息的指令;

    dumpe2fs [-bh] 设备文件名
    -b:列出保留为坏轨的部分;
    -h:仅列出superblock的数据,不会列出其他的区段内容;

四、目录树

1. 目录

  • 创建一个目录时,文件系统会分配一个inode与至少一块block给该目录;

  • inode记录该目录的相关权限与属性,并可记录分配到的那块block 号码;

  • block记录在这个目录下的文件名与该文件名占用的inode号码数据;

2. 文件

  • 创建一个一般文件时,文件系统会分配一个inode与相对于该文件大小的block数量给该文件;

3. 目录树读取

  • 目录树是由根目录开始读起,系统通过挂载的信息可以找到挂载点的 inode号码,此时就能够得到根目录的inode内容,并依据该inode 读取根目录的block内的文件名数据,再一层一层的往下读到正确的文件名;

五、文件的读取

1. 新增文件的步骤

  • 先确定使用者对于欲新增文件的目录是否具有w与x的权限,若有的话才能新增;

  • 根据inode bitmap找到没有使用的inode号码,并将新文件的权限/属性写入;

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

  • 将刚刚写入的inode与block数据同步更新inode bitmap与block bitmap,并更新superblock的内容;

2. 数据不一致状态

  • metadata:中介数据,superblock, inode bitmap 及 block bitmap 的数据;

  • 文件在写入文件系统时,因为不知名原因导致系统中断,写入的数据仅有inode table及data block,最后一个同步更新中介数据的步骤没有做完,此时就会发生metadata的内容与实际数据存放区产生不一致;

  • 早期通过开机检查解决;

3. 日志式文件系统

  • 预备:当系统要写入一个文件时,会先在日志记录区块中纪录某个文件准备要写入的信息;

  • 实际写入:开始写入文件的权限与数据;开始更新 metadata 的数据;

  • 结束:完成数据与 metadata 的更新后,在日志记录区块当中完成该文件的纪录。

六、文件系统的运行

  • 当系统载入一个文件到内存后,如果该文件没有被更动过,则在内存区段的文件数据会被设置为干净(clean)的;

  • 如果内存中的文件数据被更改过了,此时该内存中的数据会被设置为脏的 (Dirty);

  • 此时所有的动作都还在内存中执行,并没有写入到磁盘中;系统会不定时的将内存中设置为“Dirty”的数据写回磁盘,以保持磁盘与内存数据的一致性。;

  • 可以用sync指令来手动强迫写入磁盘;

  • 系统会将常用的文件数据放置到内存的缓冲区,以加速文件系统的读/写,因此 Linux 的实体内存最后都会被用光是正常的情况,可加速系统性能;

  • 若正常关机时,关机指令会主动调用sync来将内存的数据回写入磁盘内;

  • 但若不正常关机(如跳电、死机或其他不明原因)由于数据尚未回写到磁盘内,因此重新开机后可能会花很多时间在进行磁盘检验,甚至可能导致文件系统的损毁(非磁盘损毁);

七、挂载点的意义

  • 挂载:将文件系统与目录树结合的动作;

  • 挂载点:进入该文件系统的入口的一个目录;

八、Linux支持的文件系统

1. 传统文件系统

  • ext2 / minix / MS-DOS / FAT (用 vfat 模块) / iso9660 (光盘)等等;

2. 日志式文件系统

  • ext3 /ext4 / ReiserFS / Windows' NTFS / IBM's JFS / SGI's XFS / ZFS;

3. 网络文件系统

  • NFS / SMBFS;

4. Linux VFS

  • Virtual Filesystem Switch管理Linux认识的文件系统;

九、XFS文件系统

1. 数据区

  • 类似于ext的block group,分为多个储存区群组来分别放置文件系统需要的数据;

  • 每个储存区群组都包含:整个文件系统的superblock、剩余空间的管理机制、inode的分配与追踪;

  • inode与block都是系统需要用到时动态配置产生;

  • inode与block有多种不同的容量可供设置;

2. 文件系统活动登录区

  • 主要被用来纪录文件系统的变化,系统所有动作的时候都会在这个区块做个纪录;

  • 可以指定外部的磁盘来作为 xfs 文件系统的日志区块;

3. 实时运行区

  • 当有文件要被创建时,xfs 会在这个区段里面找一个到数个的extent 区块,将文件放置在这个区块内,等到分配完毕后,再写入到data section的inode与block去;

  • extent 区块的大小得要在格式化的时候就先指定,最小值是 4K 最大可到 1G;

4. XFS文件系统的描述数据观察

xfs_info 挂载点|设备文件名

十、文件系统的简单操作

1. 磁盘与目录的容量

  • 列出文件系统的整体磁盘使用量

    df [-ahikHTm] [目录或文件名]
    -a:列出所有的文件系统,包括系统特有的/proc等文件系统;
    -k:以KBytes的容量显示各文件系统;
    -m:以MBytes的容量显示各文件系统;
    -h:以人们较易阅读的GBytes,MBytes,KBytes等格式自行显示;
    -H:以M=1000K取代M=1024K的进位方式;
    -T:连同该partition的filesystem名称(例如 xfs)也列出;
    -i:不用磁盘容量,而以inode的数量来显示;
  • 评估文件系统的磁盘使用量

    du [-ahskm] 文件或目录名称
    -a:列出所有的文件与目录容量,因为默认仅统计目录下面的文件量而已;
    -h:以人们较易读的容量格式 (G/M) 显示;
    -s:列出总量而已,而不列出每个各别的目录占用容量;
    -S:不包括子目录下的总计,与 -s 有点差别。
    -k:以 KBytes 列出容量显示;
    -m:以 MBytes 列出容量显示;

2. 实体链接与符号链接

  • Hard Link:在某个目录下新增一笔文件名链接到某inode号码的关联记录,不能跨文件系统,不能link目录;

  • Sysmbolic Link:创建一个独立的文件,而这个文件会让数据的读取指向他 link 的那个文件的文件名;

ln [-sf] 来源文件 目标文件
-s:如果不加任何参数就进行链接,那就是hard link,-s就是symbolic link;
-f:如果目标文件存在时,就主动的将目标文件直接移除后再创建;
  • 新的目录的 link 数为 2 ,而上层目录的 link 数则会增加 1;

十一、磁盘分区、格式化、检验与挂载

1. 观察磁盘分区状态

  • 列出系统上的磁盘列表

    lsblk [-dfimpt] [device]
    -d:仅列出磁盘本身,并不会列出该磁盘的分区数据;
    -f:同时列出该磁盘内的文件系统名称;
    -i:使用ASCII的线段输出,不要使用复杂的编码(再某些环境下很有用);
    -m:同时输出该设备在/dev下面的权限数据(rwx 的数据);
    -p:列出该设备的完整文件名,而不是仅列出最后的名字而已;
    -t:列出该磁盘设备的详细数据,包括磁盘伫列机制、预读写的数据量大小等;
  • 列出设备的UUID等参数

    blkid
  • 列出磁盘分区表类型与分区信息

    parted device_name print

2. 磁盘分区

  • GPT分区表使用gdisk;

  • MBR分区表使用fdisk分区;

3. 磁盘格式化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值