文件系统解析

文件系统相关概念:

    文件系统示意图:

wKiom1XcSgqggSsMAACIIwZ3YBw008.jpg

    block(块):文件系统的基本存储单元,格式化时决定块大小,大小可以是有1024,2048,4096字节

    superblock(超级块):保存整个分区中的全局信息(有多少块组,每个块组有多少块,空闲inode,块大小等,至关重要,允许备份超级块),使用tune2fs -l可以查看

    block group(块组):相当于分区下面的子分区,方便在大分区上快速查找可用空间,大小取决于块大小,使用dumpe2fs可以查看

    GDT:块组描述表,当前分区上每一个块组的块组名,每一个块组的边界信息(从哪个块起始和到哪个块结束)

     block Bitmap(块位图):置位0代表未曾使用,1代表已经被使用,用于加速查找空闲磁盘块(使磁盘不需要遍历查询整个磁盘寻找空闲磁盘块,只要扫描bitmap的置位即可)

    Inode中存储数据相关属性(权限,属主数组,inode号,大小,位置等),直接或间接指向文件存储到的磁盘块的位置

    inode bitmap(索引节点位图)分为inode位图和块位图,顾名思义,inode位图用于加速检索空闲inode

    目录:目录其实是一张表,每一行都是inode号码和目录下文件名称的对应条目


    那么我们如何在磁盘上增删文件呢?

        新建一个文件:例如/var/test.txt  1.扫描inode位图找到一个空闲inode并占用,根据/var对应的inode找到目录对应的磁盘块,找到目录条目,新建test.txt,并且将刚刚扫描到的空闲inode所引导它-----------如果往这个文件里存储数据,找空闲磁盘块,找到块位图,分配几个块给它,如果存完发现分配的块没用完则回收未分配的块


        删除一个文件:首先inode号码在位图上标记为空,目录上标记的文件名删掉,块位图上把文件原先存储的块标记为未使用,但是不会清空磁盘块上存储的数据,下次存储直接覆盖就行(数据删除可以恢复的原理),文件粉碎就是删除文件同时清空了磁盘块


    1.磁盘分区:

        分区工具:fdisk,cfdisk,sfdisk等,这里以fdisk为例

            fdisk:对于一块硬盘来讲,最多只能管理15分区;
            # fdisk -l [-u] [device...]

            # fdisk device

            子命令:管理功能
                p: print, 显示已有分区;
                n: new, 创建
                d: delete, 删除
                w: write, 写入磁盘并退出
                q: quit, 放弃更新并退出
                m: 获取帮助
                l: 列表所分区id
                t: 调整分区id
    TIPS:分区完成后需要通知内核重新加载分区表以识别新加入的分区
        查看内核是否已经识别新的分区:
            # cat /proc/partations

        通知内核重新读取硬盘分区表:
            partx -a /dev/DEVICE
                -n M:N

            kpartx -a /dev/DEVICE
                -f: force

            CentOS 5: 使用partprobe
                partprobe [/dev/DEVICE]

    2.文件系统:了解了基本概念,下面我们围绕ext3文件系统进行讲解

    ext3文件系统:相比之前的文件系统多了日志功能,日志功能可以帮助快速恢复数据,检测文件系统错误

    想要查看当前情况内核支持哪些文件系统,使用 cat /proc/filesystem命令

    格式化工具:

        1.mkfs

wKioL1XcUFjzfujqAABzmQIx1NY731.jpg
            2.mke2fs:专用于管理ext系列文件系统的工具

            -t {ext2|ext3|ext4}
            -b {1024|2048|4096}
            -L 'LABEL'
            -j: 相当于 -t ext3
                mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
            -i #: 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小;
            -N #:为数据空间创建多少个inode;
            -m #: 为管理人员预留的空间占据的百分比;
            -O FEATURE[,...]:启用指定特性
                -O ^FEATURE:关闭指定特性

             mke2fs -S 可以重新生成超级块(如果失败则数据丢失,需要谨慎处理)

        3.mkswap:创建交换分区

            mkswap [options] device
                -L 'LABEL'
            前提是:磁盘分区时调整其分区的ID为82;


    查看类常用工具:
        1.blkid:块设备属性信息查看
            blkid [OPTION]... [DEVICE]
                -U UUID: 根据指定的UUID来查找对应的设备
                -L LABEL:根据指定的LABEL来查找对应的设备

wKioL1XcU-TAmWLSAACivMSCoMc372.jpg

            UUID:统一全局标示符,用于唯一标识磁盘设备

        2.e2label:管理ext系列文件系统的LABEL
            # e2label DEVICE [LABEL]

            3.tune2fs:重新设定ext系列文件系统可调整参数的值
            -l:查看指定文件系统超级块信息;super block
            -L 'LABEL':修改卷标
            -m #:修预留给管理员的空间百分比
            -j: 将ext2升级为ext3
            -O: 文件系统属性启用或禁用
            -o: 调整文件系统的默认挂载选项
            -U UUID: 修改UUID号;

wKioL1XpnOqgxj6vAAAcKw-GsXQ723.jpg

        dumpe2fs:
            -h:查看超级块信息

    文件系统检测类工具:
        fsck: File System Check
            fsck.FS_TYPE
            fsck -t FS_TYPE
                -a: 自动修复错误
                -r: 交互式修复错误

                Note: FS_TYPE一定要与分区上已经文件类型相同;

        e2fsck:ext系列文件专用的检测修复工具
            -y:自动回答为yes;
            -f:强制修复;


超级块损坏解决办法:

错误:mount: wrong fs type, bad option, bad superblock on 
/dev/sde1,
or too many mounted file 
systems

查看备份超级块位置:

方法1使用mkfs命令  -n 参数表示只列出文件系统的信息,并不真的格式化分区

wKiom1Xpn3uB8OEHAAEbP84Zlhs775.jpg

方法2 使用dumpe2fs也可以显示超级块备份位置

注意:文件系统创建时的动作并打印出备份超级块的位置,给出的位置缺省是以4k为单位的,mount 
在使用时需要为它提供以1k为单位的偏移,需要乘4

 

临时解决方案:

使用备份超级块挂载文件系统(此时遵照上面32768乘以4后是131072)

mount.ext4 -osb=131072 /dev/hdb1 /mnt

 

永久解决方案:

使用备份超级块修复

fsck.ext4 -b32768 /dev/sdb1  -b指定备份超级块位置





你可能感兴趣的:(文件系统工具)