第7章 使用RAID与LVM磁盘阵列技术
章节简述:
您好,此章节为新增加的知识内容,正在努力的排版完善,预习2016年9月中旬完成,感谢您的支持,QQ群:340829。
7.1 磁盘冗余阵列
将多块硬盘通过硬件或软件的方式串联在一起,成为一个大的卷集,将数据依次写入到各个硬盘中,这样性能会极大提升,但若任意一块硬盘故障则整个系统的数据都会受到破坏。
实现原来是在数据写入硬盘时也会在另外一块闲置的硬盘上生成镜像文件,在不影响性能的情况下最大限度保证数据资料的可靠性,只要在一对镜像盘中还有一块硬盘可以使用,那么数据也不会丢失,具有很好的硬盘冗余能力,虽然对数据来讲绝对的安全,但成本却明显增加,磁盘利用率仅为50%。
如上图所示"parity"块中保存的是其他硬盘数据的奇偶校验信息(并非其他硬盘的数据),以数据的奇偶校验信息来保证数据的安全,RAID5不以单独的硬盘来存放数据的奇偶校验信息,而是保存在各个磁盘上。这样当任何一个硬盘损坏都可以根据其他硬盘上的奇偶校验信息来尝试重建损坏的数据,性能也很高,兼顾了存储性能、数据安全和存储成本,可以看作是RAID0与RAID1的折中方案。
继承了RAID0的快速与RAID1的安全,RAID1在这里提供了冗余备份的阵列,而RAID0则负责数据的读写阵列。因这种结构的成本高,一般用于存放要求速度与差错控制的数据。
名称 | 作用 |
Assemble | 将设备加入到以前定义的阵列 |
Build | 创建一个没有超级块的阵列 |
Create | 创建一个新的阵列,每个设备具有超级块。 |
Manage | 管理阵列(如添加和删除)。 |
Misc | 允许单独对阵列中的某个设备进行操作(如停止阵列)。 |
Follow or Monitor | 监控状态。 |
Grow | 改变阵列的容量或设备数目。 |
参数 | 作用 |
-a | 检测设备名称 |
-n | 指定设备数量 |
-l | 指定raid级别 |
-C | 创建 |
-v | 显示过程 |
-f | 模拟设备损坏 |
-r | 移除设备 |
-Q | 查看摘要信息 |
-D | 查看详细信息 |
-S | 停止阵列 |
-C代表创建操作,-v显示创建过程,-a yes检查RAID名称,-n是用到的硬盘个数,-l是定义RAID的级别而后面写上要加入阵列的硬盘名称。
[root@linuxprobe ~]#mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde mdadm: layout defaults to n2 mdadm: layout defaults to n2 mdadm: chunk size defaults to 512K mdadm: size set to 20954624K mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
第3步:格式化并挂载使用
将RAID磁盘阵列格式化为ext4格式:
[root@linuxprobe ~]# mkfs.ext4 /dev/md0 mke2fs 1.42.9 (28-Dec-2013) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=128 blocks, Stripe width=256 blocks 2621440 inodes, 10477312 blocks 523865 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2157969408 320 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done
创建挂载目录:
[root@linuxprobe ~]# mkdir /RAID
进行文件系统的挂载:
[root@linuxprobe ~]# mount /dev/md0 /RAID
查看磁盘挂载信息:
[root@linuxprobe ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/rhel-root 18G 3.0G 15G 17% / devtmpfs 905M 0 905M 0% /dev tmpfs 914M 84K 914M 1% /dev/shm tmpfs 914M 8.9M 905M 1% /run tmpfs 914M 0 914M 0% /sys/fs/cgroup /dev/sr0 3.5G 3.5G 0 100% /media/cdrom /dev/sda1 497M 119M 379M 24% /boot /dev/md0 40G 49M 38G 1% /RAID
将此磁盘阵列挂载信息设置为重启后也依然生效:
[root@linuxprobe ~]# echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab
第4步:查看/dev/md0设备信息
参数-D查看RAID阵列的详细信息:
[root@linuxprobe ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Tue May 5 07:43:26 2015 Raid Level : raid10 Array Size : 41909248 (39.97 GiB 42.92 GB) Used Dev Size : 20954624 (19.98 GiB 21.46 GB) Raid Devices : 4 Total Devices : 4 Persistence : Superblock is persistent Update Time : Tue May 5 07:46:59 2015 State : clean Active Devices : 4 Working Devices : 4 Failed Devices : 0 Spare Devices : 0 Layout : near=2 Chunk Size : 512K Name : localhost.localdomain:0 (local to host localhost.localdomain) UUID : cc9a87d4:1e89e175:5383e1e8:a78ec62c Events : 17 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc 2 8 48 2 active sync /dev/sdd 3 8 64 3 active sync /dev/sde
第5步:模拟有1块硬盘损坏的情况
使用mdadm的-f参数将/dev/sdb移出阵列:
[root@linuxprobe ~]# mdadm /dev/md0 -f /dev/sdb mdadm: set /dev/sdb faulty in /dev/md0
再看下阵列的状态(此时的/dev/sdb状态被是移除,失败状态):
[root@linuxprobe ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Fri May 8 08:11:00 2015 Raid Level : raid10 Array Size : 41909248 (39.97 GiB 42.92 GB) Used Dev Size : 20954624 (19.98 GiB 21.46 GB) Raid Devices : 4 Total Devices : 4 Persistence : Superblock is persistent Update Time : Fri May 8 08:27:18 2015 State : clean, degraded Active Devices : 3 Working Devices : 3 Failed Devices : 1 Spare Devices : 0 Layout : near=2 Chunk Size : 512K Name : linuxprobe.com:0 (local to host linuxprobe.com) UUID : f2993bbd:99c1eb63:bd61d4d4:3f06c3b0 Events : 21 Number Major Minor RaidDevice State 0 0 0 0 removed 1 8 32 1 active sync /dev/sdc 2 8 48 2 active sync /dev/sdd 3 8 64 3 active sync /dev/sde 0 8 16 - faulty /dev/sdb
第6步:损坏后依然正常使用
因为RAID10级别能够允许一组RAID1硬盘中存在一个故障盘而不影响使用,所以依然可以正常的创建或删除文件~
现在就把新的硬盘添加进去吧,当然也可以让硬盘sdb恢复使用:请重启后执行“ mdadm /dev/md0 -a /dev/sdb”。
第7步:设置冗余备份磁盘
现在发现了一个问题没?运维人员需要在硬盘硬件出现故障后手工添加新的磁盘进去,这样会不会比较不方便?
假如初始化RAID5阵列时直接给予4块硬盘,其中1块硬盘设备用于在阵列某块磁盘故障时自动的替换上去,这样很棒吧!
先将磁盘系统卸载:
[root@linuxprobe ~]# umount /dev/md0
停止该阵列设备,彻底的停用:
[root@linuxprobe ~]# mdadm -S /dev/md0 mdadm: stopped /dev/md0
现在该阵列已经找不到了:
[root@linuxprobe ~]# mdadm -D /dev/md0 mdadm: cannot open /dev/md0: No such file or directory
创建RAID5并设置1块备份故障盘:
[root@linuxprobe ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde mdadm: layout defaults to left-symmetric mdadm: layout defaults to left-symmetric mdadm: chunk size defaults to 512K mdadm: /dev/sdb appears to be part of a raid array: level=raid10 devices=4 ctime=Fri May 8 08:11:00 2015 mdadm: /dev/sdc appears to be part of a raid array: level=raid10 devices=4 ctime=Fri May 8 08:11:00 2015 mdadm: /dev/sdd appears to be part of a raid array: level=raid10 devices=4 ctime=Fri May 8 08:11:00 2015 mdadm: /dev/sde appears to be part of a raid array: level=raid10 devices=4 ctime=Fri May 8 08:11:00 2015 mdadm: size set to 20954624K
此处需要输入y,确认创建这个阵列:
Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
查看下阵列的详细信息(Spare Devices数量为1):
[root@linuxprobe ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Fri May 8 09:20:35 2015 Raid Level : raid5 Array Size : 41909248 (39.97 GiB 42.92 GB) Used Dev Size : 20954624 (19.98 GiB 21.46 GB) Raid Devices : 3 Total Devices : 4 Persistence : Superblock is persistent Update Time : Fri May 8 09:22:22 2015 State : clean Active Devices : 3 Working Devices : 4 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 512K Name : linuxprobe.com:0 (local to host linuxprobe.com) UUID : 44b1a152:3f1809d3:1d234916:4ac70481 Events : 18 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc 4 8 48 2 active sync /dev/sdd 3 8 64 - spare /dev/sde
将磁盘阵列格式化为ext4系统:
[root@linuxprobe ~]# mkfs.ext4 /dev/md0 mke2fs 1.42.9 (28-Dec-2013) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=128 blocks, Stripe width=256 blocks 2621440 inodes, 10477312 blocks 523865 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2157969408 320 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done
因为前面设置过fstab文件,所以现在可以直接给挂载:
[root@linuxprobe ~]# mount -a
将/dev/sdb设备设置为故障并移出阵列:
[root@linuxprobe ~]# mdadm /dev/md0 -f /dev/sdb mdadm: set /dev/sdb faulty in /dev/md0
再来看下阵列的详细信息(此时硬盘sde直接顶替上去了):
[root@linuxprobe ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Fri May 8 09:20:35 2015 Raid Level : raid5 Array Size : 41909248 (39.97 GiB 42.92 GB) Used Dev Size : 20954624 (19.98 GiB 21.46 GB) Raid Devices : 3 Total Devices : 4 Persistence : Superblock is persistent Update Time : Fri May 8 09:23:51 2015 State : active, degraded, recovering Active Devices : 2 Working Devices : 3 Failed Devices : 1 Spare Devices : 1 Layout : left-symmetric Chunk Size : 512K Rebuild Status : 0% complete Name : linuxprobe.com:0 (local to host linuxprobe.com) UUID : 44b1a152:3f1809d3:1d234916:4ac70481 Events : 21 Number Major Minor RaidDevice State 3 8 64 0 spare rebuilding /dev/sde 1 8 32 1 active sync /dev/sdc 4 8 48 2 active sync /dev/sdd 0 8 16 - faulty /dev/sdb
出现问题?大胆提问!
因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~
Linux技术交流请加A群:560843(满),B群:340829(推荐),点此查看全国群。
*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。
7.2 逻辑卷管理器
物理卷(PV,Physical Volume): 整个硬盘设备或使用fdisk命令建立的硬盘分区。卷组(VG,Volume Group) :由一个或多个物理卷(PV)组成的整体逻辑卷(LV,Logical Volume) :从卷组(VG)出切割出的空间来用于创建文件系统,大小由PE的个数决定。基本单元(PE,Physical Extent)默认为4MB的基本块。
功能/命令 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
扫描 | pvscan | vgscan | lvscan |
建立 | pvcreate | vgcreate | lvcreate |
显示 | pvdisplay | vgdisplay | lvdisplay |
删除 | pvremove | vgremove | lvremove |
扩展 | vgextend | lvextend |
对硬盘sdb进行分区:
[root@linuxprobe ~]# fdisk /dev/sdb Device does not contain a recognized partition table
创建新的分区:
Command (m for help): n
类型为主分区:
Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p
分区号为1:
Partition number (1-4, default 1): 1
直接写“+300M”即可生成大小为300M的分区:
First sector (2048-41943039, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +300M Partition 1 of type Linux and of size 300 MiB is set
查看下分区信息:
Command (m for help): p Device Boot Start End Blocks Id System /dev/sdb1 2048 616447 307200 83 Linux
修改分区类型:
Command (m for help): t Selected partition 1
修改分区类型为lvm(代码是8e):
Hex code (type L to list all codes): 8e Changed type of partition 'Linux' to 'Linux LVM'
再看下分区信息:
Command (m for help): p Device Boot Start End Blocks Id System /dev/sdb1 2048 309247 153600 8e Linux LVM
确认无误,写入分区表信息:
Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
让内核同步分区信息(此步骤仅在没有找到分区设备的情况下才需要执行,非必要动作。):
[root@linuxprobe ~]# partprobe
第3步:启用LVM并创建vo逻辑卷并格式化为ext4格式
将新建的分区设置为物理卷:
[root@linuxprobe ~]# pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created
将物理卷加入卷组:
[root@linuxprobe ~]# vgcreate rhcsa /dev/sdb1 Volume group "rhcsa" successfully created
查看卷组信息:
[root@linuxprobe ~]# vgdisplay --- Volume group --- VG Size 296.00 MiB PE Size 4.00 MiB Total PE 74 Alloc PE / Size 0 / 0 Free PE / Size 74 / 296.00 MiB VG UUID 8hLPQU-Tc6f-PMsa-4tq5-iT0p-vSbI-sOafqG
生成大小为37个PE的逻辑卷(37*4MiB为148M):
[root@linuxprobe ~]# lvcreate -n vo -l 37 rhcsa Logical volume "vo" created
格式化为ext4:
[root@linuxprobe ~]# mkfs.ext4 /dev/rhcsa/vo Writing superblocks and filesystem accounting information: done
创建一个名为/rhcsa的目录用于挂载该逻辑卷。
[root@linuxprobe ~]# mkdir /rhcsa
挂载硬盘设备:
[root@linuxprobe ~]# mount /dev/rhcsa/vo /rhcsa
查看挂载信息(rhcsa-vo为140M是合理取值):
[root@linuxprobe ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/rhel-root 18G 3.0G 15G 17% / devtmpfs 905M 0 905M 0% /dev tmpfs 914M 140K 914M 1% /dev/shm tmpfs 914M 8.9M 905M 1% /run tmpfs 914M 0 914M 0% /sys/fs/cgroup /dev/sda1 497M 119M 379M 24% /boot /dev/sr0 3.5G 3.5G 0 100% /run/media/root/RHEL-7.0 Server.x86_64 /dev/mapper/rhcsa-vo 140M 1.6M 128M 2% /rhcsa
若要对LVM进行调整,一定要先卸载:
[root@linuxprobe ~]# umount /rhcsa
将逻辑卷扩展到290M:
[root@linuxprobe ~]# lvextend -L 290M /dev/rhcsa/vo Rounding size to boundary between physical extents: 292.00 MiB Extending logical volume vo to 292.00 MiB Logical volume vo successfully resized
检查磁盘完整性,重置硬盘容量:
[root@linuxprobe ~]# e2fsck -f /dev/rhcsa/vo /dev/rhcsa/vo: 11/38000 files (0.0% non-contiguous), 10453/151552 blocks\ [root@linuxprobe ~]# resize2fs /dev/rhcsa/vo Resizing the filesystem on /dev/rhcsa/vo to 299008 (1k) blocks. The filesystem on /dev/rhcsa/vo is now 299008 blocks long.
重新挂载硬盘设备:
[root@linuxprobe ~]# mount /dev/rhcsa/vo /rhcsa
看到挂载信息(当前逻辑卷大小已为279M):
[root@linuxprobe ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/rhel-root 18G 3.0G 15G 17% / devtmpfs 905M 0 905M 0% /dev tmpfs 914M 140K 914M 1% /dev/shm tmpfs 914M 8.9M 905M 1% /run tmpfs 914M 0 914M 0% /sys/fs/cgroup /dev/sda1 497M 119M 379M 24% /boot /dev/sr0 3.5G 3.5G 0 100% /run/media/root/RHEL-7.0 Server.x86_64 /dev/mapper/rhcsa-vo 279M 2.1M 259M 1% /rhcsa
模拟训练C:将上个实验中的逻辑卷vo容量减小到120M。
卸载文件系统:
[root@linuxprobe ~]# umount /rhcsa
检查文件系统的完整性:
[root@linuxprobe ~]# e2fsck -f /dev/rhcsa/vo e2fsck 1.42.9 (28-Dec-2013) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/rhcsa/vo: 11/74000 files (0.0% non-contiguous), 15507/299008 blocks
将逻辑卷的减小到120M:
[root@linuxprobe ~]# resize2fs /dev/rhcsa/vo 120M resize2fs 1.42.9 (28-Dec-2013) Resizing the filesystem on /dev/rhcsa/vo to 122880 (1k) blocks. The filesystem on /dev/rhcsa/vo is now 122880 blocks long.
使用lvreduce命令将文件系统调整为120M:
[root@linuxprobe ~]# lvreduce -L 120M /dev/rhcsa/vo WARNING: Reducing active logical volume to 120.00 MiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce vo? [y/n]: y Reducing logical volume vo to 120.00 MiB Logical volume vo successfully resized
重新挂载文件系统:
[root@linuxprobe ~]# mount /dev/rhcsa/vo /rhcsa
查看挂载信息,(逻辑卷已经变成113M):
[root@linuxprobe ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/rhel-root 18G 3.7G 14G 21% / devtmpfs 734M 0 734M 0% /dev tmpfs 742M 140K 742M 1% /dev/shm tmpfs 742M 8.8M 734M 2% /run tmpfs 742M 0 742M 0% /sys/fs/cgroup /dev/sr0 3.5G 3.5G 0 100% /media/cdrom /dev/sda1 497M 119M 379M 24% /boot /dev/mapper/rhcsa-vo 113M 1.6M 103M 2% /rhcsa
模拟训练D:使用逻辑卷快照功能
LVM的逻辑卷快照功能可以将逻辑卷的数据保存为备份、以及快速的数据恢复。
查看到逻辑卷详细信息(容量共计296M,已用120M,剩余176M):
[root@linuxprobe ~]# vgdisplay --- Volume group --- VG Name rhcsa System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 1 Act PV 1 VG Size 296.00 MiB PE Size 4.00 MiB Total PE 74 Alloc PE / Size 30 / 120.00 MiB Free PE / Size 44 / 176.00 MiB VG UUID QxBS5f-beVv-FJnu-GKyu-UWWF-JS8x-ytiAN9
创建原始文件,写入一行文字:
[root@linuxprobe ~]# echo "Welcome to Linuxprobe.com" > /rhcsa/readme.txt [root@linuxprobe ~]# ls /rhcsa lost+found readme.txt
对rhcsa卷组的vo逻辑卷做一个名称为SNAP而大小为150M的逻辑卷快照:
[root@linuxprobe ~]# lvcreate -L 150M -s -n SNAP /dev/rhcsa/vo Rounding up size to full physical extent 152.00 MiB Reducing COW size 152.00 MiB down to maximum usable size 124.00 MiB. Logical volume "SNAP" created
查看逻辑卷和快照的信息:
[root@linuxprobe ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert SNAP rhcsa swi-a-s--- 124.00m vo 0.01 vo rhcsa owi-aos--- 120.00m root rhel -wi-ao---- 17.51g swap rhel -wi-ao---- 2.00g
在逻辑卷中创建一个100M的文件:
[root@linuxprobe ~]# dd if=/dev/zero of=/rhcsa/files count=1 bs=100M 1+0 records in 1+0 records out 104857600 bytes (105 MB) copied, 1.31474 s, 79.8 MB/s
再来看下逻辑卷快照的使用量:
[root@linuxprobe ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert SNAP rhcsa swi-a-s--- 124.00m vo 89.76 vo rhcsa owi-aos--- 120.00m root rhel -wi-ao---- 17.51g swap rhel -wi-ao---- 2.00g
将文件系统卸载:
[root@linuxprobe ~]# umount /rhcsa
恢复SNAP逻辑卷快照内容:
[root@linuxprobe ~]# lvconvert --merge /dev/rhcsa/SNAP Merging of volume SNAP started. vo: Merged: 18.2% vo: Merged: 100.0% Merge of snapshot into logical volume vo has finished. Logical volume "SNAP" successfully removed
快照恢复一次后会被自动删除:
[root@linuxprobe ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert vo rhcsa -wi-a----- 120.00m root rhel -wi-ao---- 17.51g swap rhel -wi-ao---- 2.00
重新挂载文件系统:
[root@linuxprobe ~]# mount /dev/rhcsa/vo /rhcsa
原始的文件还在,但刚刚创建的100M大文件被清除了:
[root@linuxprobe ~]# ls /rhcsa lost+found readme.txt