LVM(Logical Volume Management) and RAID
Overview
LVM stands for Logical Volume Management. It is a system of managing logical volumes, or file system.1 LVM是用来方便管理的,不会提供额外的安全保证。
LVM的基本组成块如下:2
- 物理卷Physical volume (PV):可以在上面建立卷组的媒介,可以是硬盘分区,也可以是硬盘本身或者回环文件(loopback file)。物理卷包括一个特殊的 header,其余部分被切割为一块块物理区域(physical extents)。
- 卷组Volume group (VG):将一组物理卷收集为一个管理单元。
- 逻辑卷Logical volume (LV):虚拟分区,由物理区域(physical extents)组成。
- 物理区域Physical extent (PE):硬盘可供指派给逻辑卷的最小单位(通常为 4MB)。
优点
比起正常的硬盘分区管理,LVM更富于弹性:
- 使用卷组(VG),使众多硬盘空间看起来像一个大硬盘。
- 使用逻辑卷(LV),可以创建跨越众多硬盘空间的分区。
- 可以创建小的逻辑卷(LV),在空间不足时再动态调整它的大小。
- 在调整逻辑卷(LV)大小时可以不用考虑逻辑卷在硬盘上的位置,不用担心没有可用的连续空间。
- 可以在线(online)对逻辑卷(LV)和卷组(VG)进行创建、删除、调整大小等操作。LVM上的文件系统也需要重新调整大小,某些文件系统也支持这样的在线操作。
- 无需重新启动服务,就可以将服务中用到的逻辑卷(LV)在线(online)/动态(live)迁移至别的硬盘上。
- 允许创建快照,可以保存文件系统的备份,同时使服务的下线时间(downtime)降低到最小。
这些优点使得LVM对服务器的管理非常有用,对于桌面系统管理的帮助则没有那么显著,你需要根据实际情况进行取舍。
软RAID
RAID是英文Redundant Array of Independent Disks的缩写,翻译成中文意思是“独立磁盘冗余阵列”,有时也简称磁盘阵列(Disk Array)。
Overview
- RAID 0
RAID0称为条带化(Striping)存储,将数据分段存储于 各个磁盘中,读写均可以并行处理。因此其读写速率为单个磁盘的N倍(N为组成RAID0的磁盘个数),但是却没有数据冗余,单个磁盘的损坏会导致数据的不可修复。
- RAID 1
镜像存储(mirroring),没有数据校验。数据被同等地写入两个或多个磁盘中,写入速度会比较 慢,但读取速度会比较快。读取速度可以接近所有磁盘吞吐量的总和,写入速度受限于最慢 的磁盘。 RAID1也是磁盘利用率最低的一个。如果用两个不同大小的磁盘建立RAID1,可以用空间较小的那一个,较大的磁盘多出来的部分可以作他用,不会浪费。
- RAID 2
RAID0的改良版,加入了汉明码(Hanmming Code)错误校验。汉明码能够检测最多两个同时发生的比特错误,并且能够更正单一比特的错误。
- RAID 3
类似于RAID2,数据条带化(stripe)存储于不同的硬盘,数据以字节为单位,只是RAID3使用单块磁盘存储简单的 奇偶校验信息,所以最终磁盘数量为 N+1 。当这N+1个硬盘中的其中一个硬盘出现故障时, 从其它N个硬盘中的数据也可以恢复原始数据,当更换一个新硬盘后,系统可以重新恢复完整的校验容错信息。
- RAID 4
与RAID3类似,但RAID4是按块(扇区)存取。无须像RAID3那样,哪怕每一次小I/O 操作也要涉 及全组,只需涉及组中两块硬盘(一块数据盘,一块校验盘)即可,从而提高了小量数据I/O速度。
- RAID 5
奇偶校验(XOR),数据以块分段条带化存储。校验信息交叉地存储在所有的数据盘上。
RAID5把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和 相对应的数据分别存储于不同的磁盘上,其中任意N-1块磁盘上都存储完整的数据,也就是 说有相当于一块磁盘容量的空间用于存储奇偶校验信息。因此当RAID5的一个磁盘发生损坏 后,不会影响数据的完整性,从而保证了数据安全。当损坏的磁盘被替换后,RAID还会自动 利用剩下奇偶校验信息去重建此磁盘上的数据,来保持RAID5的高可靠性。
- RAID 6
类似RAID5,但是增加了第二个独立的奇偶校验信息块,两个独立的奇偶系统使用不同的算法, 数据的可靠性非常高,即使两块磁盘同时失效也不会影响数据的使用。但RAID 6需要分配给奇偶校验信息更大的磁盘空间,相对于RAID 5有更大的“写损失”,因此“写性能”非常差。
RAID创建
- 创建raid硬盘阵列
#mdadm -C /dev/md0 -ayes -l0 -n2 /dev/sd[a,b]1 -C :表示创建RAID /dev/md0 :表示创建生成的RAID分区 -ayes :表示创建过程中并且激活该RAID分区 -ln :表示创建级别为n的RAID -nn :表示创建RAID所参与的硬盘设备个数 /dev/sd[a,b]1 :表示参与的硬盘设备
创建raid1用/dev/sdb1 /dev/sdb2
mdadm -C /dev/md1 -ayes -l1 -n2 /dev/sdb{1..2} #cat /proc/mdstat命令查看创建进度,到100%时就好了
- 创建文件系统
mkfs.ext4 /dev/md0
- 挂载分区
mount /dev/md0 /mnt # 自动挂载,可以修改一下/etc/fstab文件,添加一行! /dev/md0 /raid5disk ext3 defaults 0 0
- 删除一个阵列
umount [挂载目录] mdadm -S [RAID设备] mdadm –zero-superblock [生成RAID的硬盘设备] umount /raid5 mdadm -S /dev/md0 mdadm –zero-superblock /dev/sda{3..5}
# 查看RAID mdadm -D /dev/md0或cat /proc/mdstat
LVM
创建
# 创建 LVM 类型的分区 fdisk /dev/sda pvcreate /dev/sdb1 #vgcreate <卷组名> <物理卷设备名> [<物理卷设备名> ...] vgcreate vg0 /dev/sda1 /dev/sdb1 lvcreate –n data –L +500M vg0 lvcreate –n data –l 127 vg0 lvdisplay /dev/vg0/data mkfs.ext4 /dev/vg0/data mount /dev/vg0/data /mnt vi /etc/fstab
扩容
lvextend –L +200M /dev/vg0/data 添加200M的 e2fsck –f /dev/vg0/data 下面2条是在线扩容(不用停止掉挂载目录) resize2fs /dev/vg0/data
快照
lvcreate --size 100M --snapshot --name snap01 /dev/mapper/vg0-pv # Reverting the modified 'pv' logical volume to the state when the 'snap01' snapshot was taken can be done with lvconvert --merge /dev/vg0/snap01
Misc
# 删除逻辑卷 lvremove /dev/vg0/data # 休眠和激活卷组 vgchange –an /dev/vg0 休眠 vgchange –ay /dev/vg0 激活