第十二章 磁盘管理

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

稍后完成。。。。

相关推荐
多多*17 分钟前
OJ在线评测系统 登录页面开发 前端后端联调实现全栈开发
linux·服务器·前端·ubuntu·docker·前端框架
王哲晓1 小时前
Linux通过yum安装Docker
java·linux·docker
gopher95111 小时前
linux驱动开发-中断子系统
linux·运维·驱动开发
码哝小鱼2 小时前
firewalld封禁IP或IP段
linux·网络
鼠鼠龙年发大财2 小时前
【x**3专享】安装SSH、XFTP、XShell、ARM Linux
linux·arm开发·ssh
nfgo2 小时前
快速体验Linux发行版:DistroSea详解与操作指南
linux·ubuntu·centos
Rookie_explorers2 小时前
Linux下go环境安装、环境配置并执行第一个go程序
linux·运维·golang
weixin_424215843 小时前
shell运算实战案例-KFC点餐系统
linux·centos
小黑爱编程3 小时前
【LInux】HTTPS是如何实现安全传输的
linux·安全·https
BeyondESH3 小时前
Linux线程同步—竞态条件和互斥锁(C语言)
linux·服务器·c++