linux磁盘管理基本管理
开课
本章我们将学习到磁盘管理的相关知识,这部分知识在我们以后的工作中非常重要,它可以让我们知道如何去规划磁盘,如何去使用磁盘,如何去提高磁盘的利用率,这些都会影响服务器的性能和效率,而服务器性能和效率会影响到我们在行业中的个人价值。
知识点
- 基本管理
- 介绍
- 工作原理
- 性能指标
- 磁盘的使用方法
- 基本分区管理
- GPT&LVM
- GPT磁盘管理
- LVM介绍&概念
- LVM管理
- 扩展
- RAID
- RAID介绍
- 常见RAID级别
- 软RAID
- RAID的使用
课程目标
- 能够知道磁盘的作用,相关概念,磁盘的性能指标
- 能够掌握磁盘的使用方法
- 能够管理GPT磁盘
- 能够说出LVM的相关概念及使用
- 能够了解如何扩容swap及LVM的额外应用
- 能够说出raid的分类及优缺点
- 能够熟练使用相关命令操作raid
一、磁盘介绍
磁盘:计算机中的外部存储设备,负责存储计算机数据,并且断电后也能保持数据不丢失。
分类:
按照物理结构:机械磁盘,固态磁盘
按照接口:IDE、SCSI、SATA、SAS、mSATA、M.2、NVME、PCIe
按照尺寸:
机械硬盘:1.8寸 2.5寸 3.5寸
固态硬盘:SATA: 2.5寸
M.2: 2242、2260、2280
二、熟悉磁盘的工作原理
机械磁盘的读写数据依靠电机带动盘片转动来完成数据读写的。
机械磁盘剖析图
为了使磁盘内部清洁,磁盘是在真空特殊环境中制作的,不能随意拆卸,拆开后基本报废了
机械磁盘工作是依靠马达带动盘片转动,通过磁头来读取磁盘上的数据。
磁盘术语
磁盘
硬盘中一般会有多个盘片组成,每个盘片包含两个面,每个盘面都对应地有一个读/写磁头。受到硬盘整体体积和生产成本的限制,盘片数量都受到限制,一般都在5片以内。盘片的编号自下向上从0开始,如最下边的盘片有0面和1面,再上一个盘片就编号为2面和3面。
磁头
负责读取盘面数据的设备
磁道
从盘片的最内侧向外有很多同心圆圈,我们称为磁道
扇区
从圆心向外画直线,可以将磁道划分为若干个弧段,称之为扇区,一个扇区通常为512B
磁柱
硬盘通常由重叠的一组盘片构成,每个盘面都被划分为数目相等的磁道,并从外缘的“0”开始编号,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。磁盘的柱面数与一个盘面上的磁道数是相等的。由于每个盘面都有自己的磁头,因此,盘面数等于总的磁头数。
三、磁盘的性能指标
影响磁盘性能的指标
寻道时间(seek time)【和 转速 相关】:Tseek,是指将读写磁头移动至正确的磁道上所需要的时间。寻道时间越短,I/O操作越快,目前磁盘的平均寻道时间一般在3-15ms
旋转延迟:Trotation,是指盘片旋转将请求数据所在的扇区移动到读写磁头下方所需要的时间。旋转延迟取决于磁盘转速,通常用磁盘旋转一周所需时间的1/2表示。比如:7200rpm的磁盘平均旋转延迟大约为60*1000/7200/2 = 4.17ms,而转速为15000rpm的磁盘其平均旋转延迟为2ms。
数据传输时间:Ttransfer,是指完成传输所请求的数据所需要的时间
衡量磁盘性能的指标
IOPS:IOPS(Input/Output Per Second)即每秒的输入输出量(或读写次数),即指每秒内系统能处理的I/O请求数量。随机读写频繁的应用,如小文件存储等,关注随机读写性能,IOPS是关键衡量指标。可以推算出磁盘的IOPS = 1000ms / (Tseek + Trotation + Transfer),如果忽略数据传输时间,理论上可以计算出随机读写最大的IOPS。常见磁盘的随机读写最大IOPS为:
- 7200rpm的磁盘 IOPS = 76 IOPS
- 10000rpm的磁盘IOPS = 111 IOPS
- 15000rpm的磁盘IOPS = 166 IOPS
**throughput :**吞吐量指单位时间内可以成功传输的数据数量。 单位为(m/s G/s)
**文件系统:**是告知操作系统使用何种方法和数据结构在存储设备或分区上读写数据的;是分区数据管家,负责如何将数据写入磁盘或者从磁盘读出
NTFS EXT3 EXT4 XFS ISO9660
具体有多少 man mount -t
adfs, affs, autofs, cifs, coda, coherent, cramfs,debugfs, devpts, efs, ext, ext2, ext3, ext4, hfs, hfsplus, hpfs,iso9660, jfs, minix, msdos, ncpfs, nfs, nfs4, ntfs, proc, qnx4,ramfs, reiserfs, romfs, squashfs, smbfs, sysv, tmpfs, ubifs,udf, ufs, umsdos, usbfs, vfat, xenix, xfs, xiafs.
文件系统可以根据应用场景去选择使用哪一款,如果不会选择,推荐ext4或者XFS
page cache
其实就是内存上空闲的部分 用来缓存数据,比如buffer cache
作用:对IO读写做优化
测试缓存对读写的影响
写
[root@localhost ~]# echo 3 > /proc/sys/vm/drop_caches
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 1980 95 1807 9 77 1754
Swap: 2047 0 2047
[root@localhost ~]# dd if=/dev/zero of=/tmp/big bs=1M count=1000
记录了1000+0 的读入
记录了1000+0 的写出
1048576000字节(1.0 GB)已复制,10.2412 秒,102 MB/秒
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 1980 95 779 9 1105 1698
Swap: 2047 0 2047
[root@localhost ~]# dd if=/dev/zero of=/tmp/big1 bs=1M count=1000
记录了1000+0 的读入
记录了1000+0 的写出
1048576000字节(1.0 GB)已复制,7.89978 秒,133 MB/秒
读
[root@localhost ~]# echo 3 > /proc/sys/vm/drop_caches
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 1980 95 1805 9 79 1753
Swap: 2047 0 2047
[root@localhost ~]# dd if=/tmp/big of=/dev/null
记录了2048000+0 的读入
记录了2048000+0 的写出
1048576000字节(1.0 GB)已复制,2.23965 秒,468 MB/秒
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 1980 95 800 9 1084 1710
Swap: 2047 0 2047
[root@localhost ~]# dd if=/tmp/big of=/dev/null
记录了2048000+0 的读入
记录了2048000+0 的写出
1048576000字节(1.0 GB)已复制,1.92811 秒,544 MB/秒
四、linux磁盘的使用方法
4.1、磁盘初始化
一块新的磁盘使用必须初始化为MBR或者GPT分区。
- MBR <2TB fdisk 4个主分区或者3个主分区+1个扩展分区(N个逻辑分区)
MBR(Master Boot Record)的缩写,由三部分组成,即:
- Bootloader(主引导程序)446字节
- 引导操作系统的主程序
- DPT分区表(Disk Partition Table)64字节
- 分区表保存了硬盘的分区信息,操作系统通过读取分区表内的信息,就能够获得该硬盘的分区信息
- 每个分区需要占用16个字节大小,保存有文件系统标识、起止柱面号、磁头号、扇区号、起始扇区位置(4个字节)、分区总扇区数目(4个字节)等内容
- 分区表中保存的分区信息都是主分区与扩展分区的分区信息,扩展分区不能直接使用,需要在扩展分区内划分一个或多个逻辑分区后才能使用
- 逻辑分区的分区信息保存在扩展分区内而不是保存在MBR分区表内,这样,就可以突破MBR分区表只能保存4个分区的限制
- 硬盘有效标志(校验位)2个字节
- GPT >2TB gdisk(parted) 128个主分区
注意:从MBR转到GPT,或从GPT转换到MBR会导致数据全部丢失!
4.2、分区
将磁盘合理分区,能使计算机或者使用者更快的存取数据
MBR 主分区+扩展分区<=4
GPT 主分区<=128
4.3、格式化
装载文件系统(相当于库管,负责数据的写入和读出)。
常见的文件系统:NTFS EXT EXT2 EXT3 EXT4 XFS vfat
4.4、挂载
linux中设备不能直接使用,需要挂载到文件夹才可以。
挂载方式:
- 手动挂载
- 开机挂载
- 自动挂载
五、基本分区管理
5.1、linux磁盘表示方法介绍
硬盘命名方式
OS | IDE(并口) | SATA(串口) | SCSI |
---|---|---|---|
CentOS6 | /dev/hda | /dev/sda | /dev/sda |
CentOS7 | /dev/sda | /dev/sda | /dev/sda |
CentOS8 | /dev/sda | /dev/sda | /dev/sda |
磁盘设备的命名
/dev/sda2
s=硬件接口类型(sata/scsi),d=disk(硬盘),a=第1块硬盘(b,第二块),2=第几个分区
/dev/hd h=IDE硬盘 /dev/hdd3
/dev/vd v=虚拟硬盘 /dev/vdf7
HP服务器硬盘
/dev/cciss/c0d0
/dev/cciss/c0d0p1 c0第一个控制器, d0第一块磁盘, p1分区1
/dev/cciss/c0d0p2 c0第一个控制器, d0第一块磁盘, p2分区2
5.2、磁盘分区
1. 磁盘划分思路
- 进入分区表 新建分区 fdisk
- 更新分区表<刷新分区表>
- 格式化分区——>文件系统
- 挂载使用——>mount【开机自动挂载|autofs自动挂载】
2. fdisk分区
2.1 使用fdisk分区
# lsblk 查看块设备
# df -h 查看正在挂载的设备情况
# blkid 打印某个已经格式化分区的UUID
# fdisk -l 查看当前系统的所有设备分区情况
# fdisk /dev/sdb
[root@localhost ~]# fdisk -l /dev/sdb
硬盘容量 = 柱面数 × 盘面数(磁头数) × 扇区数 × 扇区大小(一般为512字节)
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors 磁盘空间统计,大小和扇区数量
几何属性:255 个磁头, 63 个扇区/磁道, 2610 个柱面
###此行内容只有在使用fdisk分区时,使用c命令加上与dos兼容的标记时才会出现,这里面所提到的磁头等数量与磁盘中的物理寻址和逻辑块寻址相关,而且它们都是逻辑地址,产生访问时,磁盘控制器会把这些确定的逻辑地址转换为实际的物理地址;对于我们来讲这几个数值可以帮助我们计算磁盘空间的大小以及一个磁柱的大小,比如说
##一个磁柱的容量=255x63x512=8225280(约8M空间)
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x178c5f83
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 41943039 39843840 19G 8e Linux LVM
命令(输入 m 获取帮助):
任务:
添加一块硬盘,需要将其分区,最终需要使用2G空间。
思路:
1. 增加一块硬盘
2. 使用fdisk命令进行分区
3. 格式化指定分区
4. 创建一个空的目录作为挂载点
5. 挂载使用
步骤:
1. 增加硬盘
增加完硬盘记得重启系统
# lsblk 查看硬盘是否添加成功
...
sdb 8:16 0 20G 0 disk
[root@localhost ~]# fdisk -l /dev/sdb
Disk /dev/sdb:20 GiB,21474836480 字节,41943040 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
2. 使用fdisk命令分区
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.32.1)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
设备不包含可识别的分区表。
创建了一个磁盘标识符为 0x0c7799c3 的新 DOS 磁盘标签。
命令(输入 m 获取帮助):p
Disk /dev/sdb:20 GiB,21474836480 字节,41943040 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0c7799c3
命令(输入 m 获取帮助):n
分区类型
p 主分区 (0个主分区,0个扩展分区,4空闲)
e 扩展分区 (逻辑分区容器)
选择 (默认 p):p
分区号 (1-4, 默认 1):
第一个扇区 (2048-41943039, 默认 2048):
上个扇区,+sectors 或 +size{K,M,G,T,P} (2048-41943039, 默认 41943039): +1G
创建了一个新分区 1,类型为“Linux”,大小为 1 GiB。
命令(输入 m 获取帮助):p
Disk /dev/sdb:20 GiB,21474836480 字节,41943040 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x80e196f2
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sdb1 2048 2099199 2097152 1G 83 Linux
命令(输入 m 获取帮助):n
分区类型
p 主分区 (1个主分区,0个扩展分区,3空闲)
e 扩展分区 (逻辑分区容器)
选择 (默认 p):p
分区号 (2-4, 默认 2): 2
第一个扇区 (2099200-41943039, 默认 2099200):
上个扇区,+sectors 或 +size{K,M,G,T,P} (2099200-41943039, 默认 41943039): +1G
创建了一个新分区 2,类型为“Linux”,大小为 1 GiB。
命令(输入 m 获取帮助):p
Disk /dev/sdb:20 GiB,21474836480 字节,41943040 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x80e196f2
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sdb1 2048 2099199 2097152 1G 83 Linux
/dev/sdb2 2099200 4196351 2097152 1G 83 Linux
命令(输入 m 获取帮助):w
分区表已调整。
将调用 ioctl() 来重新读分区表。
正在同步磁盘。
3. 再次查看分区情况
# lsblk
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 1G 0 part
└─sdb2 8:18 0 1G 0 part
4. 刷新分区表信息
[root@localhost ~]# partprobe /dev/sdb
5. 格式化分区
[root@localhost ~]# mkfs.xfs /dev/sdb1
[root@localhost ~]# mkfs.vfat /dev/sdb2
6. 创建新的挂载点
[root@localhost ~]# mkdir /u01
[root@localhost ~]# mkdir /u02
7. 挂载使用
[root@localhost ~]# mount /dev/sdb1 /u01
[root@localhost ~]# mount /dev/sdb2 /u02
注意:
MBR分区表最多允许4个主分区,或者3个主分区+1个扩展分区
扩展分区不能直接存储数据
扩展分区的大小决定了所有逻辑分区的大小,逻辑分区的编号从5开始
删除扩展分区后下面的逻辑分区都被删除
分完区后需要手动刷新分区表,如果刷新不成功需要重启操作系统
创建分区的时候尽可能注意分区序号的连续性
2.2 挂载分区设备
手动挂载:
mount [options] 需要挂载的设备 挂载点
特点:系统重启后需要重新挂载;手动卸载后需要手动挂载
-o:挂载选项 ro,sync,rw,remount
-t:文件系统类型
mount -t nfs=mount.nfs
mount -t cifs=mount.cifs
[root@localhost ~]# mount -o remount,ro /u02 //可以是挂载点也可以是设备
remount:重新挂载一个正在挂载的设备
# mount -o remount,ro /dev/sdb1
# mount -o remount,ro /u01
注意:后面可以根挂载点也可以跟设备本身
挂载设备:真实设备、设备UUID,设备的卷标
/dev/sdb
/dev/sdb1
[root@localhost ~]# blkid /dev/sdb1 //查看设备的UUID和文件系统类型
/dev/sdb1: UUID="96b67b7b..." TYPE="xfs" PARTUUID="80e196f2-01"
[root@localhost ~]# blkid /dev/sdb2
/dev/sdb2: UUID="6821-049E" TYPE="vfat" PARTUUID="80e196f2-02"
ext*设置&查看卷标
[root@localhost ~]# e2label /dev/sdb1 DISK1 ext*设置卷标
[root@localhost ~]# e2label /dev/sdb1 ext*查看卷标
xfs设置&查看卷标
[root@localhost ~]# xfs_admin -L DISK1 /dev/sdb1 xfs设置卷标
[root@localhost ~]# xfs_admin -l /dev/sdb1 xfs查看卷标
label = "DISK1"
vfat设置&查看卷标
[root@localhost ~]# dosfslabel /dev/sdb2 hello
[root@localhost ~]# dosfslabel /dev/sdb2
也可以使用blkid查看卷标
[root@localhost ~]# blkid /dev/sdb1
/dev/sdb1: LABEL="DISK1" UUID="96.." TYPE="xfs" PARTUUID="80..-01"
[root@localhost ~]# blkid /dev/sdb2
/dev/sdb2: LABEL="disk2" UUID="6..." TYPE="vfat" PARTUUID="8e.2-02"
卸载设备:umount
[root@localhost ~]# umount /u01
[root@localhost ~]# umount /dev/sdb2
##如果希望将本机的某个文件夹挂到另一个文件夹
mount -o bind /etc /opt/data3
开机自动挂载:
/etc/fstab //开机自动挂载
特点:系统开机或重启会自动挂载;手动卸载后,使用mount -a自动挂载
格式:
要挂载的资源路径 挂载点 文件系统类型 挂载选项 dump备份支持 文件系统检测
UUID=289370eb-9459-42a8-8cee-7006507f1477 / ext4 defaults 1 1
1段:挂载的设备(磁盘设备的文件名或设备的卷标或者是设备的UUID)
2段:挂载点(建议用一个空目录),建议不要将多个设备挂载到同一个挂载点上
3段:文件系统类型(ext3、ext4、vfat、ntfs(安装软件包)、swap等等)
4段:挂载选项
dev/nodev 被挂载的设备上的设备文件,是否被识别为设备文件
async/sync 异步/同步 同步利于数据保存 异步利于提高性能
auto/noauto 自动/非自动:
rw/ro 读写/只读:
exec/noexec 被挂载设备中的可执行文件是否可执行
remount 重新挂在一个已经挂载的文件系统,常用于修改挂载参数
user/nouser 允许/不允许其他普通用户挂载:
suid/nosuid 具有/不具有suid权限:该文件系统是否允许SUID的存在。
usrquota 这个是在启动文件系统的时候,让其支持磁盘配额,这个是针对用户的。
grpquota 支持用户组的磁盘配额。
....
defaults 同时具有rw, dev, exec, async,nouser等参数。
mount -a 重新读取/etc/fstab文件内容
man mount 可以找到详细信息
5段:是否支持dump备份。//dump是一个用来备份的命令,0代表不要做dump备份,1代表要每天进行dump的动作,2也代表其他不定日期的dump备份。通常这个数值不是0就是1。数字越小优先级越高。
6段:是否用 fsck 检验扇区。//开机的过程中,系统默认会用fsck检验文件系统是否完整。0是不要检验,1表示最先检验(一般只有根目录会设定为1),2也是要检验,只是1是最先,2是其次才进行检验。
# fsck -f /dev/sdb2 强制检验/dev/sdb2上文件系统
说明:
要挂载的资源路径可以是文件系统的UUID,设备路径,文件系统的标签 ,光盘镜像文件(iso),亦或是来自网络的共享资源等
自动挂载 Automount:
特点:挂载是由访问产生;卸载是由超时产生;依赖于后台的autofs服务
思路:
1. 所有的监控都是由一个程序完成 autofs
2. 服务启动后才会监控挂载的设备
3. 修改配置文件来指定需要监控的设备
需求:让系统自动挂载/dev/sdb2设备,如果2分钟没有被用自动卸载
步骤:
1)安装autofs软件
[root@localhost ~]# rpm -q autofs
package autofs is not installed
[root@localhost ~]# dnf install autofs
[root@localhost ~]# rpm -q autofs
autofs-5.1.4-29.el8.x86_64
2)修改配置文件(指定需要监控的设备和挂载的目录)
vim /etc/auto.master //定义一级挂载点/u01和子配置文件
/u01 /etc/auto.test -t 120 或者 --timeout 120 单位秒 (设置超时时间去卸载)
vim /etc/auto.test //子配置文件自己创建,定义二级挂载点和需要挂载的设备
test -fstype=ext4,ro :/dev/sdb2
3)重启服务
[root@localhost ~]# systemctl restart autofs
4)测试验证
[root@localhost ~]# ls /u01/test
[root@localhost ~]# df -h
后续补充:
如果想要将/dev/sdb2挂载到/u01下,怎么做?
vim /etc/auto.master
/- /etc/auto.test
vim /etc/auto.test
/u01 -fstype=ext4 :/dev/sdb2
linux磁盘管理-逻辑卷
一、GPT磁盘管理
GPT分区工具:fdisk gdisk
gdisk分区
GPT 128个主分区
[root@localhost ~]# gdisk -l /dev/sdc
[root@localhost ~]# gdisk -l /dev/sdc 查看sdc信息
GPT fdisk (gdisk) version 1.0.3
Partition table scan:
MBR: MBR only
BSD: not present
APM: not present
GPT: not present ###GPT分区无法使用
***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory.
***************************************************************
Disk /dev/sdc: 41943040 sectors, 20.0 GiB
Model: VMware Virtual S
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): B228357D-34EC-4E47-BB81-A7312F3BCF8D
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 37748669 sectors (18.0 GiB)
Number Start (sector) End (sector) Size Code Name
1 2048 2099199 1024.0 MiB 8300 Linux filesystem
2 2099200 4196351 1024.0 MiB 8300 Linux filesystem
将MBR转换成GPT分区
[root@localhost ~]# gdisk /dev/sdc
GPT fdisk (gdisk) version 1.0.3
Partition table scan:
MBR: MBR only
BSD: not present
APM: not present
GPT: not present
***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
typing 'q' if you don't want to convert your MBR partitions
to GPT format!
***************************************************************
Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.
[root@localhost ~]# gdisk -l /dev/sdc
GPT fdisk (gdisk) version 1.0.3
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present ###GPT可用了
Found valid GPT with protective MBR; using GPT.
Disk /dev/sdc: 41943040 sectors, 20.0 GiB
Model: VMware Virtual S
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 7CA4232A-4A9E-467D-AADD-BB84DB2126E3
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 41942973 sectors (20.0 GiB)
Number Start (sector) End (sector) Size Code Name
#再次分区
[root@localhost ~]# gdisk /dev/sdc
GPT fdisk (gdisk) version 1.0.3
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): n
Partition number (1-128, default 1): 1
First sector (34-41943006, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: +2G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
Command (? for help): p
Disk /dev/sdc: 41943040 sectors, 20.0 GiB
Model: VMware Virtual S
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 7CA4232A-4A9E-467D-AADD-BB84DB2126E3
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 37748669 sectors (18.0 GiB)
Number Start (sector) End (sector) Size Code Name
1 2048 4196351 2.0 GiB 8300 Linux filesystem
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.
[root@localhost ~]# partprobe /dev/sdc
2.创建文件系统(格式化)CentOS8默认使用xfs
[root@localhost ~]# mkfs.xfs -f /dev/sdc1
3.挂载
[root@localhost ~]# mkdir /disk1
[root@localhost ~]# mount -t xfs -o ro /dev/sdc1 /disk1 //手动挂载
[root@localhost ~]# umount /disk1 ##卸载
二、逻辑卷介绍
逻辑卷:
逻辑卷(LVM):它是Linux环境下对磁盘分区进行管理的一种机制,它是建立在物理存储设备之上的一个抽象层,优点在于灵活管理。
特点:
1、动态在线扩容
2、离线裁剪
3、数据条带化
4、数据镜像
三、逻辑卷概念
- 物理卷(Physical Volume,PV)
物理卷是底层真正提供容量,存放数据的设备,它可以是整个硬盘、硬盘上的分区等。
- 卷组(Volume Group, VG)
卷组建立在物理卷之上,它由一个或多个物理卷组成。即把物理卷整合起来提供容量分配。
一个LVM系统中可以只有一个卷组,也可以包含多个卷组。
- 逻辑卷(Logical Volume, LV)
逻辑卷建立在卷组之上,它是从卷组中“切出”的一块空间。它是最终用户使用的逻辑设备。逻辑卷创建之后,其大小可以伸缩。
- 物理区域 PE(physical extent)
每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是能被LVM寻址的最小单元。PE的大小可指定,默认为4 MB。 PE的大小一旦确定将不能改变,同一个卷组中的所有物理卷的PE的大小是一致的。
4MB=4096kb=4096kb/4kb=1024个block
- 逻辑区域 LE(logical extent)
逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
流程
真实的物理设备---->物理卷(pv)---->卷组(vg)---->逻辑卷(lv)------>逻辑卷格式化---->挂载使用
四、逻辑卷管理
逻辑卷LVM应用
4.1 逻辑卷创建
需求:创建一个2.5G大小的逻辑卷
思路:
1. 物理的设备
2. 将物理设备做成物理卷
3. 创建卷组并将物理卷加入其中
4. 创建逻辑卷
5. 格式化逻辑卷
6. 挂载使用
步骤:
1. 物理设备
[root@localhost ~]# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 2G 0 part /disk1
├─sdb2 8:18 0 2G 0 part
├─sdb3 8:19 0 2G 0 part
├─sdb4 8:20 0 2G 0 part
└─sdb5 8:21 0 2G 0 part
2. 创建物理卷
[root@localhost ~]# pvcreate /dev/sdb{1,2}
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
查看物理卷:
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 cl lvm2 a-- <19.00g 0
/dev/sdb1 lvm2 --- 2.00g 2.00g
/dev/sdb2 lvm2 --- 2.00g 2.00g
[root@localhost ~]# pvscan
PV /dev/sda2 VG cl lvm2 [<19.00 GiB / 0 free]
PV /dev/sdb1 lvm2 [2.00 GiB]
PV /dev/sdb2 lvm2 [2.00 GiB]
Total: 3 [<23.00 GiB] / in use: 1 [<19.00 GiB] / in no VG: 2 [4.00 GiB]
[root@localhost ~]# pvdisplay /dev/sdb1
"/dev/sdb1" is a new physical volume of "2.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1 #物理卷名称
VG Name #卷组名称
PV Size 2.00 GiB #大小
Allocatable NO #是否已分配出去
PE Size 0 #PE大小
Total PE 0 #PE总数
Free PE 0 #空闲PE
Allocated PE 0 #可分配PE
PV UUID 3M4...lT #UUID
3. 创建卷组并将物理卷加入其中
[root@localhost ~]# vgcreate vg1 /dev/sdb{1,2}
Volume group "vg1" successfully created
查看卷组信息:
[root@localhost ~]# vgs vg1
VG #PV #LV #SN Attr VSize VFree
vg1 2 0 0 wz--n- 3.99g 3.99g
[root@localhost ~]# vgscan #扫描系统中有哪些卷组
Reading all physical volumes. This may take a while...
Found volume group "vg1" using metadata type lvm2
Found volume group "cl" using metadata type lvm2
[root@localhost ~]# vgdisplay vg1
--- Volume group ---
VG Name vg1
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 3.99 GiB #卷组大小
PE Size 4.00 MiB #PE大小
Total PE 1022 #PE数量
Alloc PE / Size 0/0 #已分配的PE/容量
Free PE / Size 1022/3.99 GiB #可分配的PE/容量
VG UUID CQ6p...K9I
4. 创建逻辑卷
[root@localhost ~]# lvcreate -n lv1 -L 2.5G vg1
Logical volume "lv1" created.
在操作系统层面映射两个地方:
[root@localhost ~]# ll /dev/mapper/vg1-lv1
lrwxrwxrwx 1 root root 7 12月 10 05:47 /dev/mapper/vg1-lv1 -> ../dm-2
[root@localhost ~]# ll /dev/vg1/lv1
lrwxrwxrwx 1 root root 7 12月 10 05:47 /dev/vg1/lv1 -> ../dm-2
[root@localhost ~]# ll /dev/dm-2
brw-rw---- 1 root disk 253, 2 12月 10 05:47 /dev/dm-2
lvcreate参数
-n:指定逻辑卷的名字
-L:指定逻辑卷的大小
-l:指定逻辑卷的大小
举例:
-l 100 100个PE,每个PE大小默认4M,故逻辑卷大小为400M
-l 50%free 卷组剩余空间的50%
[root@localhost ~]# vgs vg1
VG #PV #LV #SN Attr VSize VFree
vg1 2 1 0 wz--n- 3.99g 1.49g
创建大小为200M的逻辑卷lv02;每个PE为4M,-l 50指定50个PE,大小为200M
[root@localhost ~]# lvcreate -n lv2 -l 50 vg1
Logical volume "lv2" created.
[root@localhost ~]# vgs vg1
VG #PV #LV #SN Attr VSize VFree
vg1 2 2 0 wz--n- 3.99g <1.30g
[root@manage01 ~]# lvs /dev/vg01/lv02
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
lv02 vg01 -wi-a----- 200.00m
创建大小为剩余卷组vg01空间的50%的逻辑卷lv03
[root@localhost ~]# lvcreate -n lv3 -l 50%free vg1
Logical volume "lv3" created.
[root@localhost ~]# vgs vg1
VG #PV #LV #SN Attr VSize VFree
vg1 2 3 0 wz--n- 3.99g 664.00m
查看逻辑卷的信息:
[root@localhost ~]# lvs /dev/vg1/lv1
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1 vg1 -wi-a----- 2.50g
[root@localhost ~]# lvs /dev/vg1/lv2
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv2 vg1 -wi-a----- 200.00m
[root@localhost ~]# lvs /dev/vg1/lv3
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv3 vg1 -wi-a----- 664.00m
[root@localhost ~]# lvdisplay /dev/vg1/lv1
--- Logical volume ---
LV Path /dev/vg1/lv1
LV Name lv1
VG Name vg1
LV UUID jj9Sj1-zHuo-qpBZ-Dkk1-LVYB-HyUH-LQ6edW
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2019-12-10 05:46:59 -0500
LV Status available
# open 0
LV Size 2.50 GiB
Current LE 640
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
5. 格式化逻辑卷
[root@localhost ~]# mkfs.ext4 /dev/vg1/lv1
6. 挂载使用
1)创建一个空的挂载点
[root@localhost /]# mkdir /lv1
2)挂载使用
[root@localhost /]# mount /dev/vg1/lv1 /lv1/
4.2 逻辑卷动态扩容
需求:将/lv1目录动态扩容到3G
思路:
1. 查看/lv1目录所对应的逻辑卷是哪一个 /dev/mapper/vg1-lv1
2. 查看当前逻辑卷所在的卷组vg1剩余空间是否足够
3. 如果vg1空间不够,得先扩容卷组,再扩容逻辑卷
4. 如果vg1空间足够,直接扩容逻辑卷
步骤:
1. 查看/lv1目录属于哪个卷组
[root@localhost /]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/vg1-lv1 2.4G 7.5M 2.3G 1% /lv1
[root@localhost /]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root cl -wi-ao---- <17.00g
swap cl -wi-ao---- 2.00g
lv1 vg1 -wi-ao---- 2.50g
lv2 vg1 -wi-a----- 200.00m
lv3 vg1 -wi-a----- 664.00m
2. 卷组的剩余空间
[root@localhost /]# vgs
VG #PV #LV #SN Attr VSize VFree
cl 1 2 0 wz--n- <19.00g 0
vg1 2 4 0 wz--n- 3.99g 664.00m
结果:当前卷组空间不足我扩容
3. 扩容逻辑卷所在的卷组
1)首先得有物理设备 /dev/sdb3
2) 将物理设备做成物理卷
[root@localhost /]# pvcreate /dev/sdb3
Physical volume "/dev/sdb3" successfully created.
[root@localhost /]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 cl lvm2 a-- <19.00g 0
/dev/sdb1 vg1 lvm2 a-- <2.00g 0
/dev/sdb2 vg1 lvm2 a-- <2.00g 464.00m
/dev/sdb3 lvm2 --- 2.00g 2.00g
3)将物理卷加入到卷组中(卷组扩容)
[root@localhost /]# vgextend vg1 /dev/sdb3
Volume group "vg1" successfully extended
[root@localhost /]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 cl lvm2 a-- <19.00g 0
/dev/sdb1 vg1 lvm2 a-- <2.00g 0
/dev/sdb2 vg1 lvm2 a-- <2.00g 464.00m
/dev/sdb3 vg1 lvm2 a-- <2.00g <2.00g
注意:
正常情况下,应该先将/dev/sdb3物理设备创建为物理卷再加入到卷组中;如果直接加入卷组,系统会自动帮你将其做成物理卷。
[root@localhost /]# vgs
VG #PV #LV #SN Attr VSize VFree
cl 1 2 0 wz--n- <19.00g 0
vg1 3 4 0 wz--n- <5.99g <2.45g
4. 扩容逻辑卷
[root@localhost /]# lvextend -L 3G /dev/vg1/lv1
-L 3G最终的大小
或者
[root@localhost /]# lvextend -L +1.5G /dev/vg1/lv1 -L +1.5G 扩容1.5G
5. 查看结果
[root@localhost /]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root cl -wi-ao---- <17.00g
swap cl -wi-ao---- 2.00g
lv1 vg1 -wi-ao---- 3.00g 已经扩容到了3G
[root@localhost /]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/vg1-lv1 2.4G 7.5M 2.3G 1% /lv1
实际并没有改变
6. 同步文件系统
[root@localhost /]# resize2fs /dev/vg1/lv1 #该命令适用于ext分区
[root@manage01 ~]# xfs_growfs /dev/vg1/lv1 #该命令适用于xfs分区
7. 再次查看验证
[root@localhost /]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/vg1-lv1 2.9G 7.5M 2.8G 1% /lv1
扩容成功
4.3 离线裁剪逻辑卷
[root@localhost /]# umount /lv1
[root@localhost /]# e2fsck -f /dev/vg1/lv1 检验文件系统
[root@localhost /]# resize2fs /dev/vg1/lv1 2G 裁剪文件系统到2G
[root@localhost /]# lvreduce /dev/vg1/lv1 -L 2G 裁剪逻辑卷
[root@localhost /]# mount /dev/vg1/lv1 /lv1/ 挂载使用
[root@localhost /]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/vg1-lv1 2.0G 9.0M 1.8G 1% /lv1
xfs裁剪
将lv2的文件系统格式化为xfs
将/dev/vg1/lv2挂载到/lv2
在/lv2中建立一个文件,写入内容
备份数据
卸载分区并裁剪逻辑卷
格式化裁剪后的逻辑卷
导入数据
1)备份数据命令
xfsdump
2)备份数据
[root@localhost /]# xfsdump -f /root/lv2.img /lv2
#挂载点目录后面不要加"/"
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.8 (dump format 3.0) - type ^C for status and control
============================= dump label dialog ==============================
please enter label for this dump session (timeout in 300 sec)
-> lv2
session label entered: "lv2"
--------------------------------- end dialog ---------------------------------
xfsdump: level 0 dump of localhost.localdomain:/lv2
xfsdump: dump date: Tue Dec 10 06:33:44 2019
xfsdump: session id: 15936371-b967-4c2c-8995-49eb702792fe
xfsdump: session label: "lv2"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 20800 bytes
============================= media label dialog =============================
please enter label for media in drive 0 (timeout in 300 sec)
-> lv2
media label entered: "lv2"
--------------------------------- end dialog ---------------------------------
xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 21016 bytes
xfsdump: dump size (non-dir files) : 0 bytes
xfsdump: dump complete: 14 seconds elapsed
xfsdump: Dump Summary:
xfsdump: stream 0 /root/lv2.img OK (success)
xfsdump: Dump Status: SUCCESS
3)裁剪
[root@localhost ~]# umount /lv2
[root@localhost ~]# lvreduce /dev/vg1/lv2 -L 100M
WARNING: Reducing active logical volume to 2.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg01/lv01? [y/n]: y
Size of logical volume vg01/lv01 changed from 7.00 GiB (1792 extents) to 2.00 GiB (512 extents).
Logical volume vg01/lv01 successfully resized.
4)格式化
[root@localhost ~]# mkfs.xfs -f /dev/vg1/lv2
[root@localhost ~]# mount /dev/vg1/lv2 /lv2
5)恢复数据 -f source
[root@localhost ~]# xfsrestore -f /root/lv2.img /lv2
.
.
.
xfsrestore: Restore Status: SUCCESS
root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/vg1-lv2 95M 6.0M 89M 7% /lv2
[root@localhost ~]# cat /lv2/filea
hahaha
4.4 删除LVM
建立: 分区–PV–VG–LV–挂载–fstab(autofs)–写入数据
删除: 备份重要数据–fstab(autofs)–卸载–LV–VG–PV–分区
1 备份数据(如果有需要)
2 编辑fstab文件或者autofs服务相关文件,删除相关设置
3 卸载
[root@localhost ~]#umount /lv1
4 删除逻辑卷
[root@localhost ~]#lvremove /dev/vg1/lv1
5 删除卷组
[root@localhost ~]#vgchange -an vg1
[root@localhost ~]#vgremove vg1
6 删除物理卷
[root@localhost ~]#pvremove /dev/sdxx
7 删除分区
[root@localhost ~]#fdisk /dev/sdxx
[root@localhost ~]#partprobe
五、课程拓展
swap的作用:swap分区在系统的运行内存不够用的时候,把运行内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。可以缓解物理内存不足的压力,如果物理内存不足,还没有swap空间,会宕机
5.1、 扩容swap空间
方法1:增加一个设备(硬盘,分区,逻辑卷)来扩容swap空间
查看swap空间大小:
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 3918 1309 2002 15 606 2358
Swap: 2047 0 2047
[root@localhost ~]# swapon -s
文件名 类型 大小 已用 权限
/dev/dm-1 partition 2097148 0 -2
[root@localhost ~]# mkswap /dev/sdb4
正在设置交换空间版本 1,大小 = 2 GiB (2147479552 个字节)
无标签,UUID=8235e59a-1043-4251-8694-ba619cb36f1c
[root@localhost ~]# blkid /dev/sdb4
/dev/sdb4: UUID="8...c" TYPE="swap" PARTUUID="b...e"
//激活swap分区。swap空间不能手动挂载
[root@localhost ~]# swapon /dev/sdb4
[root@localhost ~]# swapon -s
文件名 类型 大小 已用 权限
/dev/dm-1 partition 2097148 0 -2
/dev/sdb4 partition 2097148 0 -3
[root@localhost ~]# free -m
total used free shared buff/cache available
Swap: 4095 0 4095
LVM形式
[root@localhost ~]# mkswap /dev/vg1/swap #创建swap
[root@localhost ~]# swapon /dev/vg1/swap #开启swap
[root@localhost ~]# lvextend -L 4G /dev/vg1/swap #放大LVM形式的swap
[root@localhost ~]# swapoff /dev/vg1/swap #关闭lvm形式的swap
[root@localhost /]# mkswap /dev/vg1/lv-swap #重新制作swap
[root@localhost ~]# swapon /dev/vg1/swap #开启lvm形式的swap
[root@localhost ~]# free -m #确认swap分区是否放大
方法2:使用dd命令模拟大文件来扩容swap
[root@localhost ~]# dd if=/dev/zero of=/tmp/swapfile bs=1M count=2048
if=源文件,in file指定从哪里读入数据
of=目标文件,out file指定将数据写入什么位置
bs=复制数据的大小,block size
count=复制的个数
注意:
1. 一般可以使用dd命令做块设备文件的备份
2. /dev/zero 特殊设备,一般用来模拟一个大文件,源源不断的二进制的数据流;
/dev/null 空设备,类似黑洞
步骤:
1. 使用dd命令模拟大文件
# dd if=/dev/zero of=/tmp/swapfile bs=1M count=2048
2. 格式化大文件
[root@localhost ~]# mkswap /tmp/swapfile
mkswap: /tmp/swapfile:不安全的权限 0644,建议使用 0600。
正在设置交换空间版本 1,大小 = 2 GiB (2147479552 个字节)
无标签,UUID=3d855316-c97c-42ca-9c52-9df26a4517a0
[root@localhost ~]# ll /tmp/swapfile
-rw-r--r-- 1 root root 2147483648 12月 10 21:02 /tmp/swapfile
[root@localhost ~]# chmod 600 /tmp/swapfile
3.激活大文件
[root@localhost ~]# swapon -p1 /tmp/swapfile
-p:指定优先级,数字越大优先级越高,-1~32767
4. 查看
[root@localhost ~]# swapon -s
文件名 类型 大小 已用 权限
/dev/dm-1 partition 2097148 268 -2
/dev/sdb4 partition 2097148 0 -3
/tmp/swapfile file 2097148 0 1
[root@localhost ~]# free -m
total used free shared buff/cache available
Swap: 6143 0 6143
如果开机自动挂载,需要修改文件:/etc/fstab
[root@localhost ~]# vim /etc/fstab
/dev/sda4 swap swap defaults 0 0
/tmp/swapfile swap swap dfaults,pri=1 0 0
[root@localhost ~]# swapon -a
关闭swap
[root@localhost ~]# swapoff /dev/sdb4
[root@localhost ~]# swapoff /tmp/swapfile
或者
[root@localhost ~]# swapoff -a #关闭所有swap****慎用*****
5.2、逻辑卷实现条带化
条带化:
把保存到逻辑卷的数据分成n等分,分别写到不同的物理卷,可以提高数据的读写效率;如果任何一个涉及到的物理卷出现故障,数据都会无法恢复。
环境准备:
删除之前创建的逻辑卷
[root@localhost ~]# umount /lv1
[root@localhost ~]# lvremove /dev/vg1/lv1
[root@localhost ~]# lsblk
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 2G 0 part
├─sdb2 8:18 0 2G 0 part
如果没有物理卷的话,需要先创建物理卷,再创建卷组,如果有物理卷和卷组的话可以直接创建条带化逻辑卷
创建物理卷
[root@manage01 ~]# pvcreate /dev/sdb[12]
查看物理卷
[root@manage01 ~]# pvs
/dev/sdb1 lvm2 a-- 2.01g 2.01g
/dev/sdb2 lvm2 a-- 2.01g 2.01g
创建卷组:
[root@manage01 ~]# vgcreate vg01 /dev/sdb[12]
[root@manage01 ~]# pvs /dev/sdb[12]
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg01 lvm2 a-- 2.00g 2.00g
/dev/sdb2 vg01 lvm2 a-- 2.00g 2.00g
创建实现条带化的逻辑卷:
[root@localhost ~]# lvcreate -n lv1 -L 1G vg01 -i 2 /dev/sdb{1,2}
-i 参数:给出条带化的数量
[root@localhost ~]# lvs /dev/vg01/lv01
格式化挂载使用:
[root@localhost ~]# mkfs.ext4 /dev/vg1/lv1
[root@localhost ~]# mount /dev/vg1/lv1 /lv1
测试:
[root@localhost ~]# dnf install sysstat -y
[root@localhost ~]# iostat -m -d /dev/sdb[12] 2
-d 查看磁盘
-m 以什么速度显示,每秒M
2 每隔2s显示一次
如果后面还有数字则代表总共显示多少次
[root@localhost ~]# dd if=/dev/zero of=/lv1/test bs=1M count=1000 模拟写数据
[root@localhost ~]# iostat -m -d /dev/sdb[12] 1
.
.
.
Device tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sdb1 4015.00 0.01 364.38 0 364
sdb2 4005.00 0.00 364.33 0 364
5.3、逻辑卷实现镜像
逻辑卷实现镜像:
镜像:镜像是一种文件存储形式,是冗余的一种类型,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像。对某个逻辑卷的数据做镜像,起到数据备份的作用。
当前环境:
[root@localhost ~]# lsblk
├─sdb3 8:19 0 2G 0 part
├─sdb4 8:20 0 2G 0 part
创建物理卷:
[root@localhost ~]# pvcreate /dev/sdb[34]
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb3 lvm2 --- 2.00g 2.00g
/dev/sdb4 lvm2 --- 2.00g 2.00g
将物理卷加入到vg1卷组:
[root@localhost ~]# vgextend vg1 /dev/sdb[34]
Volume group "vg1" successfully extended
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg1 4 1 0 wz--n- 7.98g 6.98g
创建实现镜像的逻辑卷:
[root@localhost ~]# lvcreate -n lv2 -L 1G vg1 -m 1 /dev/sdb[34]
Logical volume "lv2" created.
-m参数:给出镜像的个数;1表示1个镜像
[root@localhost ~]# lvs -a -o +devices
[root@localhost ~]# lvs -a -o +devices
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices
root cl -wi-ao---- <17.00g /dev/sda2(512)
swap cl -wi-ao---- 2.00g /dev/sda2(0)
lv1 vg1 -wi-ao---- 1.00g /dev/sdb1(0),/dev/sdb2(0)
lv2 vg1 rwi-a-r--- 1.00g 100.00 lv2_rimage_0(0),lv2_rimage_1(0)
[lv2_rimage_0] vg1 iwi-aor--- 1.00g /dev/sdb3(1)
[lv2_rimage_1] vg1 iwi-aor--- 1.00g /dev/sdb4(1)
[lv2_rmeta_0] vg1 ewi-aor--- 4.00m /dev/sdb3(0)
[lv2_rmeta_1] vg1 ewi-aor--- 4.00m /dev/sdb4(0)
说明: Cpy%Sync 18.77该值是100%说明复制ok
格式化逻辑卷:
[root@localhost ~]# mkfs.ext4 /dev/vg1/lv2
挂载使用
[root@localhost ~]# mount /dev/vg1/lv2 /lv2/
[root@localhost ~]# touch /lv2/file{1..10}
[root@localhost ~]# mkdir /lv2/dir{1..10}
测试验证:
思路:损坏一个磁盘,测试数据是否在第二个物理卷中
1. 使用dd命令破坏一个物理卷
[root@localhost ~]# dd if=/dev/zero of=/dev/sdb3 bs=1M count=100
2. 再次查看物理卷发现有一个unknown Device pvs命令
[unknown] vg1 lvm2 a-m <2.00g 1016.00m
3. 将损坏的盘从卷组中移除
[root@localhost ~]# vgreduce vg1 --removemissing --force
4. 再次查看挂载点/lv2数据依然存在
自己也可以再次测试:
1. 再拿刚刚人为损坏的盘做成物理卷再次加入到vg1卷组中
[root@localhost /]# pvcreate /dev/sdb3
[root@localhost /]# vgextend vg1 /dev/sdb3
2. 修复
[root@localhost /]# lvconvert --repair /dev/vg1/lv2 /dev/sdb[34]
5.4、逻辑卷快照
快照的作用:保存做快照那一刻数据的状态,方便用户实现数据回滚,避免重要数据被覆盖。
快照的大小:快照需要占用卷组空间,快照的大小决定了允许有多少数据发生改变,如果制作快照时分配的容量与对应的逻辑卷相同,那么就允许逻辑卷中所有的数据发生改变。
COW:copy on write 当系统检测到做快照的逻辑卷当中的数据发生了改变,会在改变前将逻辑卷中的PE的数据复制到快照中的PE,然后再写入新的数据
1. 创建快照 (EXT4)
[root@localhost /]# lvcreate -L 200M -s -n lv1-snap /dev/vg1/lv1 给lv1逻辑卷创建快照
[root@localhost /]# mount -o ro /dev/vg1/lv1-snap /lv1-snap/ 挂载快照
[root@localhost /]# lvscan
ACTIVE Original '/dev/vg1/lv1' [2.00 GiB] inherit
ACTIVE Snapshot '/dev/vg1/lv1-snap' [200.00 MiB] inherit
[root@localhost /] dmsetup ls --tree
vg1-lv2--snap (252:5)
├─vg1-lv1--snap-cow (253:4) 保存原卷改变前的数据
│ └─ (8:17)
└─vg1-lv1-real (253:3) 真实的逻辑卷(原卷)
├─ (8:17)
└─ (8:18)
vg1-lv1 (253:2)
└─vg1-lv1-real (253:3)
├─ (8:17)
└─ (8:18)
2. 修改原卷的数据
[root@localhost /]# dd if=/dev/zero of=/lv1/test bs=1M count=30
3. 观察Snapshot
[root@localhost /]# lvs /dev/vg1/lv1-snap
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1-snap vg1 swi-aos--- 200.00m lv1 0.02
[root@localhost /]# lvs /dev/vg1/lv1-snap
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1-snap vg1 swi-aos--- 200.00m lv1 15.10
XFS:
[root@node1 ~]# mount -o nouuid,ro /dev/vg1/lv1-snap /lv1-snap
挂载快照,尽量使用ro的方式,将不会破坏快照卷中的数据
快照实现自动扩容:
/etc/lvm/lvm.conf
snapshot_autoextend_threshold = 80
snapshot_autoextend_percent = 20
//当快照使用到80%时,自动扩容20%;当snapshot_autoextend_threshold = 100表示关闭自动扩容
修改完成后建议重启
linux磁盘管理-RAID
一、RAID介绍
RAID(Redundant Array of Independent Disk 独立冗余磁盘阵列)技术是加州大学伯克利分校1987年提出,最初是为了组合小的廉价磁盘来代替大的昂贵磁盘,同时希望磁盘失效时不会使对数据的访问受损失而开发出一定水平的数据保护技术。RAID就是一种由多块廉价磁盘构成的冗余阵列,在操作系统下是作为一个独立的大型存储设备出现。RAID可以充分发挥出多块硬盘的优势,可以提升硬盘速度,增大容量,提供容错功能,能够确保数据安全性,易于管理的优点,在任何一块硬盘出现问题的情况下都可以继续工作,不会 受到损坏硬盘的影响。
二、常见的RAID级别
1. RAID0
RAID0特点:
- 至少需要两块磁盘
- 数据条带化分布到磁盘,高的读写性能,100%高存储空间利用率
- 数据没有冗余策略,一块磁盘故障,数据将无法恢复
- 应用场景:
- 对性能要求高但对数据安全性和可靠性要求不高的场景,比如音频、视频等的存储。
2. RAID1
RAID1特点:
- 至少需要2块磁盘
- 数据镜像备份写到磁盘上(工作盘和镜像盘),可靠性高,磁盘利用率为50%
- 读性能可以,但写性能不佳
- 一块磁盘故障,不会影响数据的读写
- 应用场景:
- 对数据安全可靠要求较高的场景,比如邮件系统、交易系统等。
3. RAID5
RAID5特点:
- 至少需要3块磁盘
- 数据条带化存储在磁盘,读写性能好,磁盘利用率为(n-1)/n
- 以奇偶校验(分散)做数据冗余
- 一块磁盘故障,可根据其他数据块和对应的校验数据重构损坏数据(消耗性能)
- 是目前综合性能最佳的数据保护解决方案
- 兼顾了存储性能、数据安全和存储成本等各方面因素(性价比高)
- 适用于大部分的应用场景
4. RAID6
RAID6特点:
- 至少需要4块磁盘
- 数据条带化存储在磁盘,读取性能好,容错能力强
- 采用双重校验方式保证数据的安全性
- 如果2块磁盘同时故障,可以通过两个校验数据来重建两个磁盘的数据
- 成本要比其他等级高,并且更复杂
- 一般用于对数据安全性要求非常高的场合
5. RAID10
RAID10特点:
- RAID10是raid1+raid0的组合
- 至少需要4块磁盘
- 两块硬盘为一组先做raid1,再将做好raid1的两组做raid0
- 兼顾数据的冗余(raid1镜像)和读写性能(raid0数据条带化)
- 磁盘利用率为50%,成本较高
6. 总结
类型 | 读写性能 | 可靠性 | 磁盘利用率 | 成本 |
---|---|---|---|---|
RAID0 | 最好 | 最低 | 100% | 较低 |
RAID1 | 读快;写一般 | 高 | 50% | 高 |
RAID5 | 读:近似RAID0 写:多了校验 | RAID0<RAID5<RAID1 | (n-1)/n | RAID0<RAID5<RAID1 |
RAID6 | 读:近似RAID0 写:多了双重校验 | RAID6>RAID5 | RAID6<RAID5 | RAID6>RAID1 |
RAID10 | 读:RAID10=RAID0 写:RAID10=RAID1 | 高 | 50% | 最高 |
三、软硬RAID
1. 软RAID
软RAID运行于操作系统底层,将SCSI或者IDE控制器提交上来的物理磁盘,虚拟成虚拟磁盘,再提交给管理程序来进行管理。软RAID有以下特点:
- 节省成本,系统支持就可以使用相应功能
- 占用内存空间
- 占用CPU资源
- 如果程序或者操作系统故障就无法运行
2. 硬RAID
通过用硬件来实现RAID功能的就是硬RAID,独立的RAID卡,主板集成的RAID芯片都是硬RAID。RAID卡就是用来实现RAID功能的板卡。硬RAID的特点:
- 硬RAID有独立的运算单元,性能好
- 可能需要单独购买额外的硬件
- 不同RAID卡支持的功能不同,需要根据自己的需求选择
四、软raid创建
0. 环境准备
添加一个20G的虚拟硬盘,分成10个2G的分区文章来源:https://www.toymoban.com/news/detail-512220.html
1. raid的创建
#####创建RAID0文章来源地址https://www.toymoban.com/news/detail-512220.html
系统中如果没有mdadm命令请安装相关工具:
[root@localhost ~]# which mdadm
/usr/sbin/mdadm
[root@localhost ~]# rpm -qf /usr/sbin/mdadm
mdadm-4.1-4.el8.x86_64
[root@localhost ~]# dnf install -y mdadm
创建raid0:
[root@localhost ~]# mdadm --create /dev/md0 --raid-devices=2 /dev/sdb1 /dev/sdb2 --level=0
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
或者
[root@localhost ~]# mdadm -C /dev/md0 -l 0 -n 2 /dev/sdb1 /dev/sdb2
-C:创建软raid
-l:指定raid级别
-n:指定raid中设备个数
查看RAID信息:
/proc/mdstat文件记录了所有raid信息
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid0]
md0 : active raid0 sdb2[1] sdb1[0]
#md0为raid0,两个成员sdb2(第二个成员),sdb1(第一个成员)
41905152 blocks super 1.2 512k chunks
#一共有多少个块(每块1K) 数据段的大小是512K
#chunk决定了阵列中每个成员盘写入的数据量,大于这个值才会到下一个盘读写
unused devices: <none>
查看指定的RAID信息:
[root@localhost ~]# mdadm -D/--detail /dev/md0
[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0: #名称
Version : 1.2 #工具版本
Creation Time : Wed Dec 11 03:05:31 2019 #建立时间
Raid Level : raid0 #类型
Array Size : 41905152 (39.96 GiB 42.91 GB)#容量
Raid Devices : 2 #组成RAID的硬盘数量
Total Devices : 2#成员总数,包含备用磁盘
Persistence : Superblock is persistent
Update Time : Wed Dec 11 03:05:31 2019
State : clean #raid的状态
Active Devices : 2 #活跃的设备数量
Working Devices : 2 #工作的设备数量
Failed Devices : 0 #故障的数量
Spare Devices : 0 #备用设备数量
Chunk Size : 512K
Consistency Policy : none
Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : 06b2d3b2:3ace3ddf:b5b65dd7:eb40b040
Events : 0
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdb2
格式化挂载使用:
[root@localhost ~]# mkfs.ext4 /dev/md0
[root@localhost ~]# mkdir /md0
[root@localhost ~]# mount /dev/md0 /md0/
查看空间使用情况:
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/md0 3.9G 16M 3.7G 1% /md0
#可用空间100%
测试:
[root@localhost ~]# iostat -m -d /dev/sdb1 /dev/sdb2 2
[root@server ~]# dd if=/dev/zero of=/md0/file bs=1M count=1024
创建RAID1
创建raid1:
[root@localhost ~]# mdadm -C /dev/md1 -l 1 -n 2 /dev/sdb3 /dev/sdb4
查看状态信息:
root@localhost ~]# watch -n1 "cat /proc/mdstat" watch命令监控该文件变化情况,1秒钟显示一次
或者直接查看
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid0] [raid1]
md1 : active raid1 sdb4[1] sdb3[0]
20953024 blocks super 1.2 [2/2] [UU]
#两个UU说明状态ok,一个盘故障则显示_U
[==============>......] resync = 73.5% (15404032/20953024) finish=0.4min speed=205582K/sec
unused devices: <none>
#以上信息说明两块盘在进行同步,100%说明同步完成
查看raid1详细信息
[root@localhost ~]# mdadm -D /dev/md1
格式化挂载使用:
[root@localhost ~]# mkfs.ext4 /dev/md1
[root@localhost ~]# mount /dev/md1 /md1
查看空间使用情况:
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/md1 2.0G 6.0M 1.9G 1% /md1
#可用空间50%
测试验证热插拔:
1. 模拟一块盘故障(将磁盘标记为失效)
[root@localhost ~]# mdadm /dev/md1 -f /dev/sdb3
mdadm: set /dev/sdb1 faulty in /dev/md1
#-f or --fail 表示失效
2. 查看raid1状态
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid0] [raid1]
md1 : active raid1 sdb4[1] sdb3[0](F) F表示失效失败
20953024 blocks super 1.2 [2/1] [_U]
#_表示有一块盘失效
unused devices: <none>
[root@localhost ~]# mdadm -D /dev/md1
。。。
Number Major Minor RaidDevice State
- 0 0 0 removed
1 8 33 1 active sync /dev/sdb4
0 8 17 - faulty /dev/sdb3
#失效盘等待移除
3. 移除故障或者失效硬盘(热拔)
[root@localhost ~]# mdadm /dev/md1 -r /dev/sdb3
mdadm: hot removed /dev/sdb3 from /dev/md1
#-r or --remove 表示移除
[root@localhost ~]# mdadm -D /dev/md1
。。。
Number Major Minor RaidDevice State
- 0 0 0 removed
1 8 33 1 active sync /dev/sdb4
4. 加入新的磁盘到raid1中(热插)
[root@localhost ~]# mdadm /dev/md1 -a /dev/sdb5
mdadm: added /dev/sdd5
#-a or --add 表示增加
[root@localhost ~]# cat /proc/mdstat
创建RAID5
创建raid5:
[root@localhost ~]# mdadm -C /dev/md5 -l 5 -n 3 -x 1 /dev/sdb{6,7,8,9}
#-x, --spare-devices= 表示指定热备盘
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4]
md5 : active raid5 sdb8[4] sdb9[3](S) sdb7[1] sdb6[0] #S备用盘
4188160 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
说明:热备盘表示当其中一块盘故障后,热备盘会立马顶上去,而不需要人为手动干预。
[root@localhost ~]# mdadm -D /dev/md5 查看详细信息
。。。
Number Major Minor RaidDevice State
0 8 22 0 active sync /dev/sdb6
1 8 23 1 active sync /dev/sdb7
4 8 24 2 active sync /dev/sdb8
3 8 25 - spare /dev/sdb9
格式化挂载使用:
[root@localhost ~]# mkfs.ext4 /dev/md5
[root@localhost ~]# mkdir /md5
[root@localhost ~]# mount /dev/md5 /md5/
查看空间使用情况:
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/md5 3.9G 16M 3.7G 1% /md5
#可用空间 (磁盘数量-1)x 单一磁盘容量
测试热备磁盘作用:
1. 标记一块活动盘失效
[root@localhost /]# mdadm /dev/md5 -f /dev/sdb6
mdadm: set /dev/sdb6 faulty in /dev/md5
立即查看状态:
[root@localhost /]# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4]
md5 : active raid5 sdb8[4] sdb9[3] sdb7[1] sdb6[0](F)
说明:
sdb6(F)失效后,原来的sdb9(S)热备盘立马顶上去同步数据
4188160 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [_UU]
[==>..................] recovery = 13.0% ..
unused devices: <none>
[root@localhost /]# mdadm -D /dev/md5
...
Number Major Minor RaidDevice State
3 8 25 0 active sync /dev/sdb9
1 8 23 1 active sync /dev/sdb7
4 8 24 2 active sync /dev/sdb8
0 8 22 - faulty /dev/sdb6
2. 移除失效的盘
[root@localhost /]# mdadm /dev/md5 -r /dev/sdb6
mdadm: hot removed /dev/sdb6 from /dev/md5
3. 为了日后考虑,再次添加一个热备盘到raid5中
[root@localhost /]# mdadm /dev/md5 -a /dev/sdb6
mdadm: added /dev/sdb6
2. 保存RAID信息
问:为什么要保存raid信息?
答:如果不做信息的保存,在CentOS6中,重启系统后raid不能自动被识别到,7,8系统中不会出现这种状况。
1. 创建配置文件
[root@localhost ~]# mdadm -D --scan >> /etc/mdadm.conf
[root@localhost ~]# cat /etc/mdadm.conf
ARRAY /dev/md/1 metadata=1.2 name=localhost.localdomain:1 UUID=170d690d:4f7ccd02:646c3ce0:8f6012be
ARRAY /dev/md/0 metadata=1.2 name=localhost.localdomain:0 UUID=a845702e:9251cae9:25d1bc8b:9a337df2
ARRAY /dev/md/5 metadata=1.2 spares=1 name=localhost.localdomain:5 UUID=d49e6cca:5312271b:7e8e83d5:adac4ed5
3. raid停止与启动
以RAID5为例说明:
停止raid:
1. 卸载raid
[root@localhost ~]# umount /md5
2. 使用命令停止raid
[root@localhost ~]# mdadm --stop /dev/md5
mdadm: stopped /dev/md5
启动raid:
1. 配置文件(/etc/mdadm.conf)存在如下启动
[root@localhost ~]# mdadm -A /dev/md5
mdadm: /dev/md5 has been started with 3 drives and 1 spare.
#-A:Assemble a pre-existing array 表示装载一个已存在的raid
2. 配置文件(/etc/mdadm.conf)不存在如下启动
[root@localhost ~]# mdadm -A /dev/md5 /dev/sdb[6789]
mdadm: /dev/md5 has been started with 3 drives and 1 spare.
3. 如果设备名不知道,可以去查看每个设备的raid信息,使用uuid把raid设备重新组合
[root@localhost ~]# mdadm -E /dev/sdb6 | grep UUID
Array UUID : d49e6cca:5312271b:7e8e83d5:adac4ed5
Device UUID : b933b8d5:04a6e003:90e9b230:d13cacf5
说明:同一个raid里每个磁盘查看的UUID都是这个值
。。。
[root@localhost ~]# mdadm -E /dev/sdb7 | grep UUID
Array UUID : d49e6cca:5312271b:7e8e83d5:adac4ed5
Device UUID : b8ca85bd:7809faa4:48882a21:98ef9349
通过以上方法找到后进行重新组合,如下:
[root@localhost ~]# mdadm -A --uuid=d49e6cca:5312271b:7e8e83d5:adac4ed5 /dev/md5
mdadm: /dev/md5 has been started with 3 drives and 1 spare.
4. raid的删除
1. 卸载设备
[root@localhost ~]# umount /md5/
2. 移除所有磁盘
[root@localhost ~]# mdadm /dev/md5 -f /dev/sdb[6789]
mdadm: set /dev/sdb6 faulty in /dev/md5
mdadm: set /dev/sdb7 faulty in /dev/md5
mdadm: set /dev/sdb8 faulty in /dev/md5
mdadm: set /dev/sdb9 faulty in /dev/md5
[root@localhost ~]# mdadm /dev/md5 -r /dev/sdb[6789]
mdadm: hot removed /dev/sdb6 from /dev/md5
mdadm: hot removed /dev/sdb7 from /dev/md5
mdadm: hot removed /dev/sdb8 from /dev/md5
mdadm: hot removed /dev/sdb9 from /dev/md5
3. 停止raid
[root@localhost ~]# mdadm --stop /dev/md5
mdadm: stopped /dev/md5
4. 擦出超级块(superblock)清除相关信息
[root@localhost ~]# mdadm --zero-superblock /dev/sdb[6789]
到了这里,关于zutuanxue.com-linux磁盘管理基本管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!