LVM(Logical Volume Management) and RAID

Table of Contents

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-overview.png

优点

比起正常的硬盘分区管理,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   激活

More

Footnotes:

Author: Shi Shougang

Created: 2017-03-02 Thu 23:02

Emacs 24.3.1 (Org mode 8.2.10)

Validate