第五单元-使用逻辑卷管理器管理灵活存储
一、LVM
1.定义1> Partition physical storage
物理分区或磁盘是 LVM 的第一构建块。这些可以是分区、完整磁盘、 RAID 集或 SAN 磁盘。物理区块是物理卷中存储的小型数据区块 , 用作 LVM 存储的后端
2> Create physical volume (PV)
物理卷是 LVM 所使用的基础 “ 物理 ” 存储。这通常是块设备 ,例如分区或完整磁盘。设备必须初始化为 LVM 物理卷 , 才能与 LVM 结合使用
3> Create volume group (VG)
卷组是存储池 , 由一个或多个物理卷组成
4> Create logical volume (LV)
逻辑区块映射到物理区块 , 构成 LVM 存储的前端。默认情况下 , 每个逻辑区块映射到一个物理区块。启用某些选项将更改此映射。例如 , 镜像会导致每个逻辑区块映射到两个物理区块。逻辑卷是逻辑区块组。逻辑卷可以像硬盘驱动器分区一样使用
2.为什么使用逻辑卷
逻辑卷和逻辑卷管理有助于更加轻松地管理磁盘空间。如果文件系统需要更多的空间 ,可以将其卷组的可用空间分配给逻辑卷 , 并且可以调整文件系统的大小。如果磁盘开始出现错误 , 可以通过卷组将替换磁盘注册为物理卷 , 并且逻辑卷的范围可迁移到新磁盘。
3.使用命令行工具实施LVM存储
1>准备物理卷
disk 用于创建与 LVM 结合使用的新分区。在要与 LVM 结合使用的分区上 , 始终将“ 类型 ” 设置为 “ 0x8e Linux LVM”
pvcreate /dev/vdaN 用于初始化分区 ( 或其他物理设备 ), 使其作为物理卷与 LVM 结合使用。直接在物理卷中创建用于存储 LVM 配置数据的表头
示图:建立PV
2>创建卷组
vgcreate vgname /dev/vdaN 将创建名为 vgname 且由物理卷 /dev/vdaN 组成的卷组。您可以在创建时指定其他物理卷 ( 以空格隔开 ), 也可以随后使用 vgextend 添加新物理卷
示图:建立vg0
3>创建和使用新逻辑卷
lvcreate -n lvname -L 100M vgname 从 vgname 上可用物理区块创建名为 lvname 、容量为 100M 的新逻辑卷
示图:建立lv0
mkfs.xfs /dev/vgname/lvname 将在新逻辑卷上创建 xfs 文件系统
mkdir /data 建立所需目录作为挂载点,mount 挂载在/data
示图:格式设备/dev/vg0/lv0使其可以使
用
示图:挂载设备/dev/vg0/lv0
可向 /etc/fstab 文件中添加一下条目:/dev/mapper/vgname-lvname /data xfs defaults 1 2,可进行开机自动挂载
运行 mount -a 可在 /etc/fstab 中挂载所有文件系统 , 包括您刚刚添加的条目
4.查看LVM状态信息
pvdisplay /dev/vdaN 将显示有关特定物理卷的信息
示图:查看特定物理卷信息
vgdisplay vgname 将显示有关特定卷组的信息
示图:查看特点卷组信息
lvdisplay /dev/vgname/lvname 将显示有关特定逻辑卷的信息
示图:查看特定逻辑卷信息
二、管理LVM
1> 验证已挂载文件系统 /data 的当前大小
df -h /data
2> 验证 “ 可用物理区块 ” 是否够用 vgdisplay vgname
3> 使用部分或全部可用区块扩展逻辑卷 lvextend -L 150M /dev/vgname/lvname
示图:扩展逻辑卷
4> 扩展在 /data 上挂载的关联文件系统xfs_growfs /dev/vgname/lvname验证已挂载文件系统 /data 的新的大小
df -h /data
示图:扩展挂载的关联系统
5> 新加物理卷进行扩展方法
[root@localhost ~]# pvcreate /dev/vdb2 ##添加物理卷/dev/vdb2
Physical volume "/dev/vdb2" successfully created
示图:
Volume group "vg0" successfully extended
示图:
Extending logical volume lv0 to 300.00 MiB
Logical volume lv0 successfully resized
示图:
[root@localhost ~]# xfs_growfs /dev/vg0/lv0 ##扩展挂载的关联系统
meta-data=/dev/mapper/vg0-lv0 isize=256 agcount=7, agsize=6400 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=38912, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 38912 to 76800
示图:
2.压缩【必须先压缩逻辑卷里文件内容,再压缩逻辑卷依次倒回】【实验环境为/dev/vdb1和/dev/vdb2全部为大小为1G的LVM型文件系统】
[root@localhost ~]# e2fsck -f /dev/vg0/lv0 ##查看逻辑卷中被占用大小
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/vg0/lv0: 11/128016 files (0.0% non-contiguous), 26684/512000 blocks
[root@localhost ~]# resize2fs /dev/vg0/lv0 300M ##将逻辑卷中文件压缩到300M
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg0/lv0 to 307200 (1k) blocks.
The filesystem on /dev/vg0/lv0 is now 307200 blocks long.
[root@localhost ~]# lvreduce -L 100 /dev/vg0/lv0 ##将逻辑卷压缩到300M
WARNING: Reducing active and open logical volume to 300.00 MiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv0? [y/n]: y
Reducing logical volume lv0 to 300.00 MiB
Logical volume lv0 successfully resized
[root@localhost ~]# pvmove /dev/vdb1 /dev/vdb2 ##若要移除/dev/vdb1,则需要将PV中的vdb1中的占用内容全部移到vdb2上
/dev/vdb1: Moved: 41.3%
/dev/vdb1: Moved: 100.0%
[root@localhost ~]# pvremove /dev/vdb1 ##将/dev/vdb1在PV中移除
示图:移除vdb1
3.删除
[root@localhost ~]# umount /weixindata ##卸载
[root@localhost ~]# lvremove /dev/vg0/lv0backup ##删除逻辑卷lv0的快照
Do you really want to remove active logical volume lv0backup? [y/n]: y
Logical volume "lv0backup" successfully removed
[root@localhost ~]# lvremove /dev/vg0/lv0 ##删除逻辑卷lv0
Do you really want to remove active logical volume lv0? [y/n]: y
Logical volume "lv0" successfully removed
[root@localhost ~]# vgremove vg0 ##删除卷组vg0
Volume group "vg0" successfully removed
[root@localhost ~]# pvremove /dev/vdb2 ##删除PV中vdb2
Labels on physical volume "/dev/vdb2" successfully wiped
示图:删除
三、设备快照
快照逻辑卷是 LVM 存储的另一项灵活功能。LVM 快照是临时保留所更改的逻辑卷的原始数据的逻辑卷。快照提供原始卷的静态视图 , 从而能够以一致状态备份其数据
2.特点
快照卷大小只需足以存储在它存在期间更改的数据即可。如果数据更改量大于快照存储容量 , 则快照将自动变为不可用。 ( 原始卷原封不动 , 仍然需要从卷组
中手动解除挂载和删除不可用的快照。 )
3.建立快照
为了便于观察快照作用,将/dev/vg0/lv0挂载,并在挂载目录中建立文件file
示图:
为 50M 的新快照卷
lvcreate -s -n lv0backup -L 50M /dev/vg0/lv0
如果备份软件要求 , 请挂载该快照 , 并使备份程序指向新
挂载点
– mkdir /data
– mount -o ro /dev/vgname/snaplv /snapmount
• 验证快照逻辑卷的状态
– lvs /dev/vgname/snaplv
• 不再使用快照时 , 请解除挂载并删除它
– umount /snapmount
– lvremove /dev/vgname/snaplv
示图:挂载快照,查看之前建立的file文件情况,在快照中删除所有文件,模仿现实中损坏快照
四、企业环境中的设置用户使用指定设备的大小【建立/dev/vdb1大小为1G的分区,格式化激活使可以使用】
未设置使用大小效果:
[root@localhost Desktop]# mount /dev/vdb1 /pub
[root@localhost Desktop]# chmod 777 /pub
[root@localhost Desktop]# su - westos
Last login: Sun Apr 16 04:16:40 EDT 2017 on pts/0
[westos@localhost ~]$ dd if=/dev/zero of=/pub/file bs=1M count=200 ##建立一个大小为200M的数据文件
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 0.343957 s, 610 MB/s ##建立成功
[westos@localhost ~]$ dd if=/dev/zero of=/pub/file bs=1M count=500 ##建立一个大小为500M的数据文件
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 0.727235 s, 721 MB/s ##未超过分区范围,建立成功
[westos@localhost ~]$ dd if=/dev/zero of=/pub/file bs=1M count=1500 ##建立一个大小为1500M的数据文件
dd: error writing ‘/pub/file’: No space left on device ##建立失败,超过分区范围,分区范围为1024M
982+0 records in
981+0 records out
1029517312 bytes (1.0 GB) copied, 8.29018 s, 124 MB/s
[westos@localhost ~]$ exit
logout
设置用户指定分区大小:
[root@localhost Desktop]# umount /pub
[root@localhost Desktop]# mount -o usrquota,grpquota /dev/vdb1 /pub
[root@localhost Desktop]# ls -ld /pub
drwxrwxrwx. 2 root root 17 Apr 22 01:51 /pub
[root@localhost Desktop]# quotaon -ugv /dev/vdb1 ##激活设备,-ugv用户,组,显示激活过程
quotaon: Enforcing group quota already on /dev/vdb1
quotaon: Enforcing user quota already on /dev/vdb1
[root@localhost Desktop]# edquota -u westos ##设置westos用户在此设备的使用大小
[root@localhost Desktop]# ls -l /pub
total 1005388
-rw-rw-r--. 1 westos westos 1029517312 Apr 22 01:52 file
[root@localhost Desktop]# rm -rf /pub/file
[root@localhost Desktop]# su - westos ##进入westos用户测试
Last login: Sat Apr 22 01:51:06 EDT 2017 on pts/0
[westos@localhost ~]$ dd if=/dev/zero of=/pub/file bs=1M count=100 ##写入大小为100M的数据,成功
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.104443 s, 1.0 GB/s
[westos@localhost ~]$ dd if=/dev/zero of=/pub/file bs=1M count=200 ####写入大小>为200M的数据,成功
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 0.20946 s, 1.0 GB/s
[westos@localhost ~]$ dd if=/dev/zero of=/pub/file bs=1M count=201 ####写入大小>为201M的数据,失败
dd: error writing ‘/pub/file’: Disk quota exceeded
201+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 0.659626 s, 318 MB/s
[westos@localhost ~]$ ls -l /pub
total 204800
-rw-rw-r--. 1 westos westos 209715200 Apr 22 01:55 file
[westos@localhost ~]$ du /pub/file
204800 /pub/file
[westos@localhost ~]$ exit
logout
五、raid
硬盘加速:
文件/etc/proc/mdstat下的变化
Personalities : [raid1]
md0 : active raid1 vdb3[2](S) vdb2[1] vdb1[0] ##[s]闲置 [UU]使用,其中留一块为备用
1048000 blocks super 1.2 [2/2] [UU]
unused devices: <none>
命令行设置:
[root@localhost Desktop]# mdadm -C /dev/md0 -a yes -l 1 -n 2 -x 1 /dev/vdb{1..3} ##/dev/md0 -a yes 确定建立新的目录 -l级别:1(读),0(写),5(读写) -n(几块用来使用) -x(用来闲置,当使用的被损坏时,顶替上去)
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
mdadm: /dev/vdb2 appears to be part of a raid array:
level=raid0 devices=0 ctime=Wed Dec 31 19:00:00 1969
mdadm: partition table exists on /dev/vdb2 but will be lost or
meaningless after creating array
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
示图:新建md0
[root@localhost ~]# mkfs.xfs /dev/md0 ##格式/dev/md0,以供使用
meta-data=/dev/md0 isize=256 agcount=4, agsize=65500 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=262000, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]# mount /dev/md0 /mnt ##挂载/dev/md0到/mnt上
示图:格式,挂载
[root@localhost Desktop]# mdadm -D /dev/md0 ##显示/dev/md0的磁盘情况
/dev/md0:
Version : 1.2
Creation Time : Sat Apr 22 02:43:38 2017
Raid Level : raid1
Array Size : 1048000 (1023.61 MiB 1073.15 MB)
Used Dev Size : 1048000 (1023.61 MiB 1073.15 MB)
Raid Devices : 2 ##使用两块设备
Total Devices : 3 ##一共三块设备
Persistence : Superblock is persistent
Update Time : Sat Apr 22 02:44:31 2017
State : clean
Active Devices : 2 ##正在使用的为两块设备
Working Devices : 3 ##一共工作的为三块设备
Failed Devices : 0 ##没有损坏的设备
Spare Devices : 1 ##空闲的设备为1个
Name : localhost:0 (local to host localhost)
UUID : d4b879ee:76ee1437:a2b56b99:e1fa5078
Events : 17
Number Major Minor RaidDevice State
0 253 17 0 active sync /dev/vdb1
1 253 18 1 active sync /dev/vdb2
2 253 19 - spare /dev/vdb3
[root@localhost Desktop]# mdadm -f /dev/md0 /dev/vdb2 #损坏/dev/vdb2这块设备
mdadm: set /dev/vdb2 faulty in /dev/md0
[root@localhost Desktop]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Apr 22 02:43:38 2017
Raid Level : raid1
Array Size : 1048000 (1023.61 MiB 1073.15 MB)
Used Dev Size : 1048000 (1023.61 MiB 1073.15 MB)
Raid Devices : 2
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Sat Apr 22 02:53:55 2017
State : clean, degraded, recovering
Active Devices : 1
Working Devices : 2
Failed Devices : 1 ##一个损坏设备
Spare Devices : 1
Rebuild Status : 31% complete
Name : localhost:0 (local to host localhost)
UUID : d4b879ee:76ee1437:a2b56b99:e1fa5078
Events : 24
Number Major Minor RaidDevice State
0 253 17 0 active sync /dev/vdb1
2 253 19 1 spare rebuilding /dev/vdb3
1 253 18 - faulty /dev/vdb2
[root@localhost Desktop]# mdadm -r /dev/md0 /dev/vdb2 ##删除/dev/vdb2
mdadm: hot removed /dev/vdb2 from /dev/md0
[root@localhost Desktop]# mdadm -a /dev/md0 /dev/vdb2 ##添加一个新的硬盘分区
mdadm: added /dev/vdb2
[root@localhost Desktop]# mdadm -D /dev/md0 ##查看
/dev/md0:
Version : 1.2
Creation Time : Sat Apr 22 02:43:38 2017
Raid Level : raid1
Array Size : 1048000 (1023.61 MiB 1073.15 MB)
Used Dev Size : 1048000 (1023.61 MiB 1073.15 MB)
Raid Devices : 2
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Sat Apr 22 02:54:40 2017
State : clean
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1
Name : localhost:0 (local to host localhost)
UUID : d4b879ee:76ee1437:a2b56b99:e1fa5078
Events : 40
Number Major Minor RaidDevice State
0 253 17 0 active sync /dev/vdb1 ##vdb1和3在使用
2 253 19 1 active sync /dev/vdb3
3 253 18 - spare /dev/vdb2 ##vdb2闲置
[root@localhost ~]# umount /mnt ##在/mnt中卸载/dev/md0
[root@localhost Desktop]# mdadm -S /dev/md0 ##停止
mdadm: stopped /dev/md0
示图:关闭md0