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

1、最传统的磁盘文件系统EXT2

    1.1 磁盘由圆形的盘片、机械手臂与机械手臂上的磁头、主轴马达,用于转动磁盘组成,物理上,以512bytes作为基本单位,称为扇区,一系列山区组成的一个圆叫做柱面,柱面是计算机操作系统进行分区的最小单位,第一个扇区(512bytes)最重要,里面放有硬盘主引导记录(MBR 446bytes)和分区表(partition table 64bytes),所谓磁盘分区表就是指记录一个分区包含哪些柱面,因此它记录的是开始和结束柱面的编号,因为大小限制,一块硬盘最多有4个主分区或扩展分区,其中扩展分区(只有一个)可以再分出逻辑分区,逻辑分区的多少受到操作系统的限制,linux下IDE硬盘可以分59个,sata硬盘可以分11个

    1.2 在分区结束后,需要对整个磁盘进行格式化处理,并不要以为格式化就是单纯的擦出原先的数据,它也包括写入操作系统管理磁盘的一系列数据,这样才能被操作系统识别。windows下支持的文件系统格式有FAT和NTFS等,linux下有EXT2、EXT3、EXT4等。因为一个分区只能被格式化为文件系统,因此我们经常把文件系统和分区划等号。但有时我们也可以将一个分区划分为多个文件系统,比如利用LVM技术等。通常我们说一个可挂载的数据为一个文件系统而不是一个分区。linux下,文件系统通常会将文件的权限和属性放在inode中存储,而将真正的数据放在block中,另外通过一个super block来管理整个分区或文件系统。每个文件会占用一个inode,inode中记录该文件的权限、属性、数据存放在那些block中等,通过查找block可以得到文件的数据,而super block记录着文件系统拥有的inode和block数量,使用量和剩余量,文件系统格式等信息。FAT格式将下一个block的地址放在前一个block中,形成了一个链表,这样做的维护费用比较低,但是查询效率比较低。目前的linux系统也支持这种文件系统。

   1.3 文件系统在进行格式化时就将inode和block制定好,除非重新进行格式化,否则inode和block不会改变。一个文件系统也会被划分成多个块组,每个块组类似与一个独立的文件系统方便管理。在前面提到,文件系统的最前面会有一个启动扇区,用于安装引导程序。在一个文件系统中,有以下一些区域:

        data block:数据块,用于存放数据,单位为1kb,2kb和4kb,在格式化时就固定其大小并编号,不同的单位会支持不同的文件大小,要注意,每个block内只能存放一个文件的数据,一个大于基本大小的文件会占用两个block并且剩下的空间也不能被用于存放别的数据文件。

        inode table:inode内记录着文件的访问模式、文件的所有者和用户组、文件大小、文件创建或状态改变的时间、最近一次读取时间、最近一次修改的时间、定义文件特性的标志、文件存放的block编号,一个inode只有128byte,如果一个文件使用了很多的block,这128byte肯定不够用,因此才有了12个直接、1个间接、1个双间接、1个三间接,直接的意思就是存放的就是block编号,简介的意思是虽然是编号,但是这些编号所指向的block存放的不是文件的数据,而是剩下的一些block编号,这样一来,一个文件的大小就可以很大,如果block单位是1kb的话,就可以有16gb这么大的文件!

        super block:记录block和inode的总量、使用量和未使用量、block的大小、文件系统的挂载时间、最近一次写入数据的时间、一个validbit数据,若已被挂载,这个值为0。super block只用一个,但在一个文件系统下的别的分组内可能也会有super  block,它们的作用是备份!

        file decription:描述每个分组的开始和结束的block号码

        block bitmap:用于记录那些已经使用了,哪些还没有被使用

        inode bitmap:注意当inode bitmap表示已经没有可用的inode时,你就无法在这个分区或文件系统下创建新的文件了

    dumpe2fs 设备文件名  --------------  显示superblock部分,可以查看文件系统的情况

    df   ----------------------------------------  显示当前挂载的设备,或文件系统

        

     1.4 目录树

    目录的作用是记录目录下的文件名,一个目录会得到一个inode 和至少一个block,inode记录目录的权限和属性,block记录文件名与文件名对应的inode的编号,以便查找文件。

    当我们创建一个文件的时候,ext2会分配一个inode 和相应数量的block给文件。

    inode本身并不会记录文件名,文件名记录在目录的block中,因此我们对文件有读写权限并不代表我们对这个文件可以进行改名操作,要想改名,必须对文件所在的文件夹有读写权限!

    1.5 ext3日至文件系统

    设想我们在进行文件操作时,计算机突然断电,内存中的数据没来得及放回到硬盘中或没来得及记录这一步操作,则会有数据的不一致状态,传统的文件系统会在开机时重新检测一遍硬盘,这样无疑会浪费大量的时间,因此有了后来的日至文件系统,用于记录每一步操作,之后系统就可以根据日志文件判断是否要对硬盘做什么。

    1.6 文件读如内存之后,若没有被修改会被标记为clean,若被修改了会被标记为dirty,系统会将标记为dirty的数据定时放回到硬盘,而在不断加载文件的过程中,无疑会占用过多的内存,这时可以使用sync命令将内存中的dirty手动放回到硬盘。

    1.7 挂载点一定是一个目录,而不是文件,这个目录为我们进入该文件系统的入口,因此不是说一个文件系统生成后就一定会使用,你必须将它挂载到一个目录下才能使用。

    1.8 linux中支持很多的文件系统,可以使用cat /proc/filesystems命令来查看加载到内存中的文件系统有哪些,那么这么多的文件系统,操作系统如何进行选择呢,答案是linux有VFS(虚拟文件系统)进行管理,而不需要用户手动指定文件系统的格式。

2 文件系统的操作

    2.1 df和du

    df:列出文件系统的整体磁盘使用量,如上

    du:评估文件系统的磁盘使用量

    2.2链接文件:ln

    linux下有特色的连接方式为硬连接,它可以产生新的文件名,而不是新文件,新文件的inode指向原文件的inode,只是在目录的block下多了一条记录而以,这样即使我们不小心删除了原文件,还可以通过该硬连接找到原先的文件,我们说的删除只是删除掉一些关于文件的记录,比如删除inode table记录,被block table记录以及目录block记录等。当我们使用ls命令去查看文件时,我们会发现inode的一行显示着多少文件连接到了这个inode,而这些文件都可以访问到同一数据。因此硬连接并不会增加inode 和block的用量。

    符号连接,symbolic link,可以和windows下的快捷方式画等号,创建这种连接方式时,会创建一个新的文件,而这个文件的数据会指向它连接的那个文件的文件名,因此当源文件被删除后,这个连接方式就会失效,因为操作系统无法通过你提供的文件名去查找到这个文件。

    可以使用ln命令来创建连接

    2.3 磁盘分格式化、检验和挂载

    fdisk 磁盘分区:因为是对磁盘进行分区,而不是对已经存在的文件系统进行分区操作,因此后面的参数是设备名称而不是文件系统名称,输入fdisk后再输入m,所有的操作都会显示在屏幕上

     使用p可以显示当前的分区情况,使用以上功能可以对磁盘进行简单的操作,最后使用q退出不保存!结束后可以使用partprobe命令让内核强制重新载入一次分区表。

    mkfs 格式化磁盘,-t属性之后可以跟文件系统类型,注意这里是对分区进行格式化因此最后的参数应该是分区而不是设备文件名。若想指定在格式化的同时,block的大小,分区名称等属性可以使用mke2fs命令进行。

    磁盘检验使用fsck和badblocks命令,fsck检验文件系统的破坏情况,而badblocks则用于检验硬件的破坏情况。

    磁盘挂载与卸载:mount与umount,光驱一旦挂载之后就无法退出,强制退出会出现问题,所以有时我们插入光盘后会发现弹出为灰色,只需要将其卸载就好了

4 设置开机挂载

    开机挂载文件放在/etc/fstab里,只需要修改这个文件就可以设置开机挂载,根目录首先被挂载,剩下的根据顺序依次在开机之后进行挂载

    特殊设备的loop挂载,比如我们在挂载光盘和DVD镜像文件时,我们不需要一定插入光盘才能挂载,可以通过loop设备进行挂载,比如mount -o loop /root/...iso /mnt/...这样就可以直接将iso文件挂载到/mnt/...上使用。

    有时为了解决分区不良问题,可以使用dd命令来创建大文件,然后格式化这个文件,再使用loop将其挂载到空目录下。使用swapon启动swap分区,使用swapoff关闭swap分区

猜你喜欢

转载自blog.csdn.net/killerstranger/article/details/81230708