第十二章 磁盘管理

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** ![](https://file.jishuzhan.net/article/1713043903206133761/e5434e8168bb6d823c264179eb2f0e71.webp)

**例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** ![](https://file.jishuzhan.net/article/1713043903206133761/10d979c8b7745f11d154df6b517ff57b.webp)

例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 # 原先隐藏的文 件,卸载设别后会显示** ![](https://file.jishuzhan.net/article/1713043903206133761/6fcf5127cfb88549e9c0b261dc38c498.webp)

6.4. 开机挂载

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

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

6.4. 配置文件分析

**路径:/etc/fstab

root@server \~\]# vim /etc/fstab** ![](https://file.jishuzhan.net/article/1713043903206133761/1d1557a80145f12b1f3aaa4e621d49bc.webp) **共六列,分别为:** 设备名称或其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 特殊设备选项** ![](https://file.jishuzhan.net/article/1713043903206133761/3ed35c10f4f6994c059a211a1bd517ba.webp) **查看挂载情况:** **![](https://file.jishuzhan.net/article/1713043903206133761/f27eefd427748e26dfd47832707c58ff.webp)** **实现开机挂:** **\[root@server \~\]# vim /etc/fstab \[root@server \~\]# mount -a** ![](https://file.jishuzhan.net/article/1713043903206133761/dd9c7ac6cc8209376e9feabc9ec3d5a5.webp)

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** ![](https://file.jishuzhan.net/article/1713043903206133761/5de9c51441c4fe290289c3639f509741.webp)

**例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磁盘阵列

稍后完成。。。。

相关推荐
To_再飞行25 分钟前
K8s 调度管理
linux·云原生·kubernetes
2302_7995257443 分钟前
【Hadoop】Hadoop集群安装中出现的问题
linux·hadoop
刘一说1 小时前
Linux调试命令速查:Java/微服务必备
java·linux·微服务
枫の准大一1 小时前
【Linux游记】基础指令篇
linux
ypf52081 小时前
OrbStack 配置国内镜像加速
linux
Hello.Reader1 小时前
一文通关 Proto3完整语法与工程实践
java·linux·数据库·proto3
Hello.Reader1 小时前
一文吃透 Protobuf “Editions” 模式从概念、语法到迁移与实战
linux·服务器·网络·protobuf·editions
陌上花开缓缓归以1 小时前
linux ubi文件系统
linux
口嗨农民工2 小时前
exiftool 分析jpeg图片使用
linux
大明者省2 小时前
pycharm解释器使用anaconda建立的虚拟环境里面的python,无需系统里面安装python。
linux·python·pycharm