linux中关于文件系统的简要介绍和一般操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux中关于文件系统的简要介绍和一般操作相关的知识,希望对你有一定的参考价值。

创建文件系统——分区格式化
    格式化:
        低级格式化:
            划分磁道
        高级格式化:
            创建文件系统,按照某种特定的标准,将整个分区划分为大小相同的若干小的逻辑编址单元,每个这样的单元,称为块(Block);

            划分块的标准:
                在Linux的文件系统中,主要的块划分标准就是:每个块包括2^1或2^2或2^3个扇区;即块大小可以是:1024Byte,2048Byte或者4096Byte;

        注意:
            1.被划分出来的块,每一个块只能存放一个文件的内容,一个文件可以存储在多个块上;
            2.如果在某个分区中,要创建大量的小文件,就将块大小设置的小一些;反之,如果在某个文件中,要创建的都是大文件,就将块设置的大一些;
            3.如果分区的空间较大,可以将块设置的大一些;

    FHS——文件系统层级标准
        /bin /boot /etc /dev ...

    对应数据的管理:
        平面分类管理:
            遍历数据;
        空间分类管理(层次化)
            逻辑编址:创建文件系统实际上就是给分区进行存储空间的逻辑编址;
            特点:仅需要经过有限次且有效的查找即可定位到目标文件;

在一个分区中创建文件系统的步骤:
    1.首先,文件系统会将分区划分成大小相等的若干块;
        元数据块:
            其中主要存放文件的属性:
                文件大小、文件权限、文件所有权、文件的时间戳、数据块指针(直接、间接)

            存放每个文件的元数据的固定的存储空间,称为index node,简称inode;(查询inode的使用 用df -i 命令)
            在linux的文件系统中,每个inode大小一般是128byte;每个inode都有其对应的inode编号;

        数据块
            存放文件中所包含的流式数据的内容;

        特殊文件:
            只占据元数据块中的inode,而不占据数据块;
            设备文件:
                Block Special
                Character Special

                此类文件是将inode中的数据块指针换成了设备号;

            符号链接文件:
                Symbolic Link

                此类文件时将inode的数据块指针换成了另一个文件的访问路径;

    随着磁盘空间越来越大,划分出来的块的数量越来越多,管理难度越来越大;通过划分块组来解决此问题:
        块组:
            每个块组中有独立的元数据块和数据块;
            存放数据的时候,以块组内的数据优先选择,如果块组内的数据块数量不够,可以通过文件系统的存储策略来申请多个块组协同存储;

        超级块:
            主要定义了在整个分区中有多少个块组,及每个块组的边界;
            为了防止超级块发生故障导致整个文件系统崩溃,文件系统会自动对超级块进行备份;

    为了防止数据不一致,在文件系统中引入日志块的概念:
        日志块:对于数据的写入操作做日志记录的块;

        数据不一致通常是由不洁关机、不洁断电导致;

一个完整的Linux文件系统:
    超级块,inode,inode bitmap,block bitmap,data block,journal block

想要查找/var/log/messages文件的内容,是怎样的查找过程?
    
    目录:内容是文件名;

    每个文件名是文件的特有的标识,每个文件名都对应一个inode;

Linux支持的文件系统:
    位于内核空间中的文件系统驱动:
        /usr/lib/modules/KERNEL-VERSION/kernel/fs/
        文件系统可以是内核的一部分,也可以是内核的模块;

    位于用户空间中的文件系统管理程序:
        管理命令;

    linux支持的文件系统:
        1.Linux专属文件系统:
            ext系列:ext、ext2、ext3、ext4
            ext4特性:
                单个分区最大50TB;
                单个文件最大64EB;
                可以在根分区上设置;
                可以在启动分区上设置;
        2.xfs:最大分区500TB, ...
        3.reiserfs:
        4.btrfs:技术预览版
        5.ISO9660:光盘文件系统
        6.FAT:vfat
        7.NTFS:默认不支持,可以通过调整内核参数以获得支持;
        8.网络文件系统:NFS、CIFS
        9.集群文件系统:gfs2、ocfs2
        10.分布式文件系统:
            内核级:ceph
            用户空间(应用级):mogilefs、moosefs、glusterfs
        11.Unix的文件系统:ufs、FFS、JFS、zfs
        12.伪文件系统:proc、sys、tmpfs、hugepagefs;
            并非管理磁盘数据的文件系统,而是管理内存数据的文件系统;

对于不同的发行版本的LInux,都有其默认使用的文件系统:
    RHEL或CentOS系列:
        5:ext3
        6:ext4
        7:xfs

管理文件系统:
    创建文件系统:
    使用文件系统(挂载文件系统):
    停止使用文件系统(卸载文件系统):
    文件系统的检测和修复:

创建文件系统的用户空间工具:
    mkfs
        mkfs - build a Linux filesystem
        mkfs [options] [-t type] [fs-options] device [size]

    RHEL或CentOS系发行版中,可以使用mkfs.ext4, mkfs.btrfs, ...等工具来代替mkfs创建文件系统;

    示例:
        ]# mkfs -t ext4 /dev/sdb1
        ]# mkfs.ext4 /dev/sdb2

    注意:
        1.不要使用磁盘设备名称作或扩展分区设备名称作为mkfs命令的参数;
            如果使用磁盘设备名称作为mkfs命令的参数,则所有分区都将被删除;
            如果使用扩展分区设备作为mkfs命令的参数,则所有的逻辑分区都将被删除;

        2.只有主分区和逻辑分区才能使用mkfs命令创建文件系统;

        3.如果要创建的目标文件系统是ext系列文件系统,那么可以使用mke2fs命令;
            mke2fs:
                mke2fs - create an ext2/ext3/ext4 filesystem
                常用选项:
                    -b block-size:在创建文件系统时,指定每个块的大小;默认值是4096,单位是字节;调整时,只能写1024,2048及4096;
                    -i bytes-per-inode:在创建文件系统时,指定inode与字节的比率;即:多少个字节创建一个inode,默认值是16384;
                    -j:创建有日志功能的文件系统,即:ext3;
                    -L new-volume-label:在创建文件系统时,指定卷标;
                    -m reserved-blocks-percentage:在创建文件系统时,指定为管理员保留的磁盘空间的百分比;默认值是5;
                    -n:并非真正创建文件系统,而是显示在创建文件系统时所做的操作;
                    -N number-of-inodes:在创建文件系统时,直接指明在此文件系统中创建的inode的数量;
                    -O [^]feature[,...]:在创建文件系统时,关闭或开启文件系统特性;
                    -t fs-type:在创建文件系统时,指定文件系统类型;

    修改ext系列文件系统的卷标:
        e2label命令:
            e2label - Change the label on an ext2/ext3/ext4 filesystem
            e2label device [ new-label ]

        注意:如果不加new-label参数,则是查看指定设备的卷标;如果添加了new-label参数,则直接将设备的卷标设置为new-label,而不考虑原来是否有卷标或者原卷标是什么;

    修改ext系列文件系统的属性,可以使用tune2fs命令:
        tune2fs:
            tune2fs - adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems
            在ext2/ext3/ext4文件系统上调整那些可以被调整的参数;
            常用选项:
                -l:显示超级块的内容;
                -j:将ext2文件系统修改调整为ext3文件系统;
                -m reserved-blocks-percentage:调整文件系统中预留空间的百分比;
                -r reserved-blocks-count:调整文件系统中预留的磁盘空间的块数;
                -L  volume-name:修改卷标;
                -O [^]feature[,...]:修改文件系统特性是否开启;

    文件系统的检测和修复工具:
        fsck:
            fsck - check and repair a Linux filesystem
            fsck  [-ar] [-t fstype] [filesystem...]
            常用选项:
                -t fstype:指定要检测的文件系统的文件系统类型;
                -a:无需交互,自动修复检测到的所有问题;
                -r:交互式式修复检测到的问题;

        ext系列文件系统专用的检测修复工具:
            e2fsck
                e2fsck - check a Linux ext2/ext3/ext4 file system
                e2fsck [-y] [-f] device
                常用选项:
                    -y:在交互式过程中所有的问题都以"yes"来回答;
                    -f:强制检测并修复;即使文件系统处于clean状态也修复;

    blkid:
        blkid - locate/print block device attributes
        常用选项:
            -L label:根据指定的卷标进行块设备查找定位;
            -U UUID:根据指定的UUID进行块设备的查找定位;

    findfs
        findfs - find a filesystem by label or UUID
        findfs [LABEL=<label>] [UUID=<uuid>]

swap文件系统:
    前提:分区的类型必须是swap类型,即:分区的系统ID必须是82;
        修改方法:在fdisk的交互模式中,使用t命令将指定的分区类型修改为82即可;

    创建swap文件系统:
        mkswap命令:
            mkswap - set up a Linux swap area
            mkswap [options] device
            常用选项:
                -f, --force:强制执行;
                -L LABEL:设置交换分区的卷标;
                -U UUID:指定交换分区的UUID,建议让系统自动生成;

        示例:
            ~]# mkswap /dev/sdb3

    利用一个大文件创建交换分区:
        示例:
            ~]# dd if=/dev/zero of=/tmp/swapfile bs=1024 count=1024000
            ~]# mkswap /tmp/swapfile

使用文件系统——挂载
    挂载:
        对于Linux系统来说,文件系统只能有唯一的一个原初访问入口,此访问入口被称为"根文件系统";其他所有的文件系统,都必须通过某个特定方式关联至根文件系统或者根文件系统的子目录中,而此关联过程被称为"挂载";用于关联根文件系统和其他文件系统的目录,就被称为"挂载点";

    挂载点:mount point,通常是一个目录,该目录在成为挂载点之后,就是其他文件系统的访问入口;如:/boot
        要求:
            1.作为挂载点的目录必须事先存在;
            2.作为挂载点的目录应该是没有被使用或不能被其他进程占用的目录,换言之,必须是空闲的目录;
            3.作为挂载点的目录,一旦挂载其他文件系统,则失去原文件系统中的特性;简单说,如果一个目录中有文件名,一旦挂载了其他文件系统,则原来的文件名则不可见,这样的目录中的新的内容是新文件系统中的文件名;这个过程会一直持续到新文件系统被卸载;

    完成挂载操作,使用mount命令;
        mount命令:
            mount - mount a filesystem
            格式:
                mount [-lhV]
                mount -a [-fFnrsvw] [-t vfstype] [-O optlist]
                mount [-fnrsvw] [-o option[,option]...]  device|dir
                mount [-fnrsvw] [-t vfstype] [-o options] device dir

            常用选项:
                -r, --read-only:以只读方式挂载目标文件系统;通常用于光盘挂载;
                -w, --rw, --read-write:以可读可写的方式挂载目标文件系统;通常是默认的
                -n, --no-mtab:
                    默认情况下,所有挂载块设备的操作都会被自动记录在/etc/mtab文件中,如果使用了-n, --no-mtab选项,则表示即便挂载成功,也不会将挂载信息记录在/etc/mtab文件中
                -t, --types vfstype:在挂载文件系统时指明目标文件系统的类型;如果省略该选项,mount命令会通过blkid命令来判断要挂载的目标文件系统的类型;
                -L, --label label:通过指定的文件系统的卷标来挂载目标文件系统;
                -U, --uuid uuid:通过指定的文件系统的UUID挂载目标文件系统;
                -a, --all:根据/etc/fstab文件中指定的文件系统进行自动挂载;
                -o, --options opts:在挂载目标文件系统时,可以调整挂载参数选项;
                    FILESYSTEM INDEPENDENT MOUNT OPTIONS:
                        sync/async:同步/异步挂载选项;
                        atime/noatime:文件被访问时,是否更新访问时间戳;
                        diratime/nodiratime:目标被访问时,是否更新访问时间戳;
                        ro/rw:是以只读/可读可写方式挂载文件系统;相当于-r/-w选项的功能;
                        dev/nodev:在此文件系统中是否允许创建设备文件;
                        exec/noexec:在此文件系统中是否允许运行程序文件,包括各种二进制文件和各种脚本;
                        auto/noauto:在挂载此文件系统时是否能够使用-a选项进行挂载;
                        user/nouser:是否允许普通用户挂载此文件系统;
                        suid/nosuid:在此文件系统中是否允许程序文件上的SUID和SGID特殊权限生效;
                        relatime/norelatime:在此文件系统中是否参考inode访问时间来修改其修改时间戳和改变时间戳;
                        remount:对目标文件系统,无需卸载,就可以应用新的挂载选项;
                        acl:只在ext系列文件系统或xfs文件系统中使用,可以使用文件系统的facl功能;
                        defaults:默认选项,其中包括:rw, suid, dev, exec, auto, nouser, and async.
                        loop:使用环回设备,将镜像文件当做文件系统挂载至指定的挂载点;
                -B, --bind:将某个已经挂载的文件系统绑定至另一个挂载点;
                    示例:# mount -B|--bind mount_point1 mount_point2
    示例:
        # mount /dev/sdb1 /mnt/sdb1
        # mount -o remount,ro /mnt/sdb1

    卸载已经挂载的文件系统:
        umount命令:
            umount - unmount file systems
                umount -a
                    卸载当前已经挂载的文件系统中的所有可卸载的文件系统;
                umount {dir|device}...
                    通过指定挂载点或设备文件名称,卸载指定设备;

    挂载光盘:
        在虚拟机中,需要保证光盘镜像文件被放入虚拟机的光驱,并且保证虚拟机的光驱处于"已连接"的状态;需要实现创建挂载点(/mnt/cdrom);

        # mount -r /dev/sr0 /mnt/cdrom

    挂载交换分区:
        swapon:

    卸载交换分区:
        swapoff:

        swapon, swapoff - enable/disable devices and files for paging and swapping
            -a, --all:自动挂载/etc/fstab文件中被正确定义的所有的交换分区;

/etc/fstab文件的格式:
    共6个字段,默认使用空白字符(制表符)作为字段分隔符;六个字段的含义分别为:
        1.要挂载的设备或文件系统名称,也可以是卷标或UUID;
            如果使用卷标必须使用:LABEL="label"
            如果使用UUID必须使用:UUID="uuid"

        2.挂载点:
            swap设备或文件无需挂载点,在此字段写swap即可;

        3.文件系统类型:

        4.默认的文件系统挂载选项:想要指定多个选项时,使用逗号分隔的列表;
            defaults,ro,sync

        5.转储频率:
            使用dump命令自动备份分区数据的频率;
            0:表示不备份
            1:每天备份一次
            2:每两天备份一次,即:每隔一天备份一次;
            ...

        6.自检次序:
            0:不自检;
            1:优先自检,通常仅设置在根文件系统上;
            2:次级自检;
            ...
            9:最低优先级自检;

    /etc/fstab文件的作用:
        在系统启动过程中,会自动挂载该文件中所有被正确列出的文件系统;

以上是关于linux中关于文件系统的简要介绍和一般操作的主要内容,如果未能解决你的问题,请参考以下文章

Verilog中关于文件操作的系统任务

Verilog中关于文件操作的系统任务

linux中关于账户的几个特殊的目录

linux中关于进程那些事

121. 请简要说明linux操作系统下你所了解的文件存储方案

Linux基于VMware搭建Linux系统