课程内容:

    1、linux文件系统基础概念

    2、设备文件及磁盘分区

    3、文件系统的管理与挂载

    4、文件系统的管理与挂载

 

一、linux文件系统基础概念

        1、磁盘的结构(磁盘disk、盘面quotation、磁道track、扇区sector(存储单位)、磁头head、柱面cylinder,每个盘面有2个磁头)

         block(磁盘块是扇区的2的N次方倍,如扇区是512byte,那么块大小为1k 2k 4k 等)

          一个块只能属于一个文件,如果文件很大,要占用很多块,因此一个文件可以包含很多块。

        2、存储空间分2部分:数据区和元数据区(stat命令查看文件元数据 文件名 时间 属主 权限,

对应的数据存储在哪些磁盘块上)目录是一个路径映射符。

        index node:索引区域中每个文件云数据条件

        每个iNode都有其编号:ls -i 可以查看文件iNode编号,每个iNode指向常见类型的文件(f,d)指向磁盘数据区中的某个或某些个磁盘块;目录文件数据区存储的是(此目录的)文件名,以及对应的iNode编号,根(/)是自引用位置,系统启动默认找到的/

        3、格式化:创建文件系统

        4、bitmap:位图索引  存储数据时扫描iNode索引、块索引找到未使用的iNode和块来存放。

因为inode编号太多查找该inode是否使用比较消耗资源,为了更快的查找到未使用的inode会对inode做索引这叫bitmap(位图索引)inode位图,相对应的块也会做block bitmap(块位图),所以元数据区中存放了(inode、ionde bitmap、block bitmap),数据存储方式:每次会拿8个未使用的磁盘块用来存储,如果只用了一个会把未使用的块还回去不够时在取8个未使用磁盘块,评估磁盘性能时会有2种评估模型(随机io和连续io:磁盘读写数据是靠机械手臂完成,如果数据是连续存储将会提高读写速度,乱序将影响读写性能)

为了方便管理把块分为块组,每个块组都有独立的数据区和元数据区,块组的元数据信息和块组之间运行都由超级块(super block)进行协调,并且在多个块组中会有超级块备份,tune2fs可以查看分区的超级块信息 例:tune2fs -l /dev/sda1,还可以通过dumpe2fs查看分区中块组信息 例:dumpe2fs /dev/sda1 加上-h也可以查看超级块信息
      6、链接文件:

            硬链接: 两个文件指向同一个iNode,一个文件称为另一个文件的硬链接。

            软链接:当一个文件指向另一个文件的路径(或字符串)时,这个文件称另一个文件的软连接
            软链接的大小为文件名字符数长度。一个iNode可以被引用多次,其计数器在引用次数降为0之前是不会被标记为未用的

              6.1、创建链接:

                      ln [-sv]  SRC DEST    :-s 表示软连接,-v:显示创建过程

              硬链接

             

eg: #cp /etc/rc.d/rc.sysinit /tmp   
                        #ll -h   
                        #ln rc.sysinit rc.hardlink       iNode 计数器变成2
                        #  ls -li 发现2个文件Inode 相同,说明指向同一个文件,因此为硬链接。

                    如果把rc.sysinit 删除掉,只是iNode计数器减一,rc.hardlink 依然能访问,

                    修改任何一个文件,另一个文件也被修改。    

               硬链接特性:

                    1、不能对目录创建硬链接 2、硬链接不能跨分区 3、创建硬链接增加iNode计数

 

                软链接:

              

eg:# ln -sv rc.hardlink rc.softlink                     
                       # rc.softlink----->rc.hardlink
                       #ln -sv /tmp/rc.hardlink /tmp/rc.soft2        
                       #rc.soft2--->rc.hardlink

                   删除rc.hardlink ,链接错误,cp任意文件重名名为rc.hardlink,链接正常显示。

               软(符号)链接特性:

                    1、可以对目录创建链接 2、不受分区限制 3、创建软链接不增加iNode计数

 

                6.2、文件改变

             文件被删除:意味着iNode被标记为空闲,此iNode指向磁盘块被标记为空闲。

                    如果iNode被引用多次,且此次删除未使得其引用计数降低为0的话,说明文件仅删除了一个访问路径,

            文件被复制:创建一个新文件,并把原文件的数据指向磁盘块中再写一次的过程。

            文件被移动:

                    1、同一个分区移动:改变了文件的访问路径,原文件不变,iNode不变。

                    2、不同分区移动:在新分区创建文件,把数据复制过去,删除原分区数据。

 

 二、linux文件系统类型

            ext(2、3、4)、xfs、ffs、ufs、feiserfs 、jfs   (注:ext2不支持日志文件)

            swap:交换文件系统

            网络文件系统:nfs ,smbfs(cifs)

            分布式文件系统:ceph

            光盘文件系统:iso9660

            btrfs,

    2.1  linux的磁盘管理

        linux哲学思想,一切皆文件。

        设备文件:特殊文见,只有iNode没有数据,关联至一个驱动程序进而跟对应的硬件设备打交道。通常在/Dev目录下(b块设备,c线性设备),在设备元数据中都有其设备号(主设备号:用于标记设备类型;次设备号:用于标记同一类设备的不同设备;此设备名称由ICANN制定。

               

        创建设备文件:mknod [option]…name tpye [major minor]

                    如:mknod -m 664 /dev/testdev b 120 0   删除:rm -rf /dev/testdev

        磁盘设备文件:

            /dev/hd:    并口 IDE  133M/B

            /dev/sd:   串口 USB、SATA3 6Gbps/8、SCSI(并行10000转 15000转)、SAS

            /dev/sd[a-z]

                分区:数字表示 /dev/sda1  /dev/sha2

                分区编号:主+扩展:1--4   逻辑分区:5开始  查看磁盘信息:fdisk -l

 

三 磁盘分区   

                 磁盘使用过程:  磁盘-->创建分区-->创建文件系统(格式化)-->挂载
                          
                  传统的MBR(Master Boot Record)分区方式,有一个局限:无法支持超过2TB的硬盘的分区(或单个分区超过2TB),而GPT的分区表很好了解决了传统MBR无法逾越2TB的限制。但是在Linux系统中,传统的fdisk命令无法支持GPT分区方式,parted是更强大的分区工具,它的操作都是实时的,也就是说你执行了一个分区的命令,他就实实在在地分区了,而不是像fdisk那样,需要执行w命令写入所做的修改, 所以进行parted的测试千万注意不能在生产环境中.

        硬盘分区:磁道(track)扇区(sector)柱面(cylinder)分区是根据柱面划分的,磁盘的盘面有许多磁道,每个磁道是由多个扇区组成,每个扇区有512个字节;0磁道0扇区被称为MBR(master boot record)主引导记录,负责引导操作系统(os)启动

 

               MBR  512Bytes的组成:(446bytes:程序bootloader、64bytes:分区表、每16bytes标记一个分区,一共4个主分区、2bytes:SA,BMR有效性标记)

              

    创建磁盘分区:

            查看磁盘分区:fdisk -l [device]……   如:fdisk -l /dev/sda、fdisk -l | grep "^/dev/sda*"

            创建分区:fdisk 【device】     如:fdisk /dev/sda

                交互式界面,有许多子命令:m 帮助            

                    p:print 显示磁盘分区表

                    n:new 新建分区

                    d:delete 删除分区

                    l:查看所有systemID

                    t:修改分区的系统ID

                    w:保存并退出,q:不保存退出

        注意:分区完成后,查看分区信息:cat /proc/partitions 发现sda3 sda5未被内核识别,因此不能格式化分区,挂载等操作,所以让内核重读磁盘信息(如重启)。对于已经有分区处于使用状态的磁盘不能重启,新建分区后需要让内核重读其分区表:Centos5: partprobe [device] ,Centos6:partx或者kpartx [device]来识别,centos6许多次交替操作2条命令方可生效。如下:

kpartx -l /dev/sda   -l列出分区信息 ,cat /proc/partitions

        kpartx -af /dev/sda  -a添加 -f强制 再来一次 partx -a /dev/sda 再cat 即可出现列表

        ls /dev/sda* 查看分区列表。

        分区创建工具:sfdisk和parted

 

    练习:写一个脚本:

          1、提示输入一个对其执行分区的新硬件设备文件

          2、提醒用户接下来的操作销毁所有的数据,你继续吗?Y继续,其他字符退出

          3、对磁盘新建分区主分区1:大小512M,主分区2:大小2G

          4、创建完成后显示结果:

  

四、创建文件系统 (file system)

    1、创建文件系统(格式化):

            格式化分2步(厂家出厂进行低级格式化、用户需要高级格式化)  

        mkfs:make file system        -t   FSTPYPE   [DEVICE]

                mkfs -t FSTYPE = mkfs.fstype       如:mkfs -t ext4 = mkfs.ext4   

        而 mkfs -t xfs /dev/sda5 提示错误说明该系统没有装载xfs文件系统。

        注意:centos 6.5

            linux 内核是模块化的,这些模块支持动态装载和卸载:文件系统可能会被直接打包进内核,也可以被编译成内核模块。 lsmod 查看系统文件。

            如果期望将某分区格式化成某特定文件系统,通常需要一个与之对应的在用户空间可使用的命令行工具来实现。如  mkfs -t xfs /dev/sda5 提示错误,这是需要安装xfs文件系统,

yum -y install xfsprogs ,安装完成后,再mkfs -t xfs /dev/sda5就没问题了。

 

        <1> 文件系统的日志功能:journal

            ext2:无日志功能

            ext3,ext4,xfs:日志功能 (带日志功能的存储原理:

            1、在日志区写入元数据信息 2、写入数据 3、将日志区元数据信息移到元数据区)

        <2> mke2fs(ext系列的文件系统有专门的创建文件系统的工具,不建议使用mkfs)

              常用选项: -b {1024|2048|4096} 指定块大小

                                    -t {ext2|ext3|ext4} 指定分区格式 

                                    -L LABEL 指定卷标 

                                    -j 相当于 -t ext3

                                    -i n :每多少个字节给创建一个iNode,此字节数不应该小于块大小

                                    -N n:直接指定可用的iNode数

                                    -m n:指定预留空间占整个分区空间的百分比,默认是5% 

                                    

        <3> 查看超级块信息:

           

#tune2fs -l DEVICE
            #dumpe2fs -h DEVICE ,dumpe2fs device(查看超级块组信息)

    2、修改分区属性:tune2fs

            blkid:查看指定设备块的信息 如,blkid /dev/sda5

           e2label:查看或设定卷标   格式:e2label DEVICE [LABEL] 

        注意:块大小无法调整

        -j :ext2---->ext3

        -L LABEL:修改卷标

        -m #:修改预留空间百分比

        -O [^]FEATURE :启用指定特性;特性前加^,表示关闭特性

        -o [^]mount-options:开启或关闭指定的挂载选项 

    3、文件系统修复

        因进程意外终止或者系统崩溃等情况导致写入操作非正常中止时,可能会导致文件系统损坏,此时应该修复文件系统(注意:必须离线修复也就是先卸载文件系统)

        fsck 

            -t fstype 指定文件类型      如:fsck -t ext3 -a /dev/sda3

            -a 自动修复错误

            -r 交互式修复错误

        e2fsck:ext系列文件系统的专用工具(-y :yes ;-f :force 强制进行检查)

      补充:Windows不能识别linux的文件系统,所以U盘不能格式成ext系列,U盘一般为FAT32

      格式化FAT32 (mkfs -t vfat)

    4、交换分区 swap

       缓解物理内存资源不够的情况:

       创建交换分区 :fdisk /dev/sda ,给磁盘分出一个(1到2倍内存大小)空间将ID改成82,用mkswap 创建交换分区

        mkswap [-L LABEL] DEVICE  如:mkswap -L SWAP1 /dev/sda7

 

五、关于挂载

        文件系统挂载:默认只有管理员才有权限挂载

        将额外的分区与根文件系统上的某目录建立关联关系的过程,目录中的原有文件会被隐藏。

        挂载点:另一个文件系统的访问入口

 

        <1> 挂载:mount DEVICE MOUNT_POINT    固定挂载点:/mnt,/media

               mount [option]…[-t fstype][-o option] 设备 挂载点 (挂载点:事先存在、空闲目录)

              常用挂载选项:  -t fstype 指定挂载文件系统类型

                            -r 只读挂载

                            -w read and write 读写挂载

                            -L LABEL 以卷标方式指定设备,mount -L LABEL 挂载点

                            -U UUID 以UUID的方式指定设备 mount UUID='某uuid号'或 -U UUID

                            -a 自动挂载所有(/etc/fstab文件中定义)的支持自动挂载的设备

                            -n:挂载时,不更新/etc/mtab文件

                         -o option

                            async:异步I/O,数据写操作先于内存完成,而后再根据某种策略更新至持久设备中

                            sync:同步I/O

                            atime/noatime:文件和目录被访问时是更新最近一次的访问时间戳。

                            auto/noauto:设备是否支持mount的-a选项自动挂载

                            diratime/nodiratime:目录被访问时是最近一次的访问的时间戳

                            dev/nodev: 是否支持在此设备上使用设备;

                            exec/noexec: 是否允许执行此设备上的二进制程序文件







 

例如:以指定挂载后支持acl为例:

方法1:


 

方法2:


为设备设定默认挂载选项

 

                    查看所有已挂载的设备:

                  

#mount
                    #cat /proc/mounts(系统内核识别)
                    #cat /etc/mtab (调用mount命令)

        <2>卸载:umount device 或者 umount mount_point ,挂载点没有被进程访问时才能卸载。


                 fuser -v 挂载点



 

df: disk free

-h: human-readable

-i: 显示inode的使用信息而非默认的磁盘空间使用信息

 

du: disk usage (-s ; -h)

 

练习:创建一个20G的分区,块大小为2048,预留百分比为3,卷标为MYDATA,要求挂载后支持acl,使用UUID的方式挂载至/mydata目录;

使用重新挂载的功能,让其不支持dev功能;

 

七、交换分区:mkswap

free: 查看内存及交换分区的使用信息

 

启用交换分区 swapon [DEVICE]       -a: all, 启用所有交换分区     -p #: 指定此交换设备的优先级

禁用交换分区  swapoff [DEVICE]       -a: 禁用所有    例如: swapoff /dev/sda2

 

自动挂载的设备的配置文件:/etc/fstab6  字段说明如下:

            设备名称: 设备挂载点: 文件系统: 挂载选项: 转储频率(0:从不转储1: 每天转储2: 每隔一天)

            : 自检次序(0:不自检,额外创建的文件系统都无须自动自检 1:首先自检,通常只有根文件系统需要首先自检 2:次级自检,不同的设备可以使用同一个自检次序 3~9)


挂载选项可以有多个,彼此间使用逗号分隔;      


转载于:https://blog.51cto.com/liwenjia/1712776