随堂练习 RAID和逻辑卷 LVM

RAID:Redundant Arrays of Inexpensive(Independent) Disks 廉价(独立)磁盘冗余阵列
1988年由加利福尼亚大学伯克利分校(University of California-Berkeley) “A Case for RedundantArrays of Inexpensive Disks”,多个磁盘合成一个“阵列”来提供更好的性能、冗余,或者两者都提供

RAID功能实现

  提高IO能力,磁盘并行读写

  提高耐用性,磁盘冗余算法来实现

RAID实现的方式

  外接式磁盘阵列:通过扩展卡提供适配能力

  内接式RAID:主板集成RAID控制器,安装OS前在BIOS里配置

  软件RAID:通过OS实现,比如:群晖的NAS

RAID级别
级别:多块磁盘组织在一起的工作方式有所不同
RAID-0:条带卷,strip
RAID-1:镜像卷,mirror
RAID-2
..
RAID-5
RAID-6
RAID-10
RAID-01
RAID级别

RAID 0

  读、写性能提升

  可用空间:N*min(S1,S2,...)

  无容错能力

  最少磁盘数:2, 2+

RAID 1

  读性能提升、写性能略有下降

  可用空间:1*min(S1,S2,...)

  有冗余能力

  最少磁盘数:2, 2N

RAID 4

  多块数据盘异或运算值存于专用校验盘

  磁盘利用率 (N-1)/N

  有冗余能力

  至少3块硬盘才可以实现

RAID 5

  读、写性能提升

  可用空间:(N-1)*min(S1,S2,...)

  有容错能力:允许最多1块磁盘损坏

  最少磁盘数:3, 3+

RAID 6

  读、写性能提升

  可用空间:(N-2)*min(S1,S2,...)

  有容错能力:允许最多2块磁盘损坏

  最少磁盘数:4, 4+

RAID 1 0

  读、写性能提升
  可用空间:N*min(S1,S2,...)/2
  有容错能力:每组镜像最多只能坏一块
  最少磁盘数:4, 4+

RAID 0 1

  多块磁盘先实现RAID0,再组合成RAID1

RAID 5 0

  多块磁盘先实现RAID5,再组合成RAID0

其他级别

JBOD:Just a Bunch Of Disks

  功能:将多块磁盘的空间合并一个大的连续空间使用

  可用空间:sum(S1,S2,...)

常用级别:

RAID-0, RAID-1, RAID-5, RAID-10, RAID-50, JBOD

实现软RAID

mdadm工具:为软RAID提供管理界面,为空余磁盘添加冗余,结合内核中的md(multi devices)
RAID设备可命名为/dev/md0、/dev/md1、/dev/md2、/dev/md3等
mdadm:模式化的工具,支持的RAID级别:LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10
命令的语法格式:

mdadm [mode] <raiddevice> [options] <component-devices>

常用选项说明

模式:
  创建: -C
  装配: -A
  监控: -F
  管理: -f, -r, -a
<raiddevice>: /dev/md#
<component-devices>: 任意块设备
-C     创建模式
-n #   使用#个块设备来创建此RAID
-l #    指明要创建的RAID的级别
-a {yes|no}  自动创建目标RAID设备的设备文件
-c CHUNK_SIZE   指明块大小,单位k
-x #   指明空闲盘的个数
-D  显示raid的详细信息
mdadm -D /dev/md#
管理模式:
-f   标记指定磁盘为损坏
-a  添加磁盘
-r   移除磁盘
观察md的状态: cat /proc/mdstat

范例

#使用mdadm创建并定义RAID设备
mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sd{b,c,d,e}1

#用文件系统对每个RAID设备进行格式化
mkfs.xfs /dev/md0

#使用mdadm检查RAID设备的状况
mdadm --detail|D /dev/md0

#增加新的成员
mdadm –G /dev/md0 –n4 -a /dev/sdf1

#模拟磁盘故障
mdadm /dev/md0 -f /dev/sda1

#移除磁盘
mdadm /dev/md0 –r /dev/sda1

#在备用驱动器上重建分区
mdadm /dev/md0 -a /dev/sda1

#系统日志信息
cat /proc/mdstat

生成配置文件

mdadm –D –s >> /etc/mdadm.conf

停止设备

mdadm –S /dev/md0

激活设备

mdadm –A –s /dev/md0

强制启动

mdadm –R /dev/md0

删除 RAID 信息

mdadm --zero-superblock /dev/sdb1

逻辑卷管理器 (LVM)

LVM 介绍

LVM: Logical Volume Manager 可以允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小,允许在多个物理设备间重新组织文件系统

LVM可以弹性的更改LVM的容量

通过交换PE来进行资料的转换,将原来LV内的PE转移到其他的设备中以降低LV的容量,或将其他设备中的PE加到LV中以加大容量

实现过程
  将设备指定为物理卷

  用一个或者多个物理卷来创建一个卷组,物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的

  在物理卷上创建的逻辑卷, 是由物理区域(PE)组成

  可以在逻辑卷上创建文件系统并挂载

第一个逻辑卷对应设备名:/dev/dm-#

dm: device mapper,将一个或多个底层块设备组织成一个逻辑设备的模块
软链接:
  /dev/mapper/VG_NAME-LV_NAME
  /dev/VG_NAME/LV_NAME

范例

/dev/mapper/vol0-root
/dev/vol0/root

实现逻辑卷

相关工具来自于 lvm2 包

[root@centos8 ~]# yum -y install lvm2

pv管理工具

显示pv信息

pvs:简要pv信息显示
pvdisplay

创建pv

pvcreate /dev/DEVICE

删除pv

pvremove /dev/DEVICE

vg管理工具

显示卷组

vgs
vgdisplay

创建卷组

vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath

[PhysicalDevicePath...]

管理卷组

vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]

vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]

删除卷组
  先做 pvmove
  再做 vgremove

lv管理工具

显示逻辑卷

lvs
Lvdisplay

创建逻辑卷

lvcreate -L #[mMgGtT] -n NAME VolumeGroup

范例

lvcreate -l 60%VG -n mylv testvg

lvcreate -l 100%FREE -n yourlv testvg

删除逻辑卷

lvremove /dev/VG_NAME/LV_NAME

重设文件系统大小

fsadm [options] resize device [new_size[BKMGTEP]]

resize2fs [-f] [-F] [-M] [-P] [-p] device [new_size]

xfs_growfs /mountpoint

范例

#创建物理卷
pvcreate /dev/sda3

#为卷组分配物理卷
vgcreate vg0 /dev/sda3

#从卷组创建逻辑卷
lvcreate -L 256M -n data vg0

# mkfs.xfs /dev/vg0/data
#挂载
mount /dev/vg0/data /mnt/data#

扩展和缩减逻辑卷

在线扩展逻辑卷

lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
#针对ext
resize2fs /dev/VG_NAME/LV_NAME

#针对xfs
xfs_growfs MOUNTPOINT

lvresize -r -l +100%FREE /dev/VG_NAME/LV_NAME

缩减逻辑卷

注意:缩减有数据损坏的风险,建议先备份再缩减,xfs文件系统不支持缩减

umount /dev/VG_NAME/LV_NAME

e2fsck -f /dev/VG_NAME/LV_NAME

resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]

lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME

mount

范例

[root@centos8 ~]# blkid /dev/vg0/mysql
/dev/vg0/mysql: UUID="94674607-2196-4015-9194-4632ac23f36a" TYPE="ext4"

[root@centos8 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mysql vg0 -wi-a----- 2.99g

[root@centos8 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 391676 0 391676 0% /dev
tmpfs 408092 0 408092 0% /dev/shm
tmpfs 408092 5792 402300 2% /run
tmpfs 408092 0 408092 0% /sys/fs/cgroup
/dev/sda2 104806400 2274504 102531896 3% /
/dev/sda3 52403200 398576 52004624 1% /data
/dev/sda1 999320 130848 799660 15% /boot
tmpfs 81616 0 81616 0% /run/user/0
/dev/mapper/vg0-mysql 3022704 9204 2840240 1% /data/mysql

# 第一步

[root@centos8 ~]# umount /data/mysql
[root@centos8 ~]# resize2fs /dev/vg0/mysql 1G
resize2fs 1.44.6 (5-Mar-2019)
Please run 'e2fsck -f /dev/vg0/mysql' first.

#第二步
[root@centos8 ~]# fsck -f /dev/vg0/mysql
fsck from util-linux 2.32.1
e2fsck 1.44.6 (5-Mar-2019)
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/mapper/vg0-mysql: 14/196224 files (0.0% non-contiguous), 31009/784384
blocks

#第三步
[root@centos8 ~]# resize2fs /dev/vg0/mysql 1G
resize2fs 1.44.6 (5-Mar-2019)
Resizing the filesystem on /dev/vg0/mysql to 262144 (4k) blocks.
The filesystem on /dev/vg0/mysql is now 262144 (4k) blocks long.

[root@centos8 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mysql vg0 -wi-a----- 2.99g

[root@centos8 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 391676 0 391676 0% /dev
tmpfs 408092 0 408092 0% /dev/shm
tmpfs 408092 5792 402300 2% /run
tmpfs 408092 0 408092 0% /sys/fs/cgroup
/dev/sda2 104806400 2274504 102531896 3% /
/dev/sda3 52403200 398576 52004624 1% /data
/dev/sda1 999320 130848 799660 15% /boot
tmpfs 81616 0 81616 0% /run/user/0

[root@centos8 ~]# mount -a

[root@centos8 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 391676 0 391676 0% /dev
tmpfs 408092 0 408092 0% /dev/shm
tmpfs 408092 5792 402300 2% /run
tmpfs 408092 0 408092 0% /sys/fs/cgroup
/dev/sda2 104806400 2274504 102531896 3% /
/dev/sda3 52403200 398576 52004624 1% /data
/dev/sda1 999320 130848 799660 15% /boot
tmpfs 81616 0 81616 0% /run/user/0
/dev/mapper/vg0-mysql 966584 7676 890096 1% /data/mysql

[root@centos8 ~]# df -h
Filesystem   Size   Used Avail   Use%   Mounted on
devtmpfs    383M      0   383M   0%     /dev
tmpfs     399M      0   399M   0%   /dev/shm
tmpfs     399M   5.7M     393M   2%            /run
tmpfs       399M   0       399M   0%   /sys/fs/cgroup
/dev/sda2   100G   2.2G   98G   3%   /
/dev/sda3   50G     390M   50G   1%   /data
/dev/sda1   976M   128M  781M    15%   /boot
tmpfs     80M    0    80M   0%    /run/user/0

[root@centos8 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mysql vg0 -wi-ao---- 2.99g

[root@centos8 ~]# umount /data/mysql
#第四步
[root@centos8 ~]# lvreduce -L 1G /dev/vg0/mysql
WARNING: Reducing active logical volume to 1.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg0/mysql? [y/n]: y
Size of logical volume vg0/mysql changed from 2.99 GiB (766 extents) to 1.00
GiB (256 extents).
Logical volume vg0/mysql successfully resized.

#第五步
[root@centos8 ~]# mount -a

[root@centos8 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mysql vg0 -wi-ao---- 1.00g

[root@centos8 ~]# df -h
Filesystem   Size   Used   Avail   Use%   Mounted   on
devtmpfs    383M   0     383M   0%    /dev
tmpfs     399M        0               399M   0%      /dev/shm
tmpfs     399M   5.7M    393M   2%      /run
tmpfs     399M   0               399M   0%   /sys/fs/cgroup
/dev/sda2   100G   2.2G     98G     3%   /
/dev/sda3   50G     390M    50G     1%   /data
/dev/sda1   976M   128M   781M   15%   /boot
tmpfs     80M      0       80M      0%        /run/user/0
/dev/mapper/vg0-mysql  944M   7.5M   870M  1%           /data/mysql

逻辑卷快照

逻辑卷快照原理

快照是特殊的逻辑卷,它是在生成快照时存在的逻辑卷的准确拷贝,对于需要备份或者复制的现有数据临时拷贝以及其它操作来说,快照是最合适的选择,快照只有在它们和原来的逻辑卷不同时才会消耗空间,建立快照的卷大小小于等于原始逻辑卷,也可以使用lvextend扩展快照
逻辑卷管理器快照

快照就是将当时的系统信息记录下来,就好像照相一般,若将来有任何数据改动了,则原始数据会被移动到快照区,没有改动的区域则由快照区和文件系统共享

逻辑卷快照工作原理

  在生成快照时会分配给它一定的空间,但只有在原来的逻辑卷或者快照有所改变才会使用这些空间

  当原来的逻辑卷中有所改变时,会将旧的数据复制到快照中

  快照中只含有原来的逻辑卷中更改的数据或者自生成快照后的快照中更改的数据

由于快照区与原本的LV共用很多PE的区块,因此快照与被快照的LV必须在同一个VG中.系统恢复的时候的文件数量不能高于快照区的实际容量

快照特点:

  备份速度快,瞬间完

  应用场景是测试环境,不能完成代替备份

  快照后,逻辑卷的修改速度会一定有影响

实现逻辑卷快照

范例

mkfs.xfs /dev/vg0/data

mount /dev/vg0/data/ /mnt/data

#为现有逻辑卷创建快照
lvcreate -l 64 -s -n data-snapshot -p r /dev/vg0/data

#挂载快照
mkdir -p /mnt/snap

mount -o ro,nouuid /dev/vg0/data-snapshot /mnt/snap

#恢复快照
umount /dev/vg0/data-snapshot

umount /dev/vg0/data

lvconvert --merge /dev/vg0/data-snapshot

#删除快照
umount /mnt/snap

lvremove /dev/vg0/data-snapshot

练习
1、创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小为16MB, 而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录
2、 新建用户archlinux,要求其家目录为/users/archlinux,而后su切换至archlinux用户,复制/etc/pam.d目录至自己的家目录
3、扩展testlv至7G,要求archlinux用户的文件不能丢失
4、收缩testlv至3G,要求archlinux用户的文件不能丢失
5、对testlv创建快照,并尝试基于快照备份数据,验证快照的功能

原文地址:https://www.cnblogs.com/xuanlv-0413/p/13230185.html