Linux磁盘和文件系统管理

mac2022-07-05  31

文件系统的组成

Linux文件系统(filesystem)组成        superblock:记录整个文件系统的信息,包括inode、block的总量、使用量、剩余量,以及文件系统的格式和其他相关信息        inode:记录文件或者目录的属性和数据所在的block号码,一个文件或者目录占用一个inode        block:记录文件的实际数据        inode和block都会有相应的唯一编号,inode中存储有文件数据存放的block号码,这种数据存取的方式成为索引式文件系统。        FAT格式,每个block都会存放下一个block号码,当存放数据的block太过离散,就会使得文件读取时间增加。碎片整理就是将离散的文件数据整理在一起提高文件读取效率        EXT2将文件系统分为多个区块群组(block group),每个区块群组有独立的superblock/inode/block。文件系统的最前端有一个Boot Sector,用来存放开机引导程序        

       data block        datablock的ETX2文件系统中大小主要有种:1K、2K、4K,在文件系统创建时大小就已经确定了        

block大小 1K 2K 4K 单一文件最大容量 16GB 256GB 2T 文件系统最大容量 2T 8T 16T                1、block大小和数量在文件系统建立后不能改变,除非重新格式化                2、每个block只能存放一个文件的数据                3、当文件大小超过block大小,则会占用多个block                4、被使用的block内的剩余空间不能再被使用,所以文件所占用的存储空间一般大于文件实际大小,造成空间浪费,尤其是小文件

       inode table        inode记录文件或目录的属性和实际存放数据的block号码        1、文件的权限(rwx)        2、文件所属用户和组(owner和group)        3、文件的容量(文件实际大小还是存储占用大小???)        4、ctime        5、atime        6、mtime        7、特殊权限SUID\SGID\SBIT        8、文件内容的实际指向(pointer)(block号码???)

       EXT2的inode的属性:        1、每个inode占用128Bytes,ext4和xfs占用256Bytes        2、每个文件只占用一个inode,inode数量在文件系统创建时也已经确定,因此文件系统能够存放的数量更inode数量有关        3、系统读取文件时,先读取inode内容,判断用户身份对应的权限,权限匹配才能够读取block内容        4、每个block号码需要占用inode 4Bytes的容量,当文件容量太大时,直接使用inode无法记录全部的block号码。因此inode记录的block号码区域分为12个直接、1个间接、1个二级间接和1个三级间接单元        直接单元是指存储的block号码直接指向文件存储数据        间接单元是指存储的block号码指向的block里面存储的是剩余的一部分直接单元        二级间接单元是指存储的block号码指向的block里面存储的是剩余的一部分间接单元        三级间接单元是指存储的block号码指向的block里面存储的是剩余的一部分二级间接单元                所以,一个inode记录的文件容量,以1K block为例,        (1)12个直接,12*1K        (2)1个间接,一个block可以存储 1K/4Bytes=256个block号码,256*1K        (3)1个二级间接,256*256*1K        (4)1个三级间接,256*256*256*1K        所以总容量为 12*1K + 256*1K + 256*256*1K + 256*256*256*1K = 16GB        EXT4为256Bytes的inode,增加存储有ACL、SELinux等信息

       superblock:        superblock的大小一般来说有1024Bytes,记录的信息有        1、inode和block的总量        2、inode和block的使用量和未使用量        3、inode和block的大小        4、文件系统的最近一次挂载时间、最近一次文件写入时间、最近一次文件系统检测(fsck)时间等        5、一个valid bit数值,'0/1'代表文件系统'挂载/未挂载'        每个block group都可能存在superblock,但是一个文件系统只有一个superblock,所以第一个block group含有superblock,其他则没有,如果有,则为superblock的备份,用来进行系统恢复

       文件系统描述说明(filesystem description)            记录每个block group的起始与结束的block号码,说明每个区段(superblock, bitmap, inodemap, data block) 分别介于哪一个 block 号码之间        区块对照表(block bitmap)                记录使用和未使用的block号码

       inode对照表(inode bitmap)                记录使用和未使用inode号码

       查询EXT2/3/4的superblock信息        dumpe2fs [-bh] filesystem                -b,列出保留坏轨的部分                -h,仅列出superblock的信息

       

目录树        在创建目录时,系统会分配一个inode和至少一个block,inode记录目录的权限和属性等信息,而block则是记录目录里面的文件名以及对应的inode号码        

inode number filename 12345678 23456789 ......    a b ......

文件        在创建文件时,系统会分配一个inode和若干个block,由于文件的inode里不包含文件的名称,因此即使有w权限也不能修改文件名。如果要修改文件名,只有在文件所在相关目录下具有w权限。(需要x权限???)

目录树的读取        例如/etc/passwd文件系统在读取时:        (1)由根目录/,读取根目录的inode,判断相关权限,寻找到存放目录树数据的block,读取数据        (2)根据上述block寻找到etc/的inode,读取etc/的inode,判断相关权限,寻找到存放目录树数据的block,读取数据        (3)根据上述block寻找到passwd的inode,读取passwd的inode,判断相关权限,寻找到存放文件数据的block,读取数据

EXT2/3/4文件的存取和日志式文件系统的功能        创建文件时:        1、判断写入文件的目录是否有w和x权限        2、根据inode bitmap寻找没有使用的inode,将文件属性和权限写入        3、根据block bitmap寻找没有使用的block,将文件数据写入,并更新inode里面的block号码        4、将上述步骤的inode和block号码同步更新到inode bitmap和block bitmap,并更新superblock(更新的原因???)

       inode table和datablock成为数据存放区域,superblock、inode bitmap、block bitmap成为metadata(中介数据)

       数据不一致的状态(inconsistent)        当文件新增时产生异常中断,中介数据和数据存放数据就有可能不匹配的情况,就会发生数据不一致的状态        EXT2文件系统中,系统在开机时会通过superblock里面的valid bit与filesystem state是否为clean等来判断是否强制进行数据一致性检查,检查通过程序e2fsck进行。然而,但文件数据比较多时,耗费时间会比较多

       日志式文件系统        在filesystem中划出一块日志记录区域,来记录文件写入或修改时的步骤        1、在文件写入之前,在日志记录区块记录文件准备要写入的一些信息        2、文件权限属性和数据的写入;metadata数据的更新        3、上述步骤完成后,日志区块更新该文件完成的记录        当出现写入文件异常中断时,通过检查日志记录区块就可以知道哪个文件,进行针对性的修复,而不必对整个文件系统进行一致性检查,达到快速修复的目的。EXT2不具备这个特性,需要升级至EXT3/4

Linux文件系统的运行        非同步处理:但一个文件被载入内存之后,如果文件未被修改,则被标志为clean,反之,则被标志为dirty。系统会不定时将dirty数据写入磁盘来保证数据一致性。通过命令sync可以强制将dirty数据立刻写入磁盘

挂载点的意义(mount point)        将文件系统与目录结合的动作称为"挂载",挂载点一定是目录。文件系统需要挂载之后才能够使用。

其他linux支持的文件系统与VFS(virtual filesystem switch)        查看linux支持的文件系统 ls -l /lib/modules/$(uname -r)/kernel/fs,目前已经载入内存的文件系统 cat /proc/filesystems                VFS(virtual filesystem switch)        通过virtual filesystem switch,系统能够管理文件系统,自动识别文件系统类型。        

XFS文件系统

 

文件系统的查看

文件系统的简单信息查看        df [-ahikmHT] file/directory  常用于文件系统容量查看                -a,列出所有文件系统,包括/proc                -h,将文件大小以更加易读的形式显示出来,例如默认是以bytes为单位,对于大小适合的文件,可以转换为KB、MB、GB等                -H,以M=1000K代替M=1024K计算                -k,以KBytes为单位显示文件容量                -m,以MBytes为单位显示文件容量                -i,使用inode数量代替容量显示                -T,显示对应partition的filesystem类型        df主要从superblock读取信息,执行速度很快

       du [-ahsSmk] file/directory   常用于目录容量查看                -a,列出所有文件和目录容量,默认仅统计目录下的文件量                -h,将文件大小以更加易读的形式显示出来,例如默认是以bytes为单位,对于大小适合的文件,可以转换为KB、MB、GB等                -s,列出总量而不显示每个目录的容量                -S,列出目录下每个目录、子目录和文件各自占用的容量,不包括子目录                -m,以MBytes为单位显示文件容量                -k,以KBytes为单位显示文件容量        du直接从文件系统中搜索文件数据,执行速度需要耗费时间较多

 

ln链接

实体链接和符号链接        Hard Link(实体链接)        1、每个文件占用一个inode,文件通过inode来指向实际内容        2、读取文件需要通过读取目录树的内容来寻找文件名和对应的inode number        文件名只和目录有关,文件内容和inode有关,可以存在多个文件名指向同一个inode number,这种就是Hard Link。(也就是只需在目录树下新增一条文件名记录并匹配inode number)这种链接方式不耗费inode                限制:        1、不能跨越filesystem(filesystem文件格式可能不同;相同格式的文件系统之间的inode是相互独立的,存在inode号码重叠的情况)        2、不能链接目录(???)                Symbolic Link(符号链接)        符号链接会创建一个文件,这个文件会让读取的数据指向被链接的文件名。类似于windows的快捷方式。所以文件被删除以后,符号链接会提示找不到源文件        

创建链接ln        ln [-sf] source destination                -s,创建symbol link,默认创建hard link                -f,强制操作,若destination存在,则删除后重新创建链接        link数量        当创建一个目录 /tmp/directory 时,目录底下会同时创建 /directory/. 和 /directory/..        /tmp/directory 和 /tmp/diectory/. 是相同的目录,而 /tmp/directory/.. 指向上一级目录 /tmp,所以当我们新建一个空目录时,新建目录的链接数就已经是2了,而上一级目录链接数则会增加1

 

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

磁盘的分区、格式化、检验与挂载        查看磁盘分区                lsblk [-dfimpt] [device]                        -d,仅列出磁盘本身而不列出磁盘的分区                        -f,列出磁盘文件系统类型                        -i,使用ASCII码线段输出,不实使用复杂编码                        -m,同时列出该设备在/dev下的权限                        -p,列出设备的完整名称                        -t,列出设备的详细信息

               NAME:设备文件名                MAJ:MIN:主要:次要设备代码                RM:是否为可卸载设备                SIZE:设备容量                RO:是否为只读                TYPE:设备类型,磁盘(disk)、分区(partition)、只读存储器(rom)等                MOUNTPOINT:挂载点

       列出设备的UUID                UUID是全局单一识别码                blkid

       列出磁盘分区表类型和分区信息                parted device print

       磁盘分区                GPT                gdisk device

               MBR                fdisk device

       更新linux核心分区表信息                partprobe [-s]

磁盘格式化        默认单位为Bytes        mkfs        mkfs.xfs        mkfs.ext4

文件系统检验        xfs_repair [-fnd] device                -f,                -n,仅进行检查                -d,在单人维护模式下,针对根目录(/)进行检查和修复

       fsck.ext4 [-pf] [-b superblock] device                -p,当文件系统在修复时,如果有需要回复y的动作时,自动回复y来继续进行修复动作                        -f,强制进行详细检查                -b,后边接superblock的位置。当superblock损坏时,可以通过备份来进行修复。superblock的备份位置:1k block在8193,2k block在16384,4k block在32768

文件系统的挂载与卸载        注意:1、一个文件系统只能挂载在一个目录             2、一个目录只能挂载一个文件系统             3、被挂载的目录是个空目录。如果目录不为空,那目录原本的文件会暂时消失直至文件系统被卸载        mount                -a,根据配置文件/etc/fstab来挂载所有的文件系统                -l,增加显示label信息                -t,后面增加文件系统类型来指定挂载挂载类型                -n,在默认情况下,系统会将挂载情况实时写入/etc/mtab,以利于其他程序运行。单人维护模式下不写入                -o,后面接一些挂载的额外参数                --bind directory new_directory,将文件夹挂载到另一个文件夹上                挂载参考的信息:1、/etc/filesystems,系统制定的测试挂载文件系统类型的优先顺序                             2、/proc/filesystems,系统已经载入的文件系统类型        umount [-fln] device/mountpoint                -f,强制卸载                -l,立刻卸载,比-f要强                -n,不更新/etc/mtab的情况下卸载

磁盘/文件系统参数的修改        mknod device [bcp] [Major] [Minor]                b,设置这杯名称成为一个周边存储设备。例如磁盘                c,设置设备名称成为一个周边输入设备。例如鼠标                p,设置设备名称成为一个FIFO文件                Major,主要设备代码                Minor,次要设备代码        xfs_admin [-lu] [-L label] [-U uuid] device                -l,列出设备的label                -u,列出设备的UUID                -L,设置设备的label                -U,设置设备的UUID                uuidgen,产生一个新的uuid        tune2fs [-l] [-L label] [-U uuid] device                -l,将superblock被的数据读取出来,类似于dumpe2fs -h                -L,设置设备的label                -U,设置设备的UUID

设置开机挂载 设置开机挂载/etc/fstab和/etc/mtab        根目录必须挂载,且必须是第一个被挂载的        /etc/fstab挂载格式:6个字段        [设备/UUID]    [mount point]    [filesystem type]    [文件系统参数]    [dump]    [fsck]

       修改完以后,可以通过mount -a来测试新增格式是否符合规范。实际挂载记录在/etc/mtab和/proc/mounts文件中

特殊设备loop挂载        挂载光盘/DVD镜像文件        mount -o loop iso_file mount_point

       创建大文件以制作loop设备

交换空间(swap)的创建        交换空间(swap)        使用实体分区创建swap                1、给swap创建分区,修改system id(系统会默认给新分区分配文件系统ID)                2、使用mkswap格式化成swap格式                3、启用创建的swap(swapon)        使用文件创建swap                1、使用dd创建一个文件                2、使用mkswap格式化成swap格式                3、启用创建的swap(swapon) 分区工具parted        parted [device] [command [options]]        command: 创建新分区 mkpart [primary|logical|extended] [filesystem type]                 显示分区   print                   删除分区   rm [partition]

 

 

最新回复(0)