linux raid lvm

磁盘阵列

mdadm新建raid

参数介绍

mdadm --detail 后面接的那个磁盘阵列设备的具体信息
madam --create 为新建raid的参数
–auto=yes /dev/md[01…]
–raid-device=N 使用几个raid作为磁盘阵列的设备
–spare-device=N 使用几个磁盘作为备用
–level=[0125] 这组磁盘阵列的等级是0,1还是5之类的

示例

~#:mdadm --create --auto=yes /dev/md0 --level=5 --raid-device=3 --spare-device=1 /dev/sdb{5,6,7,8}
创建raid需要时间,创建好之后
~#:mdadm --detail /dev/md0
查看建好的RAID
~#:cat /proc/mdstat
~#:mkfs -t ext4 /dev/md0
~#:mkdir /mnt/raid
~#:mount /dev/md0 /mnt/raid
~#:df

mdadm管理raid

参数介绍

mdadm --manage /dev/md[0-9] [–add 设备] [–remove 设备] [–fail 设备]
~#:mdadm --manage /dev/md0 --fail /dev/sdb6
~#:mdadm --detail /dev/md0
~#:cat /proc/mdstat
过一段时间在执行会发现以及将坏的设备更新了
~#:mdadm --detail /dev/md0
~#:mdadm --manage /dev/md0 --add /dev/sdb9 --remove /dev/sdb10

开机自动加载raid

~#:mdadm --detail /dev/md0 | grep -i ‘uuid’
~#:vim /etc/mdadm/mdadm.conf
ARRAY /dev/md0 UUID=…
~#:vim /etc/fstab
/dev/md0 /mnt/raid ext4 defaults 1 2
~#:umount /dev/md0
~#:mount -a
~#:df

关闭raid

~#:vim /etc/fstab
# /dev/md0 …
~#:mdadm --stop /dev/md0
~#:cat /proc/mdstat
~#:vim /etc/mdadm/mdadm.conf

LVM的制作

LVM Logical Volume Manager
PV physical volume
VG volume group
PE physical extend
LV logical volume

LV的写入机制

  • 线性机制
    若有两个设备/dev/sda1,/dev/sdb1,他们都在一个VG中,并且只有一个LV,线性机制就是在一个设备完全写满之后,再向另一个设备写入
  • 交错模式

新建分区

~#:sudo fdisk /dev/sdb
new /dev/sdb{5,6,7,8,9,10}
t 8e(Linux LVM)
w
~#:partprobe

安装应用

sudo apt-get install lvm2

PV物理卷的新建

pvcreate 将物理分区新建为PV分区
pvscan 查询目前系统里具有PV的磁盘
pvdisplay 显示目前系统上面的PV状态
pvremove 将PV属性删除

pvmove 将某个设备内的pe给移动到另一个设备
pvmove /dev/sdb5 /dev/sdb9

~#:pvscan
~#:pvcreate /dev/sdb{5,6,7,8}
~#:pvscan
~#:pvdisplay

VG卷用户组的新建

vgcreate 新建VG
vgscan 查找目前系统上的VG
vgdisplay 显示目前系统上的VG状态
vgextend 在VG内新增额外的VG
vgreduce 在VG内删除PV
vgchange 设置VG是否启动
vgremove 删除一个VG
VG名称是自己定义的。而PV名称实际上是分区的设备文件名

vgcreate [-s] VG名称 PV名称
-s 后面接PE的大写,单位可以是m,g,t (支持大小写)
~#:vgcreate -s 16M mxxvg /dev/sdb{5,6,7}
~#:vgscan
~#:pvscan
~#:vgdisplay
vgextend VG名称 PV名称
~#:vgextend mxxvg /dev/sdb8
~#:vgdisplay

LV逻辑卷的新建

lvcreate 新建lv
lvscan 查询系统上的lv
lvdisplay 展示系统上的lv
lvextend 在lv里增加容量
lvreduce 在lv里减少容量
lvremove 删除一个lv
lvresise 对lv的大小进行重新调整

lvcreate [-lLs] [-n lv名称] vg名称
-l 后接的是PE的个数
-L 后接的是vg的容量
-n 后接lv的名称
-s snapshot 快照
~#:lvcreate -l 252 -n mxxlv mxxvg
~#:ls -l /dev/mxxvg/mxxlv
~#:lvscan
~#:lvdisplay

文件系统新建

~#:mkfs -t ext4 /dev/mxxvg/mxxlv
~#:mkdir /mnt/lvm
~#:mount /dev/mxxvg/mxxlv /mnt/lvm
~#:df -h .

增加lv容量

~#:sudo fdisk /dev/sdb
new /dev/sdb9
~#:pvcreate /dev/sdb9
~#:pvscan
~#:vgextend mxxvg /dev/sdb9
~#:vgdisplay
增加lv的容量
~#:lvresize -l +63 /dev/mxxvg/mxxlv
~#:lvdisplay
~#:df -h /mnt/lvm

此时虽然lv显示的容量增大,但是对应的/dev/mxxvg/mxxlv文件系统还没有改变
~#:dumpe2fs /dev/mxxvg/mxxlv
重新计算文件系统
resizefs [-f] [device] [size]
-f 强制进行resize
device 后接的文件系统或者是设备名
size 如果没有size默认为整个文件系统,如果有size的话,必须给一个 单位
~#:resize2fs /dev/mxxvg/mxxlv //可在线进行resize

缩小lv容量

先计算需要缩小多少
~#:pvscan
~#:pvdisplay
   缩小文件系统容量
放大可以直接进行,但是缩小需要先卸载
~#:umount /dev/mxxvg/mxxlv
~#:resize2fs /dev/mxxvg/mxxlv 3900M
报错需要用e2fsck
~#:e2fsckk -f /dev/mxxvg/mxxlv
~#:resize2fs /dev/mxxvg/mxxlv 3900M
~#:mount /dev/mxxvg/mxxlv /mnt/lvm
~#:df -h /mnt/lvm
   降低lv容量
~#:lvresize -l -63 /dev/mxxvg/mxxlv
~#:lvdisplay
转移pv
~#:pvdisplay
~#:pvmove /dev/sdb5 /dev/sdb9
   删除vg
~#:vgreduce mxxvg /dev/sdb5
删除pv
~#:pvscan
~#:pvremove /dev/sdb5

LVM的快照

需要有未使用的PE块
所以需要新加入一个PV块

~#:vgdisplay
~#:pvcreate /dev/sdb5
~#:vgextend mxxvg /dev/sdb5
~#:vgdisplay
~#:lvcreate -l 40 -s -n mxxlv_ss /dev/mxxvg/mxxlv
-s snapshot
~#:lvdisplay
复原的数据是不能比快照区的大小大的,此处不能大于40个PE

接下来改变LVM中的数据,会发现lvm与快照区是不同的
~#:cd /mnt/lvm
~#:cp -a /home/mxx/my.iso /mnt/lvm
~#:lvdisplay 会发现lv的快照区已经被使用了
~#:df 会发现原始文件与快照区文件系统也是不同的

利用快照区进行备份

~#:tar -cvj -f /home/mxx/my.bak/lvm.bak.tar.bz2 *
~#:umount /mnt/snapshot

将快照区进行删除,因为已经被备份
~#:lvremove /dev/mxxvg/mxxlv_ss

~#:umount /mnt/lvm
~#:mkfs -t ext4 /mnt/lvm
~#:mount /dev/mxxvg/mxxlv /mnt/lvm

将备份的数据还原,那么这个文件系统就会和原来一样了
~#:tar -xvj -f /home/mxx/my.bak/lvm.bak.tar.bz2 /mnt/lvm
~#:ls -l /mnt/lvm

LVM的关闭

先卸载lvm系统,包括快照与原系统
再使用lvremove删除LV
使用vgchange -a n VG 名称 让其不再为active
使用vgremove删除VG
使用pvremove删除PV
最后使用sudo fdisk 修改System ID

~#:umount /mnt/lvm
~#:lvremove /dev/mxxvg/mxxlv
~#:vgchage -a n mxxvg
~#:vgremove mxxvg
~#:pvremover /dev/sdb{5,6,7,8}
~#:sudo fdisk -l

参考文献

1.《鸟哥的LINUX私房菜》