一、虚拟机添加新硬盘
物理设备的命名规则
- 传统设备
- 固态硬盘
nvmen磁盘号[p1-10]
添加新硬盘
过程
- 关机
- 编辑虚拟机设置
后续根据自己需求配置
二、硬盘分区概述
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个字节, 分区表里面可以记录四个分区信息描述
- MBR分区表中最高支持磁盘容量为2.2TB
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语言编写, 支持较多的平台
三、lsblk命令
作用:查看磁盘信息
格式:lsblk 参数 设备名
-d | 仅列出硬盘本身信息,不显示分区信息 | ![]() |
-f | 列出磁盘的内的文件系统名称 | ![]() |
-i | 使用ASCII码格式输出信息 | ![]() |
-t | 显示磁盘的详细信息 | ![]() |
-p | 显示设备完整名称 | ![]() |
显示内容分析:
NAME | 设备名称,默认省略前导/dev 目录名 |
MAJ:MIN | 主要:次要设备代码 |
RM | 是否为可移动设备 |
SIZE | 容量 |
RO | 是否为只读 |
TYPE | 设备类别(磁盘、分区、光盘等) |
MOUNTPOINT | 挂载点 |
四、硬盘分区管理
fdisk管理分区
- fdisk命令工具默认将磁盘划分为==MBR==格式的分区
- 命令:fdisk 设备名
- 注意:fdisk命令以交互方式进行操作的,在菜单中选择相应功能键即可
指令 | 作用 | 指令 | 作用 |
a | 调整磁盘的启动分区 | p | 显示当前磁盘的分区信息 |
d | 删除磁盘分区 | t | 更改分区类型 |
l | 显示所有支持的分区类型 | u | 切换所显示的分区大小单位 |
m | 查看所有指令的帮助信息 | n | 创建新分区 |
q | 不保存更改,退出fdisk命令 | w | 把修改写入磁盘分区表,然后退出fdisk命令 |
g | 新建一个空的GPT分区表 | o | 新建一个空的DOS分区表 |
对于大于2.2T的硬盘分区:
gdisk管理分区
- 注意:gdisk命令针对GPT分区格式,若在MBR分区格式下进行添加分区,则所有数据会全部丢失, 切记:一块硬盘中fdisk与gdisk不能混用
- 格式:gdisk 设备名
同步分区到内核
👾注意:实际工作中,硬盘分区是应保留一定的自由空间,以备将来分区空间不足时可以临时扩容
五、格式化
格式化的目的
- 当我们拿到了一张大白纸,首先为了使用方便要裁剪,然后为了书写工整要先画格,这里的“白纸” 就是原始的硬盘,而“裁剪”意味着分区,然后的“画格”就是格式化,最后写入内容
- 格式化是对分区建立文件系统,文件系统是操作系统用于明确存储设备或分区上的文件的方法和数 据结构;即在存储设备上组织文件的方法
查看文件系统格式
- 方法:输入mkfs在键入tab(点击2次)进行命令补全,可显示支持的文件系统格式
格式化命令
mkfs.xfs -参数 硬盘分区名
参数
-f | 强制格式化,已存在文件系统时需要使用 |
-c | 建立文件系统前先检查坏块 |
-V | 输出建立文件系统的详细信息 |
六、blkid命令
- 显示设备的UUID值和文件系统名称
- UUID:全局单一标识符(Universally Unique Identifier),Linux系统会给所有设备分配一个唯一的 UUID值,以方便挂载
格式
blkid 设备名
blkid # 全部查看
七、挂载
- mount point:挂载点,是一个目录,该目录是进入磁盘分区(文件系统)的入口
- 挂载:将一个分区或者设备挂载至挂载点目录,建立连接,通过挂载点目录进入分区空间
mount命令
mount [参数] 设备名 挂载点目录
参数:
-a | 依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上来 |
-t | 指定文件系统类型 |
-o | 特殊设备选项:挂载设备时使用逗号分割输入额外参数 |
- 使用设备名挂载
- 使用UUID值挂载
[root@server ~]# blkid /dev/sda2
/dev/sda2: UUID="27301fb0-2d51-40a7-8508-fd11550c4aaa" TYPE="xfs"
PARTLABEL="Linux filesystem" PARTUUID="93b2b535-d875-44e4-9134-87b0c203d046"
[root@server ~]# mount UUID="27301fb0-2d51-40a7-8508-fd11550c4aaa" /mnt/
- 挂载光盘
[root@server ~]# mount /dev/sr0 /mnt/
mount: /media: WARNING: source write-protected, mounted read-only. #只读挂载
- 查看挂载信息
[root@server ~]# mount
[root@server ~]# mount | grep /dev/sda
- 只读挂载
- 修改权限重新挂载(不停机更新)
👺注意
- 单一文件系统不应该被重复挂载在不同的挂载点(目录)中
- 单一目录不应该重复挂载多个文件系统
- 作为挂载点的目录,应为空目录,否则原有数据会隐藏
[root@server ~]# mkdir /msda3
[root@server ~]# echo "hello" > /msda3/test.txt
[root@server ~]# ls /msda3
test.txt
[root@server ~]# mount /dev/sda3 /msda3
[root@server ~]# ls /msda3 # test.txt隐藏,卸载设备后恢复
umount命令
- 卸载分区,要移除USB磁盘、U盘、光盘和硬盘时,需要先卸载
格式:
umount [参数] 设备名称 [挂载点]
参数:
-f | 强制卸载 |
[root@server ~]# umount /dev/sda1
[root@server ~]# umount /dev/sr0
暴力解占:
👹注意
- 若正使用文件系统,则应使用cd命令离开该目录后再卸载
开机挂载
配置文件:
- 路径:/etc/fstab
应用配置文件:
异常启动
特殊挂载
挂载大文件
- 当只有一个分区,剩余空间还很大,自由空间很小不能进行新的分区,则可以在当前分区制作一个 大文件,在进行挂载,相当于一个新的分区来使用
增加swap分区
- swap分区:类似于Windows系统虚拟内存的功能,将一部分硬盘空间虚拟成内存来使用,从而解决内存容量不足的情况,因为swap毕竟是用硬盘资源虚拟的,所以速度上比真实物理内存要慢(内存将暂时闲置的资源放到硬盘缓解内存空间压力)
swap空间容量推荐:
内存大小 | 2G | 4G | 8G | 16G | 64G |
swap大小 | 2G | 6G | 16G | 64G | 64G |
查看:
free -h
添加过程:
新建分区->格式化该分区->启用新的swap->查看系统信息->挂载
swap开机挂载:
swap优先级更改:
①临时更改
②开机挂载配置文件永久更改
使用大文件建立swap
开机挂载:
八、查看磁盘空间使用量
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内的信息,所以这个命令显示结果的速度非常快速。
du命令
- du:显示磁盘空间使用量(统计目录或文件所占磁盘空间大小),在默认情况下,文件大小的单位 是KB
- du,disk usage,是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前存在的,没有被删除的。他计算的大小就是当前他认为存在的所有文件大小的累加和,当文件系统也确定删除了该文件后,这时候du与df就一致了
格式:
du -参数 文件或目录名
参数:
-a | 列出所有的文件与目录容量,因为默认仅统计目录下面的文件量而已; |
-h | 以人们较易读的容量格式(G/M)显示; |
-s | 列出总量,而不列出每个个别的目录占用了容量; |
-S | 不包括子目录下的总计,与-s有点差别; |
-k | 以KB列出容量显示; |
-m | 以MB列出容量显示。 |
九、在磁盘中查找文件
find命令
在系统中如果需要通过文件的元数据来对文件进行查找通常使用find命令
参数
-name | 通过名字方式查找 | ![]() |
-user | 通过文件拥有者身份查找 | ![]() |
-group | 通过文件拥有组身份查找 | ![]() |
-type f d s b l
| 通过文件类型查找 | ![]() |
-perm 222 /222 -222 | 通过文件权限查找 |
|
-exec | 处理查找出的文件 | ![]() |
-maxdepth 1 | 设定查找深度为1 | ![]() |
-mindepth 1 | 设定查找浅度为1 | ![]() |
-cmin 1 -1 +1 | 文件的最后一次更改时间 |
|
-size +|-| 1M | 通过文件大小查找 | ![]() |
-o | 条件或 | ![]() |
-a | 条件与 | ![]() |
-not | 条件非 | ![]() |
十、设备中的链接
硬盘数据分类
- 用户数据(user data):即文件的数据块(data block),存储数据真实空间
- 元数据(metadata):存储文件附加属性,如:文件的大小、创建的时间、所有者等信息
硬连接
- linux系统允许多个文件指向同一个inode,即允许一个文件拥有多个有效地路径名
- 理解:硬连接就是指向原始文件inode的指针
建立硬连接
格式:
ln -参数 源文件 目标连接文件
硬连接文件id一致,两文件一样,两文件互为硬连接,硬连接文件会占用和源文件一样的存储空间
硬连接不可用于目录,不可以跨分区,删除源后硬连接文件仍可以使用
软连接
- 软连接是一种符号连接,类似于windows的“快捷方式”,仅包含所连接的路径名
格式:
ln -s 源文件 目标连接名
软连接文件id不一致,软连接文件指向源文件,软连接文件不会占用和源文件一样的存储空间,删除源文件后软连接文件不可访问
软连接可以用于目录,可以跨分区,删除源后软连接文件不可以使用
十一、RAID
- 硬盘在服务器中需要持续、频繁、大量的I/O操作,故障机率较大,则需要对硬盘进行技术改造,提 升读写性能、可靠性
- RAID(Redundant Array of Independent Disks)将多个硬盘设备组成一个大容量、安全更 好的磁盘阵列,并将数据切割成多个片段后分别存储到不同的物理硬盘上,利用分散读写技术来来 提升硬盘性能,同时也备份了多个副本到不同硬盘中,拥有了备份冗余功能
常见RAID组建方案
RAID0
- 原理:把至少2块硬盘通过硬件或软件方式串联,组成一个大的卷组,并将数据依次写入到各个硬盘
- 优点:数据同步传输,读取/写入分开,性能大大提升
- 缺点:若任意一块硬盘故障会导致整个系统的数据损坏,无备份冗余能力错误修复能力
- 总结:使用率100%,至少2块磁盘才能使用,优点是快,提升磁盘的读写速度,缺点是无备份不安全
RAID1
- 产生原因:若生产环境对硬盘的读写速度没有较大要求,但希望增加数据安全性时可使用RAID
- 原理:把至少2块硬盘绑定起来,写入数据时将数据同时也写入另一或多块硬盘中
- 本质:多个硬盘作为镜像备份
- 优点:数据备份冗余安全性大大提升
- 缺点:硬盘利用率下降
- 总结:是镜像,使用两块磁盘,一式两份的方式,支持容错,冗余,数据安全不丢失,缺点是速度 不快,使用率50%,成本较大。
RAID5
- 产生原因:兼顾“读写速度”、“数据安全”、“成本”的一种折中方式
- 原理:需至少三块硬盘,将数据分块存储到不同硬盘中,硬盘中必须存储其它一个硬盘的parity(奇 偶校验信息)
- 优点:兼顾性能,通过“奇偶校验”替代“镜像备份”
- 缺点:硬盘数据安全性较低
- 总结:使用率(n-1)/n*容量,磁盘坏了会立即补上,数据会恢复
RAID10 (主流)
- 本质:RAID1+RAID0 的组合
- 原理:至少需要4块硬盘,先制作两两的RAID1阵列,以保证安全性,在两两制作RAID0,以提高读 写速度
- 优点:兼具速度和安全性
- 缺点:成本较高
mdadm命令
- 管理系统中的RAID磁盘阵列
格式:mdadm [模式] <RAID设备名> -参数 [成员设备名称]
参数
-a | 添加一个成员设备 |
-n | 指定硬盘数量 |
-l | 指定RAID级别 |
-C | 创建RAID |
-v | 显示过程 |
-f | 标记设备损坏 |
-r | 移除设备 |
-Q | 查看摘要 |
-D | 查看详细信息 |
-S | 停止RAID磁盘阵列 |
示例
- 关机添加五块硬盘
开启监控
- mdadm创建RAID 10
监控查看
硬盘故障
👾修复损坏设备全程不影响RAID的使用
RAID挂载
开机挂载格式
取消RAID
👹注意:如果不执行第三步,重启后RAID仍会运行。
实际生产环境中,若取消RAID10之前必须备份出其数据,否则已存在数据无法使用
十二、管理逻辑卷
- 硬盘分区或部署为RAID后在修改分区大小时就非常不容易,此时用户随着实际的需求变化而动态调 整硬盘分区大小时受到限制,无灵活性
- LVM(Logical Volume Manager )允许用户对硬盘资源进行动态调整
认识Linux逻辑卷
- LVM是 Logical Volume Manager(逻辑卷管理)的简写,LVM将若干个磁盘或者磁盘分区连接为一个 整块的卷组,形成一个存储池
- 通过LVM技术,屏蔽了磁盘分区的底层差异,管理员可以在卷组上任意创建逻辑卷,并进一步在逻 辑卷上创建文件系统
- 管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管 理和分配
- 假设有三块磁盘/dev/sdb、/dev/sdc和/dev/sdd用来划分逻辑卷,LVM模型如图所示:
LVM基本概念
- PE(physical extent)物理区域:物理区域是物理卷中可用于分配的最小存储单元,物理区域的大 小默认为4MB。物理区域大小一旦确定将不能更改,同一卷组中的所有物理卷的物理区域大小需要 一致
- 物理卷(physical volume):简称PV,物理卷可以是整个硬盘、硬盘分区或从逻辑上与磁盘分区 具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁 盘等)比较,却包含有与LVM相关的管理参数
- 卷组(Volume Group):简称VG,可以看成单独的逻辑磁盘,建立在PV之上,一个卷组中至少 要包括一个PV,在卷组建立之后可以动态的添加PV到卷组中。卷组的名称可以自定义
- 逻辑卷(logical volume):简称LV,相当于物理分区。逻辑卷建立在卷组之上,卷组中的未分配 空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态的扩展或缩小空间。系统中的多个逻辑卷, 可以属于同一个卷组,也可以属于不同的多个卷组
部署逻辑卷
常用的LVM部署命令
功能/命令 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
扫描 | pvscan | vgscan | lvscan |
建立 | pvcreate | vgcreate | lvcreate |
显示 | pvdisplay | vgdisplay | lvdisplay |
删除 | pvremove | vgremove | lvremove |
扩展 | vgextend | lvextend | |
缩小 | vgreduce | lvreduce |
示例
进入磁盘管理
两硬盘均作上述配置
打开监控
格式化逻辑卷
挂载
开机挂载格式
监控效果
扩展逻辑卷
👺注意:使用 -L +2G增加了2G;如果增加到3G,使用-L 3G
效果
↑如果扩展容量超出vg最大容量,则不可扩展,需新建pv来添加vg容量
↑vg扩容了,可以扩大lv了
缩减逻辑卷
更改格式化方式
注:这种格式的扩展方式为:
效果:
效果:
↑正在使用的分区无法缩减,如需缩减vg要缩减未使用的分区,或把正在使用的分区数据迁移
效果:
效果:
效果:
销毁卷
系统引导修复
一.通电
启动所有硬件并为进入系统做准备
问题处理:
检查所有电源设备, 确定供电设备正常,所有线缆是否插紧,检查线缆是否有损坏
二.BIOS环境检测
检测硬件是否正常 检测硬件是否插紧
三.磁盘引导阶段
找到/boot分区
如果此阶段出现问题,那么系统会处于屏并闪烁光标
模拟问题命令:
dd if=/dev/zero of=/dev/nvme0n1 bs=446 count=1
#/dev/nvme0n1 是系统boot分区所在磁盘设备
#此命令标识用无限零字节覆盖/dev/nvme0n1上最前面的446个字节(mbr主引导记录,负责找到/boot)
问题提示信息:
解决问题:
1.进入挽救模式
从光盘启动
按回车得到shell后,开始执行修复命令,修复原理是把mbr从新安装到启动设备
注意:rhel7是chroot /mnt/sysimage/
# chroot /mnt/sysroot #从挽救模式的环境切换到系统环境
# fdisk -l #通过命令找出启动设备(*在那个设备上那个就是启动设备)
# grub2-install 启动设备(/dev/nvme0n1)
# exit
# exit
等待系统重启,系统修复完毕
四.文件引导阶段
在文件引导阶段,系统会读取/boot/grub2/grub.cfg (自动引导文件),在此文件中指定系统系统过程中读 取什么文件,加载什么参数
如何修改grub参数(以修改时间为例)
[root@servera default]# vim /etc/default/grub #生成grub.cfg时使用的默认参数
GRUB_TIMEOUT=10 #设定grub启动时等待时间为10秒
[root@servera default]# grub2-mkconfig > /boot/grub2/grub.cfg #生成新grub.cfg
问题:当/boot/grub2/grub.cfg文件丢失,那么系统将无法完成自动启动
1.设置问题出现
记住/分区位置
#确定/boot分区所在系统位置
#确定/分区位置
[root@rhel9 Desktop]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 4096 0 4096 0% /dev
tmpfs 3049264 0 3049264 0% /dev/shm
tmpfs 1219708 9884 1209824 1% /run
/dev/nvme0n1p3 103218176 5189108 98029068 6% / #/分区
/dev/nvme0n1p1 983040 305688 677352 32% /boot #/boot分区 (hd0,1)
/dev/sr0 10825576 10825576 0 100% /rhel9
tmpfs 609852 92 609760 1% /run/user/0
#问题重现
[root@servera ~]# rm -fr /boot/grub2/grub.cfg #此文件如果被删除,并把系统重新启动,那么
出现如下情况:
如何解决
grub> set root=(hd0,msdos1) #指定boot分区位置
#hdn 便是boot分区在那个硬盘上
#msdosn在那个分区
# 指定内核文件,只读挂载/设备
grub> linux16 /vmlinuz-5.14.0-427.13.1.el9_4.x86_64 ro root=/dev/nvme0n1p3 selinux=0
grub> initrd16 /initramfs-5.14.0-427.13.1.el9_4.x86_64.img
grub> boot
#注意: 以上步骤只能完成本次引导,系统重启后仍然需要手动引导
#永久恢复
#进入系统后执行
#grub2-mkconfig > /boot/grub2/grub.cfg
五、恢复内核启动文件
1.设置问题出现
2.然后和四一样引导启动,进入系统
3.进入系统后恢复内核启动文件
六、内核文件全丢失情况
启动内核过程系统都完成了一下工作:
1.加载内核文件 /boot/vmlinuz-5.14.0-427.13.1.el9_4.x86_64
2.只读挂载/设备
3.读取/etc/fstab文件,确定磁盘挂载策略
4.读取/etc/sysconfig/selinux 确定selinux状态
5.加载系统时钟
问题:内核文件全丢失
设置问题出现:
rm -fr /boot/vmlinuz-5.14.0-427.13.1.el9_4.x86_64
重启后这界面:
如何修复:
1.进入主机bios让主机从光盘启动
👆代码:
chroot /mnt/sysroot
mount /dev/cdrom /media
cd /media/BaseOS/Packages/
cp kernel-core-5.14.0-427.13.1.el9_4.x86_64.rpm /mnt
cd /mnt
]# ls
kernel-core-5.14.0-427.13.1.el9_4.x86_64.rpm
rpm2cpio kernel-core-5.14.0-427.13.1.el9_4.x86_64.rpm | cpio -id
cd lib/modules/5.14.0-427.13.1.el9_4.x86_64/
cp vmlinuz /boot/vmlinuz-$(uname -r)
exit
exit
解释:rpm2cpio kernel-core-5.14.0-427.13.1.el9_4.x86_64.rpm | cpio -id这条在mnt里将rpm文件解包成lib目录
修复完成后需要把光盘启动切换至硬盘启动:
F10然后正常启动就行了
七、系统初始化文件丢失
系统初始化作用
使用初始化环境开启系统所有开机启动服务
设置问题出现:
rm -fr /boot/initramfs-5.14.0-427.13.1.el9_4.x86_64.img
reboot
异常启动界面:
问题解决:
1.打开电源时进入固件
2.通过光盘引导进入挽救模式(详情见上文)
3.恢复文件
chroot /mnt/sysroot
mount /dev/cdrom /media/
cd /media/BaseOS/Packages/
rpm -ivh kernel-core-5.14.0-427.13.1.el9_4.x86_64.rpm --force
exit
exit
4.关闭后选择打开电源时进入固件,设置启动顺序,把硬盘启动放在第一位。F10保存退出后正常启动
八、/boot/里的文件全部丢失
问题制造:rm -fr /boot/*
解决:
按三、六、七、四顺序执行修复即可