zoukankan      html  css  js  c++  java
  • Linux文件系统

    什么是文件系统

    文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。

    从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等。

     

    linux中,我们可以通过查看/lib/modules/$(uname –r)/kernel/fs里面的东西来查看我们的系统能支持什么文件系统。

    文件系统类型

    Linux文件系统

    ext2(Extended file system), ext3,ext4, xfsSGI , btrfOracle , reiserfs, jfsAIX , swap

    光盘

    iso9660

    Windows

    FAT32, exFAT,NTFS

    Unix:

    FFSfast , UFSunix , JFS2

    网络文件系统

    NFS, CIFS

    集群文件系统

    GFS2, OCFS2oracle

    分布式文件系统

    fastdfs,ceph, moosefs, mogilefs,glusterfs, Lustre

    RAW

    未经处理或者未经格式化产生的文件系统

     

    根据其是否支持"journal"功能:

    日志型文件系统: ext3, ext4, xfs, ...

    非日志型文件系统: ext2, vfat

    文件系统的组成部分:

    内核中的模块: ext4, xfs, vfat

    用户空间的管理工具: mkfs.ext4, mkfs.xfs,mkfs.vfat

    Linux的虚拟文件系统: VFS

    查前支持的文件系统: cat /proc/filesystems

    什么是VFS

    VFS的全称是虚拟文件系统。它的作用就是提供一个接口用于用户使用不同的文件系统,比如我们的一个磁盘格式化成ext4ext3xfs三个分区,由于是不同的文件系统,所以在兼容性上有着很大的差异,此时我们的VFS就在我们和这些不同的文件系统建立一个接口,使得我们不必过多的考虑不同文件系统的兼容性。直接对文件系统操作。

     

    类型

    支持限制

    Root分区

    Boot分区

    注释

    单节点

    xfs

    500T

    yes

    yes

    默认分区格式

    ext4

    50T

    yes

    yes

    兼容ext3/ext2

    btrf

    50T

    yes

    yes

    技术预览

    网络/多节点

    gfs2

    2-16个节点

    Yes

    No

    集群文件共享存储

    创建文件系统

    当我们在给磁盘分完区以后,下一步要做的就是创建文件系统,也就是我们所说的格式化。上面我们列出了很多文件系统,以后我们要是在学习的越深,接触到的文件系统也就越多,现在,我们仅对ext系列的文件系统的创建,修改,查询进行学习。

     

    mkfs命令

    mkfs.fs_type /dev/sd##

             fs_type 包括:ext4,xfs,btrfs,vfat

    mkfs –t fs_type /dev/sd##

             -L “LABEL” :设定卷标

    这个命令可以创建多个文件系统,并非仅能创建ext系列 

    [root@CT731 ~]# mkfs.ext4 /dev/sdb1
    [root@CT731 ~]# mkfs -t ext4 /dev/sdb2
    [root@CT731 ~]# mkfs -t ext4 -L TEST /dev/sdb3
    [root@CT731 ~]# blkid /dev/sdb3
    /dev/sdb3: LABEL="TEST" UUID="771f8d20-1308-4787-803d-8bdb80e2b690" TYPE="ext4"

    mke2fs命令

    ext系列文件系统专用管理工具

          -t {ext2|ext3|ext4}

    -b {1024|2048|4096} 指定block的大小

    -L 'LABEL'

    -j: 相当于 -t ext3

    -i n: 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小(bytes-per-inode

    -N n:指定分区中创建多少个inode

    -I :一个inode记录占用的磁盘空间大小, 128---4096

    -m n: 默认5%,为管理人员预留空间占总空间的百分比

    -O feature[,...]:启用指定特性 (不常用)

    -O ^feature:关闭指定特性

    [root@CT731 ~]# mke2fs -t ext4 -b 2048 -L TEST /dev/sdb1
    [root@CT731 ~]# blkid /dev/sdb1
    /dev/sdb1: LABEL="TEST" UUID="abc55e30-0c5b-40d5-99e3-c89dc4d62c27" TYPE="ext4"
    [root@CT731 ~]#dumpe2fs -h /dev/sdb1
    dumpe2fs 1.42.9 (28-Dec-2013)
    Filesystem volume name:   TEST
    Last mounted on:          <not available>
    Filesystem UUID:          abc55e30-0c5b-40d5-99e3-c89dc4d62c27
    Filesystem magic number:  0xEF53... ...
    Free blocks:              10280400
    Free inodes:              1310709
    First block:              0
    Block size:               2048
    Fragment size:            2048
    Group descriptor size:    64
    ... ...

    tune2fs命令:

    重新设定ext系列文件系统可调整参数的值

          -l:查看指定文件系统超级块信息; super block

    -L 'LABEL':修改卷标

    -m n:修预留给管理员的空间百分比

    -j: ext2升级为ext3

    -O: 文件系统属性启用或禁用, O ^has_journal

    -o: 调整文件系统的默认挂载选项, o ^acl

    -U UUID: 修改UUID

    [root@CT731 ~]# tune2fs -l /dev/sdb1
    tune2fs 1.42.9 (28-Dec-2013)
    Filesystem volume name:   TEST
    Last mounted on:          <not available>
    Filesystem UUID:          abc55e30-0c5b-40d5-99e3-c89dc4d62c27
    Filesystem magic number:  0xEF53
    Filesystem revision #:    1 (dynamic)
    Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
    Filesystem flags:         signed_directory_hash 
    Default mount options:    user_xattr acl
    ... ...
    [root@CT731 ~]# tune2fs -L "test2" /dev/sdb1
    tune2fs 1.42.9 (28-Dec-2013)
    [root@CT731 ~]# blkid /dev/sdb1
    /dev/sdb1: LABEL="test2" UUID="abc55e30-0c5b-40d5-99e3-c89dc4d62c27" TYPE="ext4" 

    文件系统的LABEL

    指向设备的另一种方法,与设备无关

      blkid:块设备属性信息查看

    blkid [OPTION]... [DEVICE]

    -U UUID: 根据指定的UUID来查找对应的设备

    -L LABEL:根据指定的LABEL来查找对应的设备

    [root@CT731 ~]# blkid /dev/sdb1
    /dev/sdb1: LABEL="test2" UUID="abc55e30-0c5b-40d5-99e3-c89dc4d62c27" TYPE="ext4" 
    [root@CT731 ~]# blkid -L test2
    /dev/sdb1

      e2label:显示或设置ext系列文件系统的LABEL

    e2label DEVICE [LABEL]

    [root@CT731 ~]#e2label /dev/sdb1
    test2

      findfs:查找分区

    findfs LABEL=<label>

    findfs UUID=<uuid>

    [root@CT731 ~]#findfs LABEL=test2
    /dev/sdb1

    Superblock

       Superblock是一个记录整个文件系统相关信息的块,可以说,没有superblock就没有了文件系统了。并且每个格式化的分区里面都会有superblock

    它记录的东西有:

    1.blockinode的总量

    2.未使用和已使用的inode/block数量

    3.blockinode的大小

    4.filesystem的挂载时间,最近一次写入数据的时间,最近一次检验侧磁盘的时间等

    5.一个valid bit数值,若此文件系统被挂载,则值为0,没挂载,则为1

    我们可以使用dumpe2fs查看文件系统的超级块和组信息

    dumpe2fs命令:

    用于打印“ext2/ext3”文件系统的超级块和快组信息

          -h 只查看超级块信息

    文件系统检测和修复

    1.  常发生于死机或者非正常关机之后

    2.  挂载为文件系统标记为“no clean”

    3.  注意:一定不要在挂载状态下修复

     

    fsck: File System Check

    fsck.FS_TYPE

    fsck -t FS_TYPE

    -p: 自动修复错误

    -r: 交互式修复错误

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

    [root@CT731 ~]# fsck.ext4 /dev/sdb1
    e2fsck 1.42.9 (28-Dec-2013)
    test2: clean, 11/1310720 files, 205360/10485760 blocks
    [root@CT731 ~]#fsck -t ext4 -p /dev/sdb1
    fsck from util-linux 2.23.2
    test2: clean, 2518/1310720 files, 281386/10485760 blocks

    e2fsck ext系列文件专用的检测修复工具

    -y:自动回答为yes

    -f:强制修复

     破坏分区

    [root@CT731 ~]# dd if=/dev/zero of=/dev/sdb1 bs=1 count=2048
    2048+0 records in
    2048+0 records out
    2048 bytes (2.0 kB) copied, 0.309404 s, 6.6 kB/s

    使用fsck检测

    [root@CT731 ~]# fsck -t ext4 -p /dev/sdb1
    fsck from util-linux 2.23.2
    fsck.ext4: Bad magic number in super-block while trying to open /dev/sdb1
    /dev/sdb1: 
    The superblock could not be read or does not describe a correct ext2
    filesystem.  If the device is valid and it really contains an ext2
    filesystem (and not swap or ufs or something else), then the superblock
    is corrupt, and you might try running e2fsck with an alternate superblock:
        e2fsck -b 8193 <device>

    没有恢复,我们使e2fsck 恢复

    [root@CT731 ~]#e2fsck -y /dev/sdb1 |less
    e2fsck 1.42.9 (28-Dec-2013)
    ext2fs_open2: Bad magic number in super-block
    e2fsck: Superblock invalid, trying backup blocks...
    test2 was not cleanly unmounted, check forced.
    Pass 1: Checking inodes, blocks, and sizes
    ... ...

    小面积的破坏是可以恢复的,但是大面积的损坏(破坏备份区)可能无法恢复,

     

  • 相关阅读:
    Python虚拟开发环境pipenv
    挖矿木马的应急响应
    熟悉使用ConfigParser库读写配置文件
    Django的RestfulAPI框架RestFramework
    使用DnsCat反弹shell
    使用mimikatz获取和创建Windows凭据的工具和方法
    拿下主机后内网的信息收集
    iOS 新浪微博-5.0 首页微博列表
    xcode 各版本下载地址及其它工具下载地址
    iOS 新浪微博-4.0 OAuth授权
  • 原文地址:https://www.cnblogs.com/duzhaoqi/p/7416303.html
Copyright © 2011-2022 走看看