• 第十二章 磁盘管理


    1. 磁盘简介

    1.1. 概念

    硬盘是由一片或多篇带有磁性的铝合金制的盘片构成,是 一种大容量、永久性的外部存储设备 组成:盘片、马达驱动、缓存、控制电路、接口

    图:

    1.2. 逻辑结构

            磁道:由内到外的同心圆

            扇区:半径组成的扇形磁道存储区

             柱面:多个盘片的统一磁道

    图:

    2. 虚拟机添加新硬盘

    2.1. 物理设备的命名规则

    2.1.1. 传统设别

    2.1.2. 固态硬盘

             nvmen磁盘号[p1-10]

    2.2. 虚拟机添加新硬盘

     过程:

            关机

            编辑虚拟机设置

            点击添加

            选择硬盘后下一步 :

            选择磁盘类型:SATA(A)

            创建新虚拟磁盘:

            20GB,单个文件 :

            默认命名,点击完成:

    注意 :在添加3块硬盘,最终共4个新硬盘

    3. 硬盘分区概述

    3.1. MBR分区

    概念:

            MBR(Master Boot Record,主引导记录)包含硬盘一系列 参数和一段引导程序,硬盘引导程序的主要作用是检查分 区表是否正确并且在系统硬件完成自检以后引导具有激活 标志的分区上的操作系统,并将控制权交给启动程序

            MBR是由分区程序(如Fdisk.exe)所产生的,它不依赖 任何操作系统,而且硬盘引导程序也是可以改变的,从而 实现多系统共存

            MBR位于整个硬盘的0磁道0柱面1扇区

                    主引导扇区512B

                    MBR=446B

                    DPT(Disk Partition Table硬盘分区表)=64B

                    最后两个字节“55,AA”是分区的结束标志

    MBR分区类型

            主分区(primary partition) 一块硬盘最多4个主分区,主分区不可以再进行二次分 区 主分区可以直接建立文件系统,存放数据 可以用来引导、启动操作系统

            扩展分区(extended partition) 一块硬盘最多一个扩展分区,加主分区最多4个 不能创建文件系统 可以划分逻辑分区

            逻辑分区(logical partition) 可以创建文件系统,存放数据 逻辑分区的数量没有限制。

    支持的分区数量:4个主分区或者3个主分区1个扩展分区

            为什么MBR最多只能有4个主分区: 因为分区表占据64个字 节,其中每个分区的信息占用16个字节,分区表里面可以 记录四个分区信息描述。

    3.2. GPT分区

    产生原因:

            MBR分区表中最高支持磁盘容量为2.2TB

            MBR分区表中,没有备份机制,分区表被干掉则磁盘全部 死光光

            MBR中存储开机管理程序的容量只有446B,无法存储较 多内容

     概念::

            GPT(GUID Partition Table,全局唯一标识分区表)是一种比 MBR分区更先进、更灵活的磁盘分区模式

            GPT分区表使用LBA(Logical Block Address)逻辑区块地址 来记录磁盘引导、分区的相关信息

                    LAB区块大小(512B-4KB),默认为512B

                    LAB区块共68个,前34个记录分区信息,后34个进行 备份

    图:

            不在区分主分区与其它分区,默认情况下,GPT最多可支持 128个分区
            支持大于2.2TB的总容量及大于2.2TB的分区,最大支持 18EB(1EB=1024PB,1PB=1024TB,1TB=1024GB)

            GPT分区机制在较老的BIOS中不能识别,则提供了一个 UEFI (Unified Extensible Firmware Interface)统一的可扩 展固件接口,来取代传统的BISO,又称为UEFI BIOS, UEFI使用C语言编写,支持较多的平台

    3.3. lsblk命令

    作用:查看磁盘信息

    格式:lsblk         参数        设备名

    参数:

            -d :仅列出硬盘本身信息,不显示分区信息

            -f :列出磁盘的内的文件系统名称

            -i : 使用ASCII码格式输出信息

            -t :显示磁盘的详细信息

           -p :显示设备完整名称

     示例:

    显示内容分析:

            NAME :设备名称,默认省略前导/dev 目录名

            MAJ:MIN :主要:次要 设备代码

            RM :是否可以卸载

            SIZE : 容量

            RO :是否为 只读

            TYPE : 设备类别(磁盘、分区、光盘等)

            MOUNTPOINT :挂载点

    4. 硬盘分区

    4.1. 使用fdisk管理分区

            作用:fdisk命令工具默认将磁盘划分为MBR格式的分区

            命令:fdisk 设备名

            注意:fdisk命令以交互方式进行操作的,在菜单中选择相 应功能键即可

    示例:

    例1:对/dev/sda硬盘进行分区,方式:P+P+P+E(l+l+l), 容量自定

    [root@server ~]# fdisk /dev/sda

    # 输入n表示新建

    # 输入p或直接回车因为此时默认分区p区(主分区)

    # 按照同样的方还可以默认创建俩个P区(主分区),

            当创建三个P区后默认选项就会变成e区(扩展分区)

    # 当到达需要输入分区大小时直接回 车,即剩余容量全部分配

    # 之后在添加分区时默认值会转变为逻辑分区

    # 最后输入命令 p , 显示分区列表

    若分区符合要求,则直接输入w 保存并退出(w意思是将磁盘信息写入同步)

    输入:[root@server ~]# lsblk /dev/sda

    注:若输入以上命令后若无法查看,则表示分区信息还未写入内核(常见情 况),输入partprobe命令 进行手动将分区信息同步到内 核,再不行就重启

           [root@server ~]# partprobe 

    例2:对/dev/sdb,进行分区,P+P+E (l+l) P:1G P:3G L: 10G L:剩余

    命令:        [root@server ~]# fdisk /dev/sdb

    命令参考例一,注:此题为P+P+E,因此需要在第三次选择分区时输入e。

    [root@server ~]# lsblk /dev/sdb

    4.2. 使用gdisk管理分区

            注意:

                    gdisk命令针对GPT分区格式,若在MBR分区格式 下进行添加分区,则所有数据会全部丢失切记一块硬 盘中fdisk与gdisk不能混用

            格式:gdisk         设备名

    示例:

            例:对/dev/sdc进行gdisk分区,3个分区,容量自定

    [root@server ~]# gdisk  /dev/sdc 

     输入n(大小写都可以gdisk不区分大小写):创建一个新的分区

     输入p查看分区表:

    输入w 回车在输入y回车:

    [root@server ~]# lsblk /dev/sdc

    若没有则输入  [root@server ~]# partprobe  进行手动将分区信息同步到内 核,再不行就重启

    注意:实际工作中,硬盘分区是应保留一定的自由空间,以备将 来分区空间不足时可以临时扩容

    5. 格式化

    5.1. 概念

    5.1.1. 格式化的目的

            当我们拿到了一张大白纸,首先为了使用方便要裁剪,然 后为了书写工整要先画格,这里的“白纸”就是原始的硬盘, 而“裁剪”意味着分区,然后的“画格”就是格式化,最后写入 内容

            格式化是对分区建立文件系统,文件系统是操作系统用于 明确存储设备或分区上的文件的方法和数据结构;即在存 储设备上组织文件的方法

    5.1.2. 文件系统组成-ext2

            组成:super block(超级块)、inode (索引块)、 block(数据块)

            super block:又称为“硬盘地图”,记录文件系统的整体信 息,如:inode/block块的总量、使用量、空闲块量、文 件系统格式等相关信息

            inode:记录文件的属性,一个文件占用一个inode块,并 且记录次文件的数据所在的block块的号码,默认为128B 大小,存储:文件访问权限、文件所有者与所属组、文件 大小、创建时间或修改内容时间、最有一次访问时间、特 殊权限、真实数据地址

            block块:记录实际文件的内容,在EXT2文件系统中分为 1KB、2KB、4KB容量,文件太大时,会占用多个数据块

    图:

    5.1.3. 查看文件系统格式

            方法:输入mkfs在键入tab(点击2次)进行命令补全,可显 示支持的文件系统格式

    例:        

            [root@server ~]# mkfs     

    5.2 格式化命令:

            mkfs.xfs           -参数         硬盘分区名

            mkfs.ext4         -参数         硬盘分区名

    参数:

            -f:强制格式化,已存在文件系统时需要使用

            -c:建立文件系统前先检查坏块。

            -V:输出建立文件系统的详细信息

    示例

    例1:对/dev/sda硬盘进行格式化

    首先查看可以格式化的分区:

    sda4不可以格式化(扩展风区)

    [root@server ~]# mkfs.xfs  /dev/sda1 

    [root@server ~]# mkfs.xfs  /dev/sda2

    [root@server ~]# mkfs.xfs  /dev/sda3 

    [root@server ~]# mkfs.xfs  /dev/sda5 

    [root@server ~]# mkfs.xfs  /dev/sda6 

    [root@server ~]# mkfs.xfs  /dev/sda7 

    使用相同的命令一次将其他分区进行格式化

    例2:格式化/dev/sda2 ,并使用inte的cpu多线程技术进 行多数据流读写系统

    [root@server ~]# mkfs.xfs  -d agcount=2 -f /dev/sda2 

             # -f:强制格式化

             # -d:指定核心数

    命令含义:使用CPU俩个核心对第一块硬盘的第二个分区进行格式化。

                            (需要强制格石化-f)

            查看CPU内核个数:        

                    [root@server ~]# grep  'processor'  /proc/cpuinfo 

    例3:制作大文件/filedev,容量2G,格式化为xfs文件系统

    [root@server ~]# dd if=/dev/zero of=/filedev count=2 bs=1GB

    [root@server ~]# mkfs.xfs -f /filedev 

    5.5. blkid命令

            作用:显示设备的UUID值和文件系统名称

            UUID:全局单一标识符(Universally Unique Identifier),Linux系统会给所有设备分配一个唯一的UUID 值,以方便挂载

             格式:    blkid         设备名

    示例:

    [root@server ~]# blkid /dev/sda1

    6. 挂载

    6.1. 概念

            mount point:挂载点,是一个目录,该目录是进入磁盘 分区(文件系统)的入口

            挂载:将一个分区或者设备挂载至挂载点目录,建立连 接,通过挂载点目录进入分区空间

    6.2. mount命令

    格式:mount         [-t 文件系统类型]         设备名         挂载点目录

    参数:

            -a:依照配置文件/etc/fstab的数据将所有未挂载的磁盘都 挂载上来

            -t:指定文件系统类型

            -o 特殊设备选项:挂载设备时使用逗号分割输入额外参数

    示例:

            例1:新建挂载目录,挂载/dev/sda1

                    [root@server ~]# mkdir /msda1

                    [root@server ~]# mount /dev/sda1 /msda1
                    [root@server ~]# lsblk /dev/sda               
               

            例2:使用UUID值挂载/dev/sda2

    [root@server ~]# blkid /dev/sda2
    /dev/sda2: UUID="ba64aeab-15ac-4723-87b2-ea29edf60145" TYPE="xfs" PARTUUID="4914d7d9-02"

    [root@server ~]# mkdir /mssda2
    [root@server ~]# mount UUID="ba64aeab-15ac-4723-87b2-ea29edf60145" /mssda2
    [root@server ~]# lsblk /dev/sda

            例3:挂载光盘

            查看挂载文件是否存在,若存在则直接挂载:

            [root@server ~]# ls / 

            [root@server ~]# mount /dev/sr0  /media/

            查看是否挂载成功:        [root@server ~]# lsblk /dev/sr0 

            例4:查看挂载信息

            [root@server ~]# mount

            [root@server ~]# mount | grep /dev/sda

    注意 :

            单一文件系统不应该被重复挂载在不同的挂载点(目录)中

            单一目录不应该重复挂载多个文件系统

            作为挂载点的目录,应为空目录,否则原有数据会隐藏

    例:

            [root@server ~]# echo "hello" > /mssda3/test.txt 

            [root@server ~]# ls /mssda3

            
            [root@server ~]# mount /dev/sda3 /mssda3/

            [root@server ~]# ls /mssda3/                # test.txt隐藏,卸载设备后恢复
            

    # lost+found目录作用:使用标准的ext文件系统格式才会 产生的一个目录,当软件或者硬件出现错误,导致文件系统不 一致时会把有问题的文件放到lost+found目录种,所以是一 种恢复丢失文件的方法,误删除时可使用mklost+found创建

    6.3. umount命令

            作用:卸载分区,要移除USB磁盘、U盘、光盘和硬盘时,需要 先卸载

            格式:umount 参数 设备名称[挂载点]

            参数:-f :强制卸载

    示例:

    卸载:分区sda1和sda2

    注意:若正使用文件系统,则应使用cd命令离开该目录后再卸载

        [root@server ~]# cd /mssda3
            [root@server mssda3]# ls
            [root@server mssda3]# umount /dev/sda3 
            [root@server mssda3]# cd ~      
        # 离开需要卸载的目 录
            [root@server ~]# umount /dev/sda3
            [root@server ~]# ls /mssda3    
        # 原先隐藏的文 件,卸载设别后会显示

    6.4. 开机挂载

            作用 :由于mount为手动挂载,重启后就会卸载,则修 改/etc/fstab配置文件,实现开机自动挂载

    例: [root@server ~]# lsblk  /dev/sda        查看挂载情况

        

    6.4. 配置文件分析

            路径:/etc/fstab
            [root@server ~]# vim /etc/fstab 

    共六列,分别为:

            设备名称或其UUID值

            挂载点目录

            文件系统名称

            文件系统参数:default 是否备份,0

            fsck:开机是否用fsck进行扇区检查,但xfs文件系统不 支持则为 0

     示例:

            将/dev/sda1挂载到/msda1中,并设置开机挂载,重启后 检查\

    [root@server ~]# blkid /dev/sda1        查看文件系统名称

    [root@server ~]# vim /etc/fstab 

    [root@server ~]# mount -a         # 挂载所有,进行测 试,
    [root@server ~]# lsblk /dev/sda

    [root@server ~]# reboot

    [root@server ~]# lsblk

    # 注意:为了防止语法错误,必须进行测试,否则开机无法 启动

    注意:

            根目录/ 是必须挂载的﹐而且一定要先于其它mount point 被挂载

            其它mount point 必须为已建立的目录,可任意指定,但 一定要遵守必须的系统目录架构原则(FHS)

            所有mount point 在同一时间之内﹐只能挂载一次。

            所有partition 在同一时间之内﹐只能挂载一次。

    6.5. 特殊挂载

    6.5.1. 挂载大文件

            当只有一个分区,剩余空间还很大,自由空间很小不能进 行新的分区,则可以在当前分区制作一个大文件,在进行 挂载,相当于一个新的分区来使用

            例:建立根目录下新建1GB大文件,挂载并开机挂载使用

            [root@server ~]# dd if=/dev/zero of=/loopdev count=1 bs=1GB

            [root@server ~]# mkfs.xfs -f /loopdev 格式化(-f        强制格式化)

            [root@server ~]# mkdir /mloop
            [root@server ~]# mount -o loop /loopdev  /mloop/
        挂载大文件
      -o 特殊设备选项

    查看挂载情况:

    实现开机挂:

            [root@server ~]# vim /etc/fstab 
            [root@server ~]# mount -a

    6.5.2. 增加swap分区

             swap分区:类似于Windows系统虚拟内存的功能,将一 部分硬盘空间虚拟成内存来使用,从而解决内存容量不足的情况,因为swap毕竟是用硬盘资源虚拟的,所以速度 上比真实物理内存要慢

    查看:

    添加过程:

                    新建分区->格式化该分区->启用新的swap->查 看系统信息->挂载

    例1:/dev/sdd中划分2G空间为swap分区,并开机挂载使 用

    [root@server ~]# gdisk  /dev/sdd  在虚拟硬盘/devsdd上划分一个大小为2G的区域。步骤如下:
     

    保存退出并查看分区情况:

    # swap 格式化        [root@server ~]# mkswap /dev/sdd1 

            # 查看容量        [root@server ~]# free -h   发现swap并没增加
     

    # 启用分区        [root@server ~]# swapon /dev/sdd1
    # 查看容量        [root@server ~]# free -h        发现swap增加
     

    # 开机挂载        [root@server ~]# vim /etc/fstab

    检测并重启:

    [root@server ~]# mount -a
    [root@server ~]# reboot   

    例2:使用大文件建立swap

    建立大文件:[root@server ~]# dd if=/dev/zero of=/swapdev count=2 bs=1G

    格式化大文件:[root@server ~]# mkswap /swapdev 

    根据所提示的建议修改文件权限:[root@server ~]# chmod 600 /swapdev 

    实现开机挂载:[root@server ~]# vim /etc/fstab 

    检测:        [root@server ~]# mount -a

    启用大文件:        [root@server ~]# swapon /swapdev
    查看容量:          [root@server ~]# free -h

            若列表中容量没有增加则输入:[root@server ~]# swapon -s     刷新列表

    注意:

            swap在服务器中有时会关闭,如数据库服务器,但一般 用于服务器内存剩余空间有一定压力时会触发使用swap 空间,则swap空间大小设置一般为:当物理内存小于2G 时,swap分区大小为物理内存的2倍;超过2G的部分, swap分区大小跟物理内存相等

            可以使用 swapoff命令停用部分swap空间

    7. 查看磁盘空间使用量

    7.1. df命令

    作用:

            列出文件系统的磁盘空间占用情况

            df,disk free,通过文件系统来快速获取空间大小的信 息,当我们删除一个文件的时候,这个文件不是马上就在 文件系统当中消失了,而是暂时消失了,当所有程序都不 用时,才会根据OS的规则释放掉已经删除的文件, df记 录的是通过文件系统获取到的文件的大小,他比du强的地 方就是能够看到已经删除的文件,而且计算大小的时候, 把这一部分的空间也加上了,更精确了

    格式:

                    df         -参数         目录或文件名

    参数:

            -a:列出所有的文件系统,包括系统特有的/proc等文件系 统

            -k:以KB的容量显示各文件系统

            -m:以MB的容量显示各文件系统

            -h:以人们较易阅读的GB,MB,KB等格式自行显示

            -H:以M=1000K替代M=1024K的进位方式

            -T:连同该分区的文件系统名称(例如ext3)也列出

            -i:不用硬盘容量,而以inode的数量来显示

            # 由于df主要读取的数据几乎都是针对整个文件系统,因此 读取的范围主要是在Super block内的信息,所以这个命令 显示结果的速度非常快速。

    示例:

    7.2. du命令

    作用:

            du:显示磁盘空间使用量(统计目录或文件所占磁盘空间 大小),在默认情况下,文件大小的单位是KB。 du,disk usage,是通过搜索文件来计算每个文件的大小 然后累加,

            du能看到的文件只是一些当前存在的,没有被 删除的。他计算的大小就是当前他认为存在的所有文件大小的累加和,当文件系统也确定删除了该文件后,这时候 du与df就一致了

    格式:

            du         -参数         文件或目录名

    参数:

            -a : 列出所有的文件与目录容量,因为默认仅统计目录下面 的文件量而已;

            -h : 以人们较易读的容量格式(G/M)显示;

            -s : 列出总量,而不列出每个个别的目录占用了容量;

            -S : 不包括子目录下的总计,与-s有点差别;

            -k : 以KB列出容量显示;

            -m : 以MB列出容量显示。

    8. RAID

    8.1. 概念

            当今CPU性能每年可提升30%-50%但硬盘仅提升7%

            硬盘在服务器中需要持续、频繁、大量的I/O操作,故障 机率较大,则需要对硬盘进行技术改造,提升读写性能、 可靠性

            1988年,加利福尼亚大学伯克利分校首次提出并定义了 RAID技术概念

            原理:RAID(Redundant Array of Independent Disks) 将多个硬盘设备组成一个大容量、安全更好的磁盘阵列, 并将数据切割成多个片段后分别存储到不同的物理硬盘 上,利用分散读写技术来来提升硬盘性能,同时也备份了 多个副本到不同硬盘中,拥有了备份冗余功能

    8.2. 常见RAID组建方案

    RAID0:

            原理:把至少2块硬盘通过硬件或软件方式串联,组成一 个大的卷组,并将数据依次写入到各个硬盘

            优点:数据同步传输,读取/写入分开,性能大大提升

            缺点:若任意一块硬盘故障会导致整个系统的数据损坏, 无备份冗余能力错误修复能力

            总结:使用率100%,至少2块磁盘才能使用,优点是快,提 升磁盘的读写速度,缺点是不安全

            图:

    RAID1:

            产生原因:若生产环境对硬盘的读写速度没有较大要求, 但希望增加数据安全性时可使用RAID

            原理:把至少2块硬盘绑定起来,写入数据时将数据同时 也写入另一或多块硬盘中,

            本质:多个硬盘作为镜像备份

            优点:数据备份冗余安全性大大提升

            缺点:硬盘利用率下降

            总结:是镜像,使用两块磁盘,一式两份的方式,支持容 错,冗余,数据安全不丢失,缺点是速度不快,使用率 50%,成本较大。

            图:

     RAID5

            产生原因:兼顾“读写速度”、“数据安全”、“成本”的一种折 中方式

            原理:需至少三块硬盘,将数据分块存储到不同硬盘中, 硬盘中必须存储其它一个硬盘的parity(奇偶校验信息)

            优点:兼顾性能,通过“奇偶校验”替代“镜像备份”

            缺点:硬盘数据安全性较低

            总结:使用率(n-1)/n*容量,磁盘坏了会立即补上,数据会 恢复

            图:

    RAID10 (主流)

            本质:RAID1+RAID0 的组合

            原理:至少需要4块硬盘,先制作两两的RAID1阵列,以保 证安全性,在两两制作RAID0,以提高读写速度

            优点:兼具速度和安全性

            缺点:成本较高

             图:

            

    8.3. mdadm命令

    作用:管理系统中的RAID磁盘阵列

    稍后完成。。。。

  • 相关阅读:
    数据结构:AVLTree的插入和删除的实现
    四、Ribbon负载均衡
    近期的一些小总结(关于TCP/IP协议相关的)
    计算机毕业设计Java汽车商城系统(源代码+数据库+系统+lw文档)
    IP证书怎么申请,如何实现加密保护
    公司新来的实习生问我SpringBoot多个环境的配置方式
    CBAM学习笔记
    BUUCTF [BJDCTF2020]鸡你太美 1
    CSS 字体颜色渐变
    Linux vi/vim
  • 原文地址:https://blog.csdn.net/2302_77035737/article/details/133767851