使用硬盘设备前需要对其进行分区、格式化,分区可以使公司业务数据得到更有效的管理。我们需要提前规划好硬盘的存储空间,至于一块硬盘到底要分多少个区,每个分区预留多大空间,这需要根据文件数量、大小、类型等进行对应的设计。有关硬盘的识别,Linux会根据设备类型完成识别。
如果是IDE存储设备在计算机中将被识别为hd,第一个IDE设备会被识别为hda,第二个IDE设备会被识别为hdb,以此类推。
如果是SATA、USB或SCSI设备,则会被识别为sd,同样地,第一个设备被识别为sda,第二个设备被识别为sdb,以此类推。
如果是KVM虚拟机的vitio硬盘设备,则系统会将其识别为vd,第一个设备为vda,第二个设备为vdb,以此类推。
如果是NVME硬盘设备,系统会将其识别为nvme0,第一个设备为nvme0n1,第二个设备为nvme0n2,以此类推。
对于分区,Linux使用数字来表示。如果是SATA硬盘,第一块硬盘的第一个分区为sda1,第二块硬盘的第二个分区为sdb2。如果是NVME硬盘,第一块硬盘的第一个分区为nvme0n1p1,第一块硬盘的第二个分区为nvme0n1p2。
1、磁盘分区
通常硬盘的分区方式有两种:MBR方式和GPT方式。MBR方式最多可以分4个主分区,单个分区的容量也有限,GPT方式可以划分更多的分区,单个分区的容量也更大。
对于传统的MBR(msdos)分区方式,一块硬盘最多可以有四个主分区,确定四个主分区后,即使硬盘还有剩余空间,也无法再继续分区。
在传统分区方式中,如果需要更多的分区,可以在扩展分区中创建逻辑分区,先创建一个扩展分区,扩展分区不能直接使用,它是逻辑分区的容器,需将扩展分区划分为多个逻辑分区,所有逻辑分区的容量总和等于扩展分区的容量。逻辑分区一定是以编号5开始的,比如,SATA硬盘的第一个逻辑分区一定为sda5。
a. fdisk
fdisk -l 查看磁盘分区表
由上图可见,第一块磁盘的总容量为21.5G,第一块磁盘有三个分区/dev/sda1、/dev/sda2/、/dev/sda3。接下来为第一块磁盘添加分区:fdisk /dev/sda
输入指令m获得帮助
输入n创建新的分区:输入p创建主分区,输入e创建扩展分区
b. partprobe
我们可以使用partprobe命令让内核立即读取新的分区表,这样无须重启系统即可识别新创建的分区。
partprobe /dev/sda
上面所讲述的传统MBR(msdos)分区方式有多种限制,
- 最多创建四个主分区、
- 无法创建容量大于2TB的分区等,
而现在有一种新的GPT分区方式则不受这样的限制,还能提供分区表的冗余信息以实现分区表的备份与安全。使用Linux的另一个分区工具parted可以非常方便地创建GPT分区。
c. parted
修改分区表类型
- 描述:创建GPT分区
- 语法:parted [选项] [硬盘 [命令]]
注意,改变分区方式后,原有硬盘中的数据将会全部丢失,因此要对数据进行备份。这里假设选择第三块硬盘来进行GPT分区演示,具体操作方法如下。
# 修改分区表类型,设置分区方式为 GPT
parted /dev/sdc mklabel gpt
# 查看系统分区表信息
parted /dev/sdc print
d. parted_mkpart
创建新的分区需要使用parted命令的mkpart子命令,
- 描述:创建新的分区
- 语法:parted [硬盘] mkpart 分区类型 文件系统类型 开始 结束
-
- 分区类型有 primary、logical、extended三种,
- 文件系统类型有fat32、ext3、ext4、xfs、linux-swap等
- 开始与结束标记用于标记分区的起始与结束位置(默认单位为MB)。
# 创建一个类型为ext4的主分区,从硬盘的第1MB开始分区,到2GB的位置结束(主分区容量大小为2GB)
parted /dev/sdc mkpart primary ext4 1 2G
# 创建一个xfs类型,容量为2GB的分区(从硬盘的2GB位置开始,到4GB位置结束)
parted /dev/sdc mkpart primary xfs 2G 4G
# 创建一个容量为2GB的分区,文件系统类型可以不写,表示没有输入文件系统类型。
parted /dev/sdc mkpart primary 4G 6G
# 查看分区表信息
parted /dev/sdc print
parted /dev/sdc rm 4 # 使用rm指令删除编号为4的分区
除了基本的分区创建与删除,利用parted命令还可以检查分区、调整分区大小、还原误删除的分区等,关于parted命令的更多使用方法,可以查阅man手册。
2、格式化与挂载文件系统
对硬盘进行分区后,接下来需要格式化与挂载文件系统。在某些操作系统中,格式化完成后,系统会自动挂载至一个盘符,然后就可以直接访问并使用盘符,但在Linux中,我们需要手动完成挂载操作。
a. mkfs
- 描述:格式化分区
- 语法:mkfs.文件系统类型 分区地址
-
- 文件系统类型:fat32、ext3、ext4、xfs、linux-swap等
mkfs.ext4 /dev/sdc1 # 将 /dev/sdc1 格式化为 ext4 类型
mkfs.xfs /dev/sdc2 # 将 /dev/sdc2 格式化为 xfs 类型
mkswap /dev/sdc3 # 将 /dev/sdc3 格式化为 swap 类型
格式化完成后,需要手动挂载文件系统,挂载可以通过命令实现,或者修改系统配置文件,使用命令挂载文件系统可以立即生效,但计算机重启后无效。通过修改系统配置文件这种方式挂载的文件系统在计算机重启后仍然有效。
第一种方式:使用mount命令实现文件系统的挂载。
b. mount
- 描述:挂载文件系统。
- 语法:mount [选项] [-o [选项]] 设备 挂载目录
-
- -a 读取/etc/fstab文件,并立刻挂载所有无noauto标记的设备。
- -t 指定文件系统类型(包括autofs、cifs、ext、ext2、ext3、ext4、hfs、iso9660、jfs、minix、msdos、nfs、nfs4、ntfs、proc、ramfs、reiserfs、romfs、squashfs、smbfs、sysv、tmpfs、ubifs、udf、ufs、usbfs、vfat、xenix、xfs等)。
- -o 指定挂载属性,具体属性可参考man手册
mkdir /data1 # 创建挂载目录
mount /dev/sdc1 /data1/ # 将 sdc1 挂载至 /data1 目录
mount # 查看挂载状态
touch /data1/test.txt # 创建测试文件
mount /dev/cdrom /media/ # 挂载光盘至 /media 目录
umount /dev/cdrom # 卸载光盘设备
umount /dev/sdc1 # 卸载sdc1文件系统
第二种方式:修改系统配置文件/etc/fstab,该文件中内容共计六列。
- 第一列为设备名称或设备标签,
- 第二列为挂载目录的名称,
- 第三列为文件系统类型,
- 第四列为挂载属性,
- 第五列指定该文件系统是否使用dump进行备份(0表示不备份,1表示每天备份),
- 第六列指定该文件系统在开机后使用fsck程序进行硬盘检测的顺序
-
- 一般情况下根文件系统被设置为1,表示最先检测,
- 其他文件系统被设置为2,表示第二个进行检测,
- 如果设置为0则表示不需要进行硬盘检测。
mkdir /data2 # 创建挂载点目录
vim /etc/fstab # 修改文件,在文件末尾插入如下内容:
/dev/sdc1 /data1 ext4 defaults 0 0
/dev/sdc2 /data2 ext4 defaults 0 0
mount -a # 挂载 fstab 文件中尚未挂载的文件系统
mount # 检查文件系统的挂载情况
3、LVM逻辑卷概述
随着业务的增加,文件系统负载会越来越大,可能面临空间不足的情况,使用传统的分区方式进行硬盘管理,就不得不将现有的所有分区全部删除,并重新规划存储解决方案。
其实从一开始就需要确定一种管理机制,帮助我们动态地管理存储,而LVM就提供了这种功能。
LVM(Logical Volume Manager)是基于内核的一种逻辑卷管理器,LVM适合于管理大存储设备,并允许用户动态调整文件系统的大小。此外,LVM的快照功能可以帮助我们快速备份数据。LVM为我们提供了逻辑概念上的硬盘,使得文件系统无须关心底层物理硬盘的概念。
- 物理卷(Physical Volume,PV):LVM的底层概念,是LVM的逻辑存储块,与硬盘分区是逻辑对应关系。分区不能直接合并,而多个LVM物理卷可以合并或拆分,从而实现硬盘容量的扩展和压缩。LVM提供了命令工具可以将分区或硬盘转换为物理卷,然后通过组合物理卷生成卷组。
- 卷组(Volume Group,VG):一个或多个物理卷的组合。卷组的大小取决于物理卷的容量及个数。
- 物理扩展单元大小(Physical Extent,PE):将物理卷组合为卷组后所划分的最小存储单位,即逻辑意义上硬盘的最小存储单元。LVM默认PE为4MB。
- 逻辑卷(Logical Volume,LV):LVM逻辑意义上的分区,我们可以指定从卷组中提取多少容量来创建逻辑卷。最后对逻辑卷格式化并挂载即可使用。
我们将物理硬盘分区转换为LVM的物理卷(PV),多个物理卷组合为卷组(VG),逻辑卷(LV)是从卷组中提取出来的存储空间,最后我们可以将逻辑卷挂载到某个挂载点目录上。
将普通分区转换为物理卷的命令是pvcreate,将物理卷组合为卷组的命令是vgcreate,从卷组中提取容量创建逻辑卷的命令是lvcreate。创建完成后可以分别使用pvdisplay、vgdisplay、lvdisplay命令查看效果。
a. pvcreate
- 描述:将硬盘或分区初始化为物理卷。
- 语法:pvcreate [选项] 物理卷 [物理卷…]
pvcreate /dev/sdc4 /dev/sde # 将 /dev/sdc4 和 /dev/sde 转换成物理卷
pvcreate /dev/sdb{1,2,3} # 将 sdb1、sdb2、sdb3 转换成物理卷
b. vgcreate
- 描述:创建卷组。
- 用法:vgcreate [选项] 卷组名称 物理设备路径 [物理设备路径…]
-
- -s 指定PE的容量
# 使用 sdb5 和 sdb6 创建一个名为 test_vg1 的卷组,默认 PE 为 4MB
vgcreate test_vg1 /dev/sdb5 /dev/sdb6
# 使用 sdc5 和 sdc6 创建一个名为 test_vg2 的卷组,PE 容量为 16M
vgcreate test_vg2 -s 16M /dev/sdc5 /dev/sdc6
c. lvcreate
- 描述:从卷组中提取存储空间,创建逻辑卷。
- 语法:lvcreate [选项] 卷组名称或路径 [物理卷路径]
-
- -l 指定使用多少个卷组中的PE创建逻辑卷,PE的容量在创建卷组时已经指定。
- -L 直接指定逻辑卷的容量大小,单位可以是b(B)、s(S)、k(K)、m(M)、g(G)、t(T)、p(P)或e(E)。
- -n 指定逻辑卷名称。
# 从 test_vg1 卷组中提取 2GB 容量,创建名为test_lv1 的逻辑卷
lvcreate -L 2G -n test_lv1 test_vg1
# 使用200个PE创建逻辑卷,每个PE之前被定义为16M大小
lvcreate -l 200 -n test_lv2 test_vg2
# 使用test_vg1卷组中/dev/sdb6这个物理卷的存储空间,创建名为test_lv1的逻辑卷
lvcreate -L 2G -n test_lv1 test_vg1 /dev/sdb6
4、创建LVM分区实例
这里假设有一块容量为500GB的硬盘sdb,创建四个100GB的分区,并使用这四个分区创建一个名称为test_vg的卷组,最后从该卷组中提取两个大小为120GB的逻辑卷,分别命名为test_web、test_data。
a. 创建分区:parted
# 使用GPT方式给/dev/sdb 初始化分区表
parted /dev/sdb mklabel gpt
# 创建4个分区,每个分区容量为100G
parted /dev/sdb1 mkpart primary 1 100G
parted /dev/sdb2 mkpart primary 100G 200G
parted /dev/sdb3 mkpart primary 200G 300G
parted /dev/sdb4 mkpart primary 300G 400G
# 识别新创建的分区
partprobe /dev/sdb
# 查看分区结果
parted /dev/sdb print
b. 创建物理卷:pvcreate
pvcreate /dev/sdb{1,2,3,4} # 创建物理卷sdb1、sdb2、sdb3、sdb4
pvdisplay # 查看物理卷
pvs # 也可使用pvs查看物理卷的简要信息
c. 创建卷组:vgcreate
vgcreate test_vg /dev/sdb{1,2,3,4} # 使用sdb1、sdb2、sdb3、sdb4创建卷组
vgdisplay # 查看卷组,也可使用vgs命令查看简要信息
d. 创建逻辑卷:lvcreate
# 从test_vg卷组中提取120G空间用于创建test_web逻辑卷
lvreate -L 120G -n test_web test_vg
# 从test_vg卷组中提取30000个PE用于创建test_data逻辑卷
lvcreate -l 30000 -n test_data test_vg
# 查看逻辑卷,也可使用lvs查看逻辑卷简要信息
lvdisplay
e. 格式化并挂载:mkfs & mount
mkfs.xfs /dev/test_vg/test_web # 格式化逻辑卷test_web
mkfs.xfs /dev/test_vg/test_data # 格式化逻辑卷test_data
mkdir -p /test/{web,data} # 创建挂载目录
# 配置挂载文件
cat >> /etc/fstab << EOF
/dev/test_vg/test_web /test/web xfs defaults 0 0
/dev/test_vg/test_data /test/data xfs defaults 0 0
EOF
mount -a # 挂载fstab中尚未挂载的文件系统
df -h # 查看文件系统挂载状态
5、修改LVM分区容量
随着时间的推移,逻辑卷test_data现有的存储空间已经不能满足企业大业务量的需要,若我们需要将存储容量增大至240GB,LVM随时可以帮助我们动态调整文件系统的大小。
(接续上面的创建LVM分区实例)由于test_vg这个卷组还有足够的剩余空间(160G)可以划分给逻辑卷,所以我们可以直接使用lvextend命令调整逻辑卷大小。但lvextend仅能调整逻辑卷大小,使用该命令调整完逻辑卷大小后,还需要使用xfs_growfs命令更新文件系统的大小。
提示:在企业生产环境中,为文件系统调整大小前建议先做好数据的备份工作。
a. 调整逻辑卷大小:lvextend
lvextend -L +120G /dev/test_vg/test_data # 扩容逻辑卷
lvs # 查看逻辑卷,已经完成扩容
df -h # 查看文件系统挂载状态,此时没有变化
b. 更新文件系统:xfs_growfs
xfs_growfs /dev/test_vg/test_data # 调整文件系统大小
df -h # 调整后查看文件系统挂载状态,有变化
此外,当卷组没有足够的空间划分给逻辑卷时,LVM的卷组容量大小也是可以动态调整的。
- 这时需要使用parted或fdisk命令创建一个新的分区,
- 并使用pvcreate命令将新分区或整个新硬盘设备转换为物理卷,
- 通过vgextend命令将新的物理卷追加至现有的卷组空间中,
- 最后使用lvextend命令调整逻辑卷的容量。
下面再次扩展逻辑卷test_data的存储空间至360GB。
# 使用sdb硬盘,从400G位置开始创建分区,分区结束位置是硬盘100%(容量结束)的位置
parted /dev/sdb mkpart primary 400G 100%
pvcreate /dev/sdb5 # 将sdb5转换为物理卷
vgextend test_vg /dev/sdb5 # 将sdb5追加至test_vg卷组中
vgdisplay test_vg # 查看test_vg卷组信息
# 将逻辑卷扩展至360G,扩容时可以直接写想要达到的最终容量,在现有容量基础上增加容量
lvextend -L 360G /dev/test_vg/test_data
xfs_growfs /dev/test_vg/test_data # 更新文件系统大小
df -h # 查看文件系统挂载状态
6、删除LVM分区
当我们不再需要逻辑卷分区时,可以使用LVM命令轻松地删除之前创建的物理卷、卷组、逻辑卷。
删除的顺序应该与创建时的顺序相反,即遵照卸载文件系统、删除逻辑卷、删除卷组、删除物理卷这样的顺序。卸载文件系统时需要注意,如果有必要,应该更新/etc/fstab文件。
# 第一步:卸载文件系统
umount /dev/test_vg/test_web # 卸载 test_web 文件系统
umount /dev/test_vg/test_data # 卸载 test_data 文件系统
vim /etc/fstab # 编辑文件,删除对应的挂载信息
# 第二步:删除逻辑卷
lvremove /dev/test_vg/test_data # 删除逻辑卷 test_data
lvremove /dev/test_vg/test_web # 删除逻辑卷 test_web
# 第三步:删除卷组
vgremove test_vg # 删除 test_vg 卷组
# 第四步:删除物理卷
pvremove /dev/sdb{1,2,3,4,5} # 删除sdb1、sdb2、sdb3、sdb4、sdb5物理卷
7、RAID 硬盘阵列概述
RAID(Redundant Array of Independent Disk)即独立冗余硬盘阵列,其思想是将多块独立的硬盘按不同的方式组合为一个逻辑硬盘,从而提高存储容量,提升存储性能或提供数据备份功能。RAID存储系统的组合方式根据RAID级别来定义。
RAID分为软件RAID和硬件RAID两类。现有的操作系统,如Windows、Linux、UNIX等已经集成了软件RAID的功能。软件RAID可以实现与硬件RAID相同的功能,但由于其没有独立的硬件控制设备,所以性能不如硬件RAID。
软件RAID实现简单,不需要额外的硬件设备,硬件RAID通常需要RAID卡,RAID卡本身会有独立的控制部件和内存,所以不会占用系统资源,效率高、性能强。当然,目前市面上有很多主板已经集成了RAID卡,具体的使用方式可以参考硬件说明书。目前,RAID存储系统被广泛应用于生产环境作为存储解决方案。
8、RAID 级别
根据RAID的组合方式不同,可以解决的业务问题也不同,以下介绍几种常见的RAID方案(RAID级别)。
a. RAID 0(不含校验与冗余的条带存储)
多块硬盘组合为RAID 0后,数据将被分割并分别存储在每块硬盘中,所以能最大限度提升存储性能与存储空间,但无法容错,RAID 0至少需要两块硬盘。
如果有一个文件要写入RAID 0,则该文件会被分割为多个部分(如上图的四个数据块),DATA1与DATA2被分别同步存入硬盘1与硬盘2,其他部分以此类推。读取该文件时,将同时从硬盘1与硬盘2中读取数据。如果两块硬盘的存储空间均为120GB,则RAID 0的总存储空间为240G。
缺点:因为没有校验与备份,因此,若两块硬盘中有一块硬盘损坏,即硬盘中的任何一个数据块损坏,都将导致整个文件无法被读取。
b. RAID 1(不含校验的镜像存储)
多块硬盘组合为RAID 1后,数据将被同时复制到每块硬盘中,制作这种硬盘阵列至少需要两块硬盘,该级别的RAID只要有一块硬盘可用即可正常工作,安全性是最好的,硬盘利用率是最低的。
如果有一个文件要写入RAID 1,则该文件会被写入硬盘1,同时以复制备份的形式被写入硬盘2,DATA1与DATA2被同时存入硬盘1与硬盘2,其他部分以此类推。RAID 1写入数据的效率会降低,因为相同数据需要同时写入两块硬盘,但RAID 1读取数据的效率会提升,因为可以同时从两块硬盘读取数据。
缺点:RAID 1的写入效率低下,且硬盘利用率极低,如果两块硬盘的存储空间均为120GB,则RAID 1的总存储空间依然为120GB。
c. RAID 2(位级别的校验式条带存储)
多块硬盘组合为RAID 2后,数据将以位(bit)为单位被同步存储在不同的硬盘上,并通过海明码(一种具有纠错功能的校验码)被校验与恢复。
如果有一个文件要写入RAID 2,则该文件会被分成数据位同步写入不同的硬盘,DATA1与DATA2进行海明码运算后再被写入校验盘,Parity代表校验数据,其他后续数据以此类推,写入多个硬盘。拥有校验位的RAID 2允许三块硬盘中的任意一块硬盘损坏,并能够对未损坏的两块硬盘进行运算,还原已损坏硬盘上的数据,从而实现数据恢复。RAID 2的大数据量读写性能很高,但对少量数据的读写性能反而不好,该硬盘阵列至少需要三块硬盘。
d. RAID 3(字节级别的校验式条带存储)
该级别硬盘阵列的存储原理可以参考RAID 2,不同之处是,数据分割的单位为字节。
e. RAID 4(数据块级别的校验式条带存储)
该级别硬盘阵列的存储原理与RAID 2类似,仅数据分割单位不同。
f. RAID 5(数据块级别的分布式校验条带存储)
多块硬盘组合为RAID 5后,数据将以块(block)为单位被同步存储到不同的硬盘上,并进行海明码运算。与其他级别不同,该级别的海明码会被写入不同的硬盘。
g. RAID 10(镜像与条带存储)
RAID 10不是独创的RAID级别,而是由RAID 1与RAID 0结合而成的。RAID 10继承了RAID 0的快速与高效,同时继承了RAID 1的数据安全性,RAID10至少需要四块硬盘。RAID 10通常有两种结构,一种是RAID 0+1结构,一种是RAID 1+0结构。如果是RAID 1+0结构,则先使用四块硬盘组合成两个独立的RAID 1,然后将两个RAID 1组合为一个RAID 0。
当数据被写入时,首先会以条带方式同步被写入由两个RAID 1组合而成的RAID 0中,随后,当数据被写入由具体硬盘组成的RAID 1时,又可以实现双硬盘镜像功能。
缺点:RAID 10继承了RAID 0和RAID 1的优点,但同时也继承了两者的缺点,RAID 10的硬盘利用率很低,只有50%。
9、创建与管理软件RAID实例
例假设我们的计算机有四块20GB的空闲硬盘,分别为sdb、sdc、sdd、sde。
lsblk # 查看硬盘信息
从以上输出信息可以看出,本机有sdb、sdc、sdd、sde四块硬盘未分区,如果需要在Linux中创建软件RAID,可以在每块硬盘中创建RAID,也可以在每块硬盘中分出多个区自由组合创建软件RAID,这里我们将每块硬盘分两个区。
a. 创建硬盘分区
parted /dev/sdb mklabel gpt # 初始化磁盘分区表,格式为GPT
parted /dev/sdb mkpart primary 0% 50% # 创建sdb第一个分区 从 1M - 容量50%
parted /dev/sdb mkpart primary 50% 100% # 创建sdb第二个分区 从 容量 50% - 100%
# 其他硬盘重复上述操作
partprobe -a # 识别新创建的所有分区
lsblk # 查看磁盘信息
b. 创建RAID:mdadm
- 描述:管理Linux软件RAID设备。
- 语法:mdadm [模式] 选项 <raid设备>
-
- -C 创建软件RAID(create)。
- -l 指定RAID级别(level)。
- -n 指定硬盘数。(number)
- -x 指定备用设备数
- -f 模拟硬盘损坏。(fail)
- --detail 查看RAID设备信息
# 创建名为md0的RAID 0设备
mdadm -C /dev/md0 -l 0 -n 3 /dev/sdb1 /dev/sdc1 /dev/sdd1
# 创建名为md1的RAID 5设备
mdadm -C /dev/md1 -l 5 -n 3 -x 1 /dev/sdb2 /dev/sdc2 /dev/sdd2 /dev/sde1
# 查看 md0 信息
mdadm --detail /dev/md0
c. 格式化与挂载
# 格式化并挂载md0
mkfs.xfs /dev/md0
mkdir /raid0
mount /dev/md0 /raid0
# 格式化并挂载md1
mkfs.xfs /dev/md1
mkdir /raid1
mount /dev/md1 /raid1
将硬盘阵列设备设置为开机自动挂载
# 将硬盘阵列设备配置到 /etc/mdadm.conf 文件中,开机后自动挂载硬盘阵列设备
echo "DEVICE /dev/sdb1 /dev/sb2 /dev/sbc1 /dev/sdc2 /dev/sdd1 /dev/sdd2 \
/dev/sde1" > /etc/mdadm.conf
# 查看当前计算机的软件RAID配置
mdadm -Evs
- DEVICE行列出所有硬盘阵列的设备名称,
- ARRAY行描述硬盘阵列的基本信息,包括名称、级别、UUID等信息。
# 查看当前计算机的软件RAID配置,将结果追加到 /etc/mdadm.conf 配置文件
mdadm -Evs >> /etc/mdadm.conf
# 修改 /etc/fstab 配置文件,设置开机挂载软件 RAID 设备
echo "/dev/md0 /raid0 xfs defaults 0 0" >> /etc/fstab
echo "/dev/md1 /raid1 xfs defaults 0 0" >> /etc/fstab
10、RAID 性能测试
# 普通硬盘:写入1GB数据模拟
time dd if=/dev/zero of=/txt bs=1M count=1000
可以看出,对于普通硬盘,在根分区下写入1GB的数据所需总时间为23.262s。
# RAID 0:写入1GB数据模拟
time dd if=/dev/zero of=/raid0/txt bs=1M count=1000
可以看出,对RAID 0写入1GB数据所需总时间为4.308s。
# RAID 5:写入1GB数据模拟
time dd if=/dev/zero of=/raid5/txt bs=1M count=1000
可以看出,由于RAID 5需要生成校验位数据,所以写入数据的速度比RAID 0慢,但比普通硬盘快,写入1GB数据所需总时间为12.614s。
11、RAID 故障模拟
# 模拟硬盘sdb2的损坏
mdadm /dev/md1 -f /dev/sdb2
# 查看 md1 的详细信息
mdadm --detail /dev/md1
由于上面做性能测试时已经向RAID 5中写入了1GB的数据,所以使用命令模拟硬盘损坏后,快速查看RAID详细信息可以看出正在使用/dev/sde1重建数据(还原数据),而原来的/dev/sdb2成了损坏的空闲设备。