硬盘管理讲解
RAID
各自的区别
RAID | 硬盘数量 | 磁盘利用率 | 能否校验 | 保护能力 | 读写性能 |
---|---|---|---|---|---|
RAID0 | N(任意) | N | 否 | 无 | 单个硬盘的N倍 |
RAID1 | N(偶数) | N/2 | 否 | 允许一个设备故障 | 需写两对存储设备,互为主备 |
RAID5 | N>=3 | (N-1)/2 | 能 | 允许一个设备故障 | 需写计算校验 |
RAID6 | N>=4 | (N-2)/2 | 能 | 允许两个设备故障 | 需双重写计算校验 |
RAID10 | N>=4(偶数) | N/2 | 否 | 允许两个基组中各坏一个 | N/2块盘同时写入 |
mdadm
# 查看指定raid设备
mdadm -D /dev/md1
# 增加热备盘
mdadm /dev/md1 -a /dev/sdb4
# 使磁盘失效
mdadm /dev/md1 -f /dev/sdb1
# 移除某个磁盘
mdadm /dev/md1 -r /dev/sdb1
# 停止raid阵列
mdadm -S /dev/md1
# 增加raid工作盘数到4个
mdadm -G /dev/md1 -n 4
LVM
名词解释
物理卷:physical volume PV
卷组:vlolume groap VG
物理分区:physical partition PP
逻辑卷:logical volume LV
逻辑分区:logical partition LP
物理卷:不能调整文件系统大小
卷组:将一块或多块硬盘融合成一块
逻辑卷:逻辑卷才能建立文件系统,逻辑卷支持扩容(在线扩容),可用来实现对分区的动态扩展。
添加硬盘、创建物理卷、合成卷组、划分逻辑卷
mkdir建立挂载点目录、mfks格式化、挂载
LVM命令
-
命令一览表
功能 物理卷管理 卷组管理 逻辑卷管理 scan扫描 pvscan vgscan lvscan create创建 pvcreate vgcreate lvcreate display显示 pvdisplay vgdisplay lvdisplay remove删除 pvremove vgremove lvremove extend扩展 无 vgextend lvextend reduce缩减 无 vgreduce lvreduce -
部分命令参数
格式:lvcreate -L 容量大小 -n 逻辑卷名 卷组名
fdisk
-
常用参数
-b 指定每个分区的大小 -l 列出指定的外围设备的分区表状况 -s 将指定的分区大小输出到标准输出上,单位为区块 -u 搭配”-l”参数列表,会用分区数目取代柱面数目,来表示每个分区的起始地址 -v 显示版本信息 -m 查看全部可用参数 -n 添加新的分区 -d 删除某个分区信息 -t 改变某个分区的类型 -p 查看分区表信息 -w 保存并退出 -q 不保存直接退出
lsblk
-
常用选项
-d ∶仅列出磁盘本身,并不会列出该磁盘的分区数据 -f ∶同时列出该磁盘内的文件系统名称 -i∶使用 ASCII的线段输出,不要使用复杂的编码(在某些环境下很有用) -m ∶同时输出该装置在 /dev 底下的权限数据(rwx的数据) -p ∶列出该装置的完整文件名!而不是仅列出最后的名字而已。 -t ∶列出该磁盘装置的详细数据,包括磁盘队列机制、预读写的数据量大小等
-
常见用法
[root@localhost data]# lsblk -p NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT /dev/sda 8:0 0 20G 0 disk ├─/dev/sda1 8:1 0 300M 0 part /boot ├─/dev/sda2 8:2 0 2G 0 part [SWAP] └─/dev/sda3 8:3 0 17.7G 0 part / /dev/sdb 8:16 0 20G 0 disk └─/dev/mapper/datavg-datalv 253:0 0 40G 0 lvm /data /dev/sdc 8:32 0 20G 0 disk └─/dev/mapper/datavg-datalv 253:0 0 40G 0 lvm /data /dev/sr0 11:0 1 1024M 0 rom /dev/sr1 11:1 1 1024M 0 rom NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 xfs a79b326d-6ed3-46e3-ac2f-60a785fa0860 /boot ├─sda2 swap 44b2debe-5c86-48ee-a961-7f8ed1456912 [SWAP] └─sda3 xfs 3d8eec79-159d-4de2-bdc7-2f1395c64c9b / sdb LVM2_member xwqQiK-H20V-g3bI-VFQn-EPiB-6b4F-3vd8yp └─datavg-datalv xfs dc4c4145-5b3e-495e-a2f4-1f9b03e5ccb0 /data sdc LVM2_member 6OJZ9f-HBVU-xIzH-3zbq-z2My-VlfX-rE8UVV └─datavg-datalv xfs dc4c4145-5b3e-495e-a2f4-1f9b03e5ccb0 /data sr0 sr1
mdadm
-
mdadm模式
模式名字 主要功能 (对于存储管理系统) Create 使用空闲的设备创建一个新的阵列,每个设备具有元数据块 创建RAID时使用的命令 Assemble 将原来属于一个阵列的每个块设备组装为阵列 在存储管理系统一般不使用该模式 Build 创建或组装不需要元数据的阵列,每个设备没有元数据块 在存储管理系统一般不使用该模式 Manage 管理已经存储阵列中的设备,比如增加热备磁盘或者设置某个磁盘失效,然后从阵列中删除这个磁盘 用于增加热备盘移除失效盘 Misc 报告或者修改阵列中相关设备的信息,比如查询阵列或者设备的状态信息 用于查询RAID信息 Grow 改变阵列中每个设备被使用的容量或阵列中的设备的数目,改变阵列属性(不能改变阵列的级别) 在存储管理系统一般不使用该模式 Monitor 监控一个或多个阵列,上报指定的事件,可以实现全局热备 监控RAID,写入日志 -
概念讲解
/proc/mdstat 当前md(软RAID)的状态信息 /etc/mdadm.conf mdadm的配置文件 Active devices RAID中的活动组件设备 Faulty device RAID中失效的设备 Spare device RAID中热备盘 Device Names RAID设备名、标准格式是”/dev/mdNN”或者”/dev/md/NN” md Multiple Devices虚拟块设备(利用底层多个块设备虚拟出一个新的虚拟块设备) md driver MD的驱动 Array 阵列,跟RAID意思相同 Raid 不解释 md device 就是使用MD创建的软件RAID md array 同上 md设备 同上
组建RAID5并通过LVM管理磁盘
组建RAID5
-
添加硬盘并重启后,查看硬盘是否添加成功
[root@localhost dev]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 300M 0 part /boot ├─sda2 8:2 0 2G 0 part [SWAP] └─sda3 8:3 0 17.7G 0 part / sdb 8:16 0 20G 0 disk sdc 8:32 0 20G 0 disk sdd 8:48 0 20G 0 disk sde 8:64 0 20G 0 disk sr0 11:0 1 1024M 0 rom sr1 11:1 1 1024M 0 rom
-
将新添加的硬盘全部格式化,并且更改为
Linux raid autodetect
模式[root@localhost dev]# fdisk -l | grep /dev Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors /dev/sda1 * 2048 616447 307200 83 Linux /dev/sda2 616448 4810751 2097152 82 Linux swap / Solaris /dev/sda3 4810752 41943039 18566144 83 Linux Disk /dev/sde: 21.5 GB, 21474836480 bytes, 41943040 sectors /dev/sde1 2048 41943039 20970496 fd Linux raid autodetect Disk /dev/sdd: 21.5 GB, 21474836480 bytes, 41943040 sectors /dev/sdd1 2048 41943039 20970496 fd Linux raid autodetect Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors /dev/sdc1 2048 41943039 20970496 fd Linux raid autodetect Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors /dev/sdb1 2048 41943039 20970496 fd Linux raid autodetect
-
使用
mdadm
命令创建RAID5阵列[root@localhost dev]# mdadm --create -l5 -n4 /dev/md5 /dev/sd[bcde]1 # -x选项为设置热备盘数量和指定热备盘 # mdadm --create -l5 -n4 /dev/md5 /dev/sd[bcde]1 -x1 /dev/sdf1 mdadm: /dev/sdb1 appears to be part of a raid array: level=raid5 devices=3 ctime=Tue Jan 10 00:47:24 2023 mdadm: /dev/sdc1 appears to be part of a raid array: level=raid5 devices=3 ctime=Tue Jan 10 00:47:24 2023 mdadm: /dev/sdd1 appears to be part of a raid array: level=raid5 devices=3 ctime=Tue Jan 10 00:47:24 2023 mdadm: /dev/sde1 appears to be part of a raid array: level=raid5 devices=3 ctime=Tue Jan 10 00:47:24 2023 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md5 started.
-
通过
cat /proc/mdstat
和lsblk
查看[root@localhost dev]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 300M 0 part /boot ├─sda2 8:2 0 2G 0 part [SWAP] └─sda3 8:3 0 17.7G 0 part / sdb 8:16 0 20G 0 disk └─sdb1 8:17 0 20G 0 part └─md5 9:5 0 60G 0 raid5 sdc 8:32 0 20G 0 disk └─sdc1 8:33 0 20G 0 part └─md5 9:5 0 60G 0 raid5 sdd 8:48 0 20G 0 disk └─sdd1 8:49 0 20G 0 part └─md5 9:5 0 60G 0 raid5 sde 8:64 0 20G 0 disk └─sde1 8:65 0 20G 0 part └─md5 9:5 0 60G 0 raid5 sr0 11:0 1 1024M 0 rom sr1 11:1 1 1024M 0 rom [root@localhost dev]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md5 : active raid5 sde1[4] sdd1[2] sdc1[1] sdb1[0] 62859264 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [UUU_] [==================>..] recovery = 90.4% (18946560/20953088) finish=0.1min speed=199648K/sec unused devices: <none>
-
mdadm -D /dev/md5
查看详细信息[root@localhost dev]# mdadm -D /dev/md5 /dev/md5: Version : 1.2 Creation Time : Tue Jan 10 01:07:40 2023 Raid Level : raid5 Array Size : 62859264 (59.95 GiB 64.37 GB) Used Dev Size : 20953088 (19.98 GiB 21.46 GB) Raid Devices : 4 Total Devices : 4 Persistence : Superblock is persistent Update Time : Tue Jan 10 01:09:26 2023 State : clean Active Devices : 4 Working Devices : 4 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 512K Consistency Policy : resync Name : localhost.localdomain:5 (local to host localhost.localdomain) UUID : 9844ba4c:54e8f6f0:cbe47468:8b42b638 Events : 18 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 33 1 active sync /dev/sdc1 2 8 49 2 active sync /dev/sdd1 4 8 65 3 active sync /dev/sde1
通过LVM管理
-
创建pv并查看
[root@localhost dev]# pvcreate pvdata /dev/md5 Device pvdata not found. Physical volume "/dev/md5" successfully created. [root@localhost dev]# pvscan PV /dev/md5 VG vgdata lvm2 [<59.95 GiB / <59.95 GiB free] Total: 1 [<59.95 GiB] / in use: 1 [<59.95 GiB] / in no VG: 0 [0 ] [root@localhost dev]# pvdisplay --- Physical volume --- PV Name /dev/md5 VG Name vgdata PV Size <59.95 GiB / not usable 2.00 MiB Allocatable yes PE Size 4.00 MiB Total PE 15346 Free PE 15346 Allocated PE 0 PV UUID W7GcWu-z462-yTNK-GEO1-4l8F-QQMU-TtPAv7
-
创建vg并查看
[root@localhost dev]# vgcreate vgdata /dev/md5 Volume group "vgdata" successfully created [root@localhost dev]# vgscan Reading volume groups from cache. Found volume group "vgdata" using metadata type lvm2 [root@localhost dev]# vgdisplay --- Volume group --- VG Name vgdata System ID Format lvm2 Metadata Areas 1 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 1 Act PV 1 VG Size <59.95 GiB PE Size 4.00 MiB Total PE 15346 Alloc PE / Size 0 / 0 Free PE / Size 15346 / <59.95 GiB VG UUID tVG08I-KUA2-pgDW-v9xG-wWMq-UG46-C8RbSK
-
创建lv并查看
[root@localhost dev]# lvcreate -l15346 -n lvdata vgdata Logical volume "lvdata" created. [root@localhost dev]# lvscan ACTIVE '/dev/vgdata/lvdata' [<59.95 GiB] inherit [root@localhost dev]# lvdisplay --- Logical volume --- LV Path /dev/vgdata/lvdata LV Name lvdata VG Name vgdata LV UUID OMYZYy-haTg-L8Hy-tAYN-Mced-HcOv-ayh0pk LV Write Access read/write LV Creation host, time localhost.localdomain, 2023-01-10 01:18:23 -0800 LV Status available # open 0 LV Size <59.95 GiB Current LE 15346 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:0
-
查看lv
[root@localhost dev]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 300M 0 part /boot ├─sda2 8:2 0 2G 0 part [SWAP] └─sda3 8:3 0 17.7G 0 part / sdb 8:16 0 20G 0 disk └─sdb1 8:17 0 20G 0 part └─md5 9:5 0 60G 0 raid5 └─vgdata-lvdata 253:0 0 60G 0 lvm sdc 8:32 0 20G 0 disk └─sdc1 8:33 0 20G 0 part └─md5 9:5 0 60G 0 raid5 └─vgdata-lvdata 253:0 0 60G 0 lvm sdd 8:48 0 20G 0 disk └─sdd1 8:49 0 20G 0 part └─md5 9:5 0 60G 0 raid5 └─vgdata-lvdata 253:0 0 60G 0 lvm sde 8:64 0 20G 0 disk └─sde1 8:65 0 20G 0 part └─md5 9:5 0 60G 0 raid5 └─vgdata-lvdata 253:0 0 60G 0 lvm sr0 11:0 1 1024M 0 rom sr1 11:1 1 1024M 0 rom
-
创建分区,格式化并查看信息
fdisk /dev/vgdata/lvdata Disk /dev/mapper/vgdata-lvdata: 64.4 GB, 64365789184 bytes, 125714432 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 524288 bytes / 1572864 bytes Disk label type: dos Disk identifier: 0x5eb23829 Device Boot Start End Blocks Id System /dev/mapper/vgdata-lvdata1 3072 125714431 62855680 83 Linux [root@localhost vgdata]# mkfs.xfs -f /dev/vgdata/lvdata meta-data=/dev/vgdata/lvdata isize=512 agcount=16, agsize=982144 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=15714304, imaxpct=25 = sunit=128 swidth=384 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=7680, version=2 = sectsz=512 sunit=8 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
-
挂载目录
[root@localhost vgdata]# mount /dev/vgdata/lvdata /data [root@localhost vgdata]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 13M 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/sda3 18G 4.9G 13G 28% / /dev/sda1 297M 164M 134M 55% /boot tmpfs 378M 12K 378M 1% /run/user/42 tmpfs 378M 0 378M 0% /run/user/0 /dev/mapper/vgdata-lvdata 60G 33M 60G 1% /data
-
开机启动
# 保存RAID5配置信息 mdadm -vDs > /etc/mdadm.conf # 找到设备的UUID mdadm --misc --detail /dev/md5 UUID : 9844ba4c:54e8f6f0:cbe47468:8b42b638 # 写入/etc/fstab vim /etc/fstab UUID=44b2debe-5c86-48ee-a961-7f8ed1456912 swap swap defaults 0 0
模拟磁盘损坏
-
移除硬盘
[root@localhost events.d]# mdadm /dev/md5 -r /dev/sdc1 //-r参数移出磁盘 mdadm: hot removed /dev/sdc1 from /dev/md5 [root@localhost events.d]# mdadm /dev/md5 -a /dev/sdf1 //-a参数添加磁盘 mdadm: added /dev/sdf1 [root@localhost events.d]# mdadm -D /dev/md5 //查看 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 3 8 65 1 active sync /dev/sde1 4 8 49 2 active sync /dev/sdd1 5 8 81 - spare /dev/sdf1 //sdf1已成为备份
-
模拟损坏
[root@localhost events.d]# mdadm -f /dev/md5 /dev/sdc1 //模拟sdc1损坏 mdadm: set /dev/sdc1 faulty in /dev/md5 [root@localhost events.d]# mdadm -D /dev/md5 //查看raid 5情况 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 3 8 65 1 spare rebuilding /dev/sde1 //正在同步数据 4 8 49 2 active sync /dev/sdd1 1 8 33 - faulty /dev/sdc1 //损坏
删除RAID5
# 取消挂载
umount /dev/md5
# 删除RAID5
mdadm --manage --stop /dev/md5