LVM 逻辑卷存储管理

LVM

LVM全称逻辑卷管理(LogicVolume Manager,LVM),是Linux 系统对磁盘分区的一种管理机制,LVM是建立在硬盘和分区至上的一个逻辑层,可以将多个物理分区通过软件,整合在一起,让这些分区看起来就像是一个独立的大磁盘一样,来提高磁盘分区管理的灵活性,可灵活的对磁盘大小进行动态调整。LVM 仅能弹性地使用(或调整)磁盘空间,无法提供磁盘阵列的容错能力。如果 LVM 出现故障,所有存储于 LVM 上的文件可能就会永久消失。

 

LVM 术语

物理卷(PhysicalVolume,PV) 是LVM存储结构中处于最底层,物理卷可以是整个硬盘,也可是其中的某个分区,这里可以简单看作为LVM物理卷的分区,其分区系统识别码(System ID)必须是标识为“8e Linux LVM”.

 

卷组(Volume Group,VG)是建立在物理卷之上,它由一个或多个物理卷组成卷组组成,可以动态添加卷组中,在卷组上可以创建一个或多个"LVM分区"(逻辑卷)一个LVM 系统中可以自由一个卷组,也可以包含多个卷组LVM的卷组类似于非LVM系统中的物理硬盘

 

逻辑卷(Logic Volume,LV)建立在卷组之上,它是从卷组中"切出"的一块空间逻辑卷船舰之后,其大小可以伸缩。这里可以分享下从某本书中看到一个事例,这样方便记忆与理解。事例:物理卷 好比面粉; 卷组好比面团; 逻辑卷好比馒头,馒头可大可小,可控制。

 

物理扩展单元(Physical Extent):物理卷可以进一步细分为物理扩展单元,每个物理扩展单元具有唯一的编号, 也是LVM能够寻址的最小单元。物理扩展单元的大小可以配置,默认值为4MB.

 

逻辑扩展单元(Logical Extent):逻辑卷可以划分寻址的逻辑扩展单元。在同一个卷组中,物理扩展单元与逻辑扩展单元的大小相同,且一一对应。

 

 

LVM 创建流程图 

 

wKiom1LXYYaBkcCGAAEUJBDqqDU865.jpg

 

LVM 管理工具

创建和管理LVM

创建分区

使用分区工具fdisk创建LVM分区,方法和创建其他一般分区的方式是一样的,并将此分区System ID 更改为:"8eLinux"

[root@dirhost140 ~]#fdisk /dev/sdd
Command (m for help):p
Disk /dev/sdd: 500.1GB, 500107862016 bytes
255 heads, 63sectors/track, 60801 cylinders
Units = cylinders of16065 * 512 = 8225280 bytes
Sector size(logical/physical): 512 bytes / 512 bytes
I/O size(minimum/optimal): 512 bytes / 512 bytes
Disk identifier:0x2311983e
Device BootStartEndBlocksIdSystem
/dev/sdd11130610490413+83Linux
Command (m for help):d
Selected partition 1
Command (m for help):n
Command action
eextended
pprimary partition (1-4)
p
Partition number(1-4): 1
First cylinder(1-60801, default 1):
Using default value 1
Last cylinder,+cylinders or +size{K,M,G} (1-60801, default 60801): +20G
Command (m for help):t
Selected partition 1
Hex code (type L tolist codes): 8e
Changed system typeof partition 1 to 8e (Linux LVM)
Command (m for help):w
The partition tablehas been altered!
Calling ioctl() tore-read partition table.
Syncing disks.

创建物理卷

创建物理卷的命令为pvcreate,利用该命令将希望添加到卷组的所有分区或者磁盘创建为物理卷。这里这里以磁盘分区/dev/sdd1为例,将 /dev/sdd1 初始化成物理卷:

[root@dirhost140 ~]#pvcreate /dev/sdd1
Physical volume "/dev/sdd1"successfully created

创建卷组

[root@dirhost140 ~]#vgcreate vg04 /dev/sdd1
Volume group "vg04" successfullycreated

创建逻辑卷

[root@dirhost140 ~]#lvcreate-L +5G -n lvtest01 vg04
Logical volume "lvtest01" created

这里通过lvdisplay 命令去查看LV 的详细信息

[root@dirhost140 ~]#lvdisplay /dev/vg04/lvtest01
--- Logical volume ---
LV Name/dev/vg04/lvtest01
VG Namevg04
LV UUID6RJCH7-Qbbo-JTMl-Jpec-J6KS-rBgw-rP2uDN
LV Write Acce***ead/write
LV Statusavailable
# open0
LV Size5.00 GiB
Current LE1280
Segments1
Allocationinherit
Read ahead sectorsauto
- currently set to256
Block device253:16

挂载并读取LVM

[root@dirhost140 ~]#mount /dev/vg04/lvtest01 /aaa/
[root@dirhost140 ~]#df -Th /dev/vg04/lvtest01
FilesystemTypeSizeUsed Avail Use% Mounted on
/dev/mapper/vg04-lvtest01
ext45.0G138M4.6G3% /aaa

 

调整逻辑卷大小

 

扩大LVM逻辑卷的大小

调整逻辑卷大小需要先扩大LV,再放大文件系统, 在扩大LVM逻辑卷大小之前,先检查下其LV 的Block大小

[root@DirHost140 ~]#tune2fs -l /dev/vg04/lvtest01 |grep 'Block'
Block count:1310720#5G = Block count*4/1024/1024
Block size:4096
Blocks pergroup:32768
Blocks per group:8192

扩大逻辑卷1GB 大小

[root@DirHost140 ~]#lvextend -L +1G /dev/vg04/lvtest01
Extending logical volume lvtest01 to 6.00 GiB
Logical volume lvtest01 successfully resized

虽然已经将LV空间扩充了1GB大小,但文件系统仍然是5G,所以这里需要放大下文件系统.

[root@DirHost140 ~]#df -Th/dev/mapper/vg04-lvtest01
FilesystemTypeSizeUsed Avail Use% Mounted on
/dev/mapper/vg04-lvtest01
ext45.0G138M4.6G3% /aaa
[root@DirHost140 ~]#resize2fs /dev/vg04/lvtest01
resize2fs 1.41.12(17-May-2010)
Filesystem at/dev/vg04/lvtest01 is mounted on /aaa; on-line resizing required
old desc_blocks = 1,new_desc_blocks = 1
Performing an on-lineresize of /dev/vg04/lvtest01 to 1572864 (4k) blocks.
The filesystem on/dev/vg04/lvtest01 is now 1572864 blocks long.
[root@DirHost140 ~]#df -Th /dev/mapper/vg04-lvtest01
FilesystemTypeSizeUsed Avail Use% Mounted on
/dev/mapper/vg04-lvtest01
ext46.0G138M5.5G3% /aaa

减小LVM逻辑卷的大小

减小LVM 3GB的大小空间

由于LVM 不支持在线减小LVM,因此需要umountLV,离线进行减少LVM 3G大小空间先减小逻辑卷大小,再减小文件系统大小(前提备份,卸载操作),

[root@dirhost140 /]#umount /aaa
[root@dirhost140 /]#resize2fs /dev/vg04/lvtest01 3G
resize2fs 1.41.12(17-May-2010)
Filesystem at/dev/vg04/lvtest01 is mounted on /aaa; on-line resizing required
On-line shrinkingfrom 1572864 to 786432 not supported.
[root@dirhost140 /]#umount /aaa/
[root@dirhost140 /]#resize2fs /dev/vg04/lvtest01 3G
resize2fs 1.41.12(17-May-2010)
Please run 'e2fsck -f/dev/vg04/lvtest01' first.
[root@dirhost140 /]#e2fsck -f /dev/vg04/lvtest01
e2fsck 1.41.12(17-May-2010)
Pass 1: Checkinginodes, blocks, and sizes
Pass 2: Checkingdirectory structure
Pass 3: Checkingdirectory connectivity
Pass 4: Checkingreference counts
Pass 5: Checkinggroup summary information
/dev/vg04/lvtest01:11/393216 files (0.0% non-contiguous), 60014/1572864 blocks

[root@dirhost140 /]#resize2fs /dev/vg04/lvtest01 3G
resize2fs 1.41.12(17-May-2010)
Resizing thefilesystem on /dev/vg04/lvtest01 to 786432 (4k) blocks.
The filesystem on/dev/vg04/lvtest01 is now 786432 blocks long.
[root@dirhost140 /]#lvreduce -L 3G /dev/vg04/lvtest01
WARNING: Reducing active logical volume to3.00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want toreduce lvtest01? [y/n]: y
Reducing logical volume lvtest01 to 3.00 GiB
Logical volume lvtest01 successfully resized

[root@dirhost140 /]#mount /dev/vg04/lvtest01 /aaa
[root@dirhost140 /]#df -Th /dev/vg04/lvtest01 
FilesystemTypeSizeUsed Avail Use% Mounted on
/dev/mapper/vg04-lvtest01
ext43.0G136M2.7G5% /aaa

LVM高级应用

创建逻辑卷快照

LVM提供了快照功能可以用此技巧,灵活的使用磁盘空间以及备份文件系统,这里用之前创建过的lvtest01 作快照

建立并读取逻辑卷快照

[root@DirHost140 ~]#df -Th/dev/mapper/vg04-lvtest01
FilesystemTypeSizeUsed Avail Use% Mounted on
/dev/mapper/vg04-lvtest01
ext43.0G136M2.7G5% /aaa
[root@DirHost140 ~]#
[root@DirHost140 ~]# lvcreate-L 300M -s -n backup1 /dev/vg04/lvtest01
Logical volume "backup1" created
[root@DirHost140 ~]#umount /aaa/
[root@DirHost140 ~]#mount /dev/vg04/backup1 /aaa/
[root@DirHost140 ~]#df -Th /dev/mapper/vg04-backup1
FilesystemTypeSizeUsed Avail Use% Mounted on
/dev/mapper/vg04-backup1
ext43.0G136M2.7G5% /aaa

虽然从上面看到新创建的快照backup1 已挂载到/aaa 目录, 且显示总共用的大小为3G,可用空间为2.7G。由于之前创建快照时只给了300M大小,因此次lv快照backup1最多只能存储300M 空间,当超过300M空间时,系统将会报错;

[root@DirHost140 ~]#lvdisplay /dev/mapper/vg04-backup1
--- Logical volume ---
LV Path/dev/vg04/backup1
LV Namebackup1
VG Namevg04
LV UUIDfJcyES-d1sG-IDio-dqmn-icTj-Ptrj-EiO31r
LV Write Acce***ead/write
LV Creation host, time DirHost140.cn.ibm.com,2013-10-11 17:33:13 +0800
LV snapshot statusactive destination for lvtest01
LV Statusavailable
# open1
LV Size3.00 GiB
Current LE768
COW-table size300.00 MiB
COW-table LE75
Allocated to snapshot0.01%
Snapshot chunk size4.00 KiB
Segments1
Allocationinherit
Read ahead sectorsauto
- currently set to256
Block device253:29

当在此逻辑卷快照backup1存储超过300M左右大小的文件,系统会提示I/O错误(这里会出现短暂的延时),当我们再查看逻辑卷快照时,它的状态将变为inactive状态,从而导致逻辑卷快照将被损毁,即不可用。同时自动umount /aaa 挂载,具体细节请见下列清单

[root@DirHost140 ~]#dd if=/dev/mapper/vg04-backup1 of=/aaa/300Mfile bs=30M count=10
10+0 records in
10+0 records out
314572800 bytes (315MB) copied, 3.07172 s, 102 MB/s
Message fromsyslogd@DirHost140 at Oct 11 17:39:53 ...
kernel:journal commit I/O error
[root@DirHost140 /]#lvdisplay /dev/mapper/vg04-backup1
/dev/vg04/backup1: read failed after 0 of4096 at 3221159936: Input/output error
/dev/vg04/backup1: read failed after 0 of4096 at 3221217280: Input/output error
/dev/vg04/backup1: read failed after 0 of4096 at 0: Input/output error
/dev/vg04/backup1: read failed after 0 of4096 at 4096: Input/output error
--- Logical volume ---
LV Path/dev/vg04/backup1
LV Namebackup1
VG Namevg04
LV UUIDfJcyES-d1sG-IDio-dqmn-icTj-Ptrj-EiO31r
LV Write Acce***ead/write
LV Creation host, time DirHost140.cn.ibm.com,2013-10-11 17:33:13 +0800
LV snapshot statusINACTIVE destination for lvtest01
LV Statusavailable
# open0
LV Size3.00 GiB
Current LE768
COW-table size300.00 MiB
COW-table LE75
Snapshot chunk size4.00 KiB
Segments1
Allocationinherit
Read ahead sectorsauto
- currently set to256
Block device253:29

即使逻辑卷快照能扩大其空间大小并激活它,但里面的数据已破坏,已经失去备份文件的机制,相当于一个无效的快照文件,因此需要移除它。

[root@DirHost140 /]#lvchange -ay /dev/vg04/backup1
/dev/vg04/backup1: read failed after 0 of 4096at 3221159936: Input/output error
/dev/vg04/backup1: read failed after 0 of4096 at 3221217280: Input/output error
/dev/vg04/backup1: read failed after 0 of4096 at 0: Input/output error
/dev/vg04/backup1: read failed after 0 of4096 at 4096: Input/output error
Change of snapshotbackup1 will also change its origin lvtest01. Proceed? [y/n]: y
[root@DirHost140 /]#lvdisplay /dev/vg04/backup1|grep 'snapshot status'
/dev/vg04/backup1: read failed after 0 of4096 at 3221159936: Input/output error
/dev/vg04/backup1: read failed after 0 of4096 at 3221217280: Input/output error
/dev/vg04/backup1: read failed after 0 of4096 at 0: Input/output error
/dev/vg04/backup1: read failed after 0 of4096 at 4096: Input/output error
LV snapshot statusINACTIVE destination for lvtest01
[root@DirHost140 /]#mount /dev/vg04/backup1 /aaa
mount: you mustspecify the filesystem type
[root@DirHost140 /]#

卸载逻辑卷快照

快照也占用了卷组的空间,因此适当的卸载未多大作用的快照 是非常有必要的.

[root@DirHost140 /]#lvremove /dev/vg04/backup1
/dev/vg04/backup1: read failed after 0 of4096 at 3221159936: Input/output error
/dev/vg04/backup1: read failed after 0 of4096 at 3221217280: Input/output error
/dev/vg04/backup1: read failed after 0 of4096 at 0: Input/output error
/dev/vg04/backup1: read failed after 0 of4096 at 4096: Input/output error
Do you really want toremove active logical volume backup1? [y/n]: y
Logical volume "backup1"successfully removed
[root@DirHost140 /]#

移动物理卷

用来实体磁盘的分区快要出故障了,或者你打算用较快SDD硬盘来换较慢的硬盘.这里LVM采用pvremove 指令可以将某个物理卷的数据移动另一个物理卷上.

必须采取的步骤:

(1)加入新的物理卷到卷组中.

加入新的物理卷

[root@DirHost140 ~]# pvcreate /dev/sdd2
Physicl volume"/dev/sdd2"successfullycreated

扩展卷组大小

[root@DirHost140 ~]# vgextendvg04 /dev/sdd2
Volume group"vg04" successfully extended

查看卷组

通过pvscan可以发现新增的物理卷成功加入到卷组中了.

[root@DirHost140 ~]#pvscan
PV /dev/sdd1VG vg04lvm2 [20.01 GiB / 17.01GiB free]
PV /dev/sdd2VG vg04lvm2 [20.01 GiB / 20.01GiB free] #新增物理卷,未使用

移动物理卷数据到新加入的物理卷

新增的物理卷加入到卷组后就可以移动旧物理卷的数据了,这会用到指令pvmove 指令

进行数据的移动. 同时移动物理卷数据是一个高风险的行为. 请在执行这个步骤前,务必备份好所有数据.

[root@DirHost140 ~]#pvmove /dev/sdd1 /dev/sdd2
/dev/sdd1: Moved: 0.5%
/dev/sdd1: Moved: 26.2%
/dev/sdd1: Moved: 50.4%
/dev/sdd1: Moved: 75.1%
/dev/sdd1: Moved: 99.0%
/dev/sdd1: Moved: 100.0%
[root@DirHost140 /]#pvscan
PV /dev/sdd1VG vg04lvm2 [20.01 GiB / 20.01GiB free]
PV /dev/sdd2VG vg04lvm2 [20.01 GiB / 17.01 GiB free]
[root@DirHost140 ~]#umount /aaa
[root@DirHost140 ~]#mount /dev/vg04/lvtest01 /aaa
[root@DirHost140 ~]#cd /aaa/; ls

将旧的物理卷从物理卷中移除

通过以上事例的话就可以卸载原来(旧)物理卷,需要使用指令,pvremove 进行卸载工作.

在卸载物理卷前,我们必须先卸载卷组,才可以进行. 按顺序实施.

[root@DirHost140 /]#umount/aaa
[root@DirHost140 /]#vgreduce vg04 /dev/sdd1
Removed "/dev/sdd1" from volumegroup "vg04"
[root@DirHost140 /]#pvremove /dev/sdd1
Labelson physical volume "/dev/sdd1" successfully wiped
[root@DirHost140 /]#pvscan
PV /dev/sdd2VG vg04lvm2 [20.01 GiB / 17.01GiB free]

sdd1已经从卷组中卸载掉了,数据已经迁移到sdd2上了,并投入使用了。其数据不会丢失,在此查询并挂载刚才之前的lvtest01,可发现数据依然存在.

[root@DirHost140 /]#mount /dev/vg04/lvtest01 /aaa/ ; ls
LAFix_getNativeUpd.shLAFix_SDD_param.txttest.sh
[root@DirHost140 /]#df -Th /dev/mapper/vg04-lvtest01
FilesystemTypeSizeUsed Avail Use% Mounted on
/dev/mapper/vg04-lvtest01
ext43.0G69M2.8G3% /aaa

迁移整个LVM磁盘系统至其他Linux系统

迁移LVM到另外一台计算机中,通常采取三个步骤即可。第一步,在原先的计算机中导出卷组;第二步,将LVM的磁盘安装到目的计算机上,第三步,在目的计算机中输入卷组.

 

导出卷组

用到vgexport 指令,导出前卸载该卷组中的所有逻辑卷,并使用vgchange 将卷组修改为非有效(Inactive)配置.

[root@DirHost140 ~]#umount /dev/vg04/lvtest01
[root@DirHost140 ~]#vgchange -a n vg04
0 logical volume(s) in volume group"vg04" now active
[root@DirHost140 ~]#vgexport vg04^C
[root@DirHost140 ~]#vgexport vg04
Volume group "vg04" successfullyexported

导出卷组后,就可以把该群组的所有物理卷的磁盘安装到目的计算机上了,即可实施导入卷组。

在另外一台Linux导入卷组

在开始导入卷组前,确认先扫描下所有物理卷,让RedHatLinux可以驱动这些物理卷.可以使用vgimport指令来导入卷组,导入后 修改有效的(Active)配置,才可以挂载使用其文件系统.

[root@dirhost162 ~]#pvscan
PV /dev/sdd2VG vg04lvm2 [20.01 GiB / 17.01GiB free]
PV /dev/sdb1VG vg01lvm2 [1.17 TiB / 750.00GiB free]
PV /dev/sdb2VG vg01lvm2 [500.01 GiB /500.01 GiB free]
[root@dirhost162 ~]#vgimport vg04
Volume group "vg04" successfullyimported
[root@dirhost162 ~]#vgchange -a y vg04#激活卷组
1 logical volume(s) in volume group"vg04" now active

验证新导入卷组的数据

[root@dirhost162 ~]#mount /dev/vg04/lvtest01 /mnt
[root@dirhost162 ~]#cd /mnt/;ls
LAFix_getNativeUpd.shLAFix_SDD_param.txttest.sh

根据上面的实例可以看到,LVM具有很好的可伸缩性,使用起来非常方便,可以方便地对卷组、逻辑卷的大小进行调整,它也可结合群集系统一起使用,也可以更好的发挥特性,同时通过本篇的文章可以掌握LVM使用技巧。

 

 

原文链接:http://blog.51cto.com/lj119/1352198

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值