LVM介绍及使用

LVM 是一种可用在 Linux内核逻辑分卷管理器;可用于管理磁盘驱动器或其他类似的大容量存储设备。

LVM基本组成

LVM利用Linux内核的device-mapper来实现存储系统的虚拟化(系统分区独立于底层硬件)。 通过LVM,你可以实现存储空间的抽象化并在上面建立虚拟分区(virtual partitions),可以更简便地扩大和缩小分区,可以增删分区时无需担心某个硬盘上没有足够的连续空间

LVM的基本组成块(building blocks)如下:

  • 物理卷Physical volume (PV):可以在上面建立卷组的媒介,可以是硬盘分区,也可以是硬盘本身或者回环文件(loopback file)。物理卷包括一个特殊的header,其余部分被切割为一块块物理区域(physical extents)。 
  • 卷组Volume group (VG):将一组物理卷收集为一个管理单元。
  • 逻辑卷Logical volume (LV):虚拟分区,由物理区域(physical extents)组成。
  • 物理区域Physical extent (PE):硬盘可供指派给逻辑卷的最小单位(通常为4MB)

示例:

两块物理硬盘
                
  硬盘1 (/dev/sda):
     _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
    |分区1 50GB (物理卷)           |分区2 80GB (物理卷)            |
    |/dev/sda1                    |/dev/sda2                     |
    |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ __|
                                  
  硬盘2 (/dev/sdb):
     _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    |分区1 120GB (物理卷)                         |
    |/dev/sdb1                                   |
    | _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|
LVM方式

  卷组VG1 (/dev/MyStorage/ = /dev/sda1 + /dev/sda2 + /dev/sdb1):
     _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ 
    |逻辑卷1 15GB                  |逻辑卷2 35GB                        |逻辑卷3 200GB                         |
    |/dev/MyStorage/rootvol        |/dev/MyStorage/homevol             |/dev/MyStorage/mediavol              |
    |_ _ _ _ _ _ _ _ _ _ _ _ _ _ __|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|

优点

比起正常的硬盘分区管理,LVM更富于弹性:

  • 使用卷组(VG),使众多硬盘空间看起来像一个大硬盘。
  • 使用逻辑卷(LV),可以创建跨越众多硬盘空间的分区。
  • 可以创建小的逻辑卷(LV),在空间不足时再动态调整它的大小。
  • 在调整逻辑卷(LV)大小时可以不用考虑逻辑卷在硬盘上的位置,不用担心没有可用的连续空间。It does not depend on the position of the LV within VG, there is no need to ensure surrounding available space.
  • 可以在线(online)对逻辑卷(LV)和卷组(VG)进行创建、删除、调整大小等操作。LVM上的文件系统也需要重新调整大小,某些文件系统也支持这样的在线操作。
  • 无需重新启动服务,就可以将服务中用到的逻辑卷(LV)在线(online)/动态(live)迁移至别的硬盘上。
  • 允许创建快照,可以保存文件系统的备份,同时使服务的下线时间(downtime)降低到最小。

这些优点使得LVM对服务器的管理非常有用,对于桌面系统管理的帮助则没有那么显著,你需要根据实际情况进行取舍。

缺点

  • 在系统设置时需要更复杂的额外步骤。

创建分区


创建物理卷(PV)

可通过以下命令列出可被用作物理卷的设备:

# lvmdiskscan


在列出的设备上创建物理卷:

 # pvcreate DEVICE

该命令在各个设备上创建LVM使用的头部。如#LVM基本组成所示, DEVICE可以是磁盘(如/dev/sda),分区(如/dev/sda2)或环回设备。例如:

# pvcreate /dev/sda2

你可以用以下命令查看已创建好的物理卷:

# pvdisplay

创建卷组(VG)

创建完成物理卷(PV)之后,下一步就是在该物理卷创建卷组(VG)了。 首先必须先在其中一个物理卷(PV)创建一个卷组

# vgcreate <volume_group> <physical_volume>

例如:

# vgcreate VolGroup00 /dev/sda2

然后让该卷组扩大到其他所有的物理卷:

# vgextend <volume_group> <physical_volume>
# vgextend <volume_group> <another_physical_volume>
# ...

例如:

# vgextend VolGroup00 /dev/sdb1
# vgextend VolGroup00 /dev/sdc

其中,“VolGroup00”名字换成你自己起的名字即可。接下来可以用以下命令查看卷组:

# vgdisplay

创建逻辑卷(LV)

创建完卷组(VG)之后,就可以开始创建逻辑卷(LV)了。输入下面命令以指定新逻辑卷的名字、大小及其所在的卷组:

# lvcreate -L <size> <volume_group> -n <logical_volume>

例如:

# lvcreate -L 10G VolGroup00 -n lvolhome

该逻辑卷创建完后,你就可以通过/dev/mapper/Volgroup00-lvolhome/dev/VolGroup00/lvolhome来访问它。与卷组命名类似,你可以按你的需要将逻辑卷命名。

你可以指定一个或多个物理卷来限制LVM分配数据空间的位置。比如你希望在较小的SSD硬盘上创建根文件系统,并在较慢的机械硬盘上创建家目录卷,仅需把物理卷设备加入到命令中,例如:

# lvcreate -L 10G VolGroup00 -n lvolhome /dev/sdc1

如果你想让要创建的逻辑卷拥有卷组(VG)的所有未使用空间,请使用以下命令:

# lvcreate -l +100%FREE  <volume_group> -n <logical_volume>

可以通过以下命令来查看逻辑卷:

# lvdisplay

建立文件系统与挂载逻辑卷

现在你的逻辑卷应该已经在/dev/mapper//dev/YourVolumeGroupName中了。如果你无法在以上位置找到它,请使用以下命令来加载模块、并扫描与激活卷组:

# modprobe dm-mod
# vgscan
# vgchange -ay

现在你可以在逻辑卷上创建文件系统并像普通分区一样挂载它了(如果你正在安装Arch linux,需要更详细的信息,请参考挂载分区):

# mkfs.<fstype> /dev/mapper/<volume_group>-<logical_volume>
# mount /dev/mapper/<volume_group>-<logical_volume> /<mountpoint>

例如:

# mkfs.ext4 /dev/mapper/VolGroup00-lvolhome
# mount /dev/mapper/VolGroup00-lvolhome /home
警告: 挂载点请选择你所新建的逻辑卷(例如: /dev/mapper/Volgroup00-lvolhome), 不要使用逻辑卷所在的实际分区设备(即不要使用: /dev/sda2)。

在mkinitcpio.conf中加入lvm的钩子扩展(hook)

如果你的根文件系统基于LVM,你需要保证udevlvm2这两个mkinitcpio的钩子扩展被启用。

udev默认已经预设好,不必手动启用了。你只需要编辑/etc/mkinitcpio.conf文件,在blockfilesystem这两项中间插入lvm2

/etc/mkinitcpio.conf
HOOKS="base udev ... block lvm2 filesystems"

配置

高级选项

如果你需要监控功能(这对快照是必须的),那么你需要启用lvmetad。 这只需要在/etc/lvm/lvm.conf文件中设置use_lvmetad = 1选项即可。 目前这个选项已经成为预设选项,不需要手动设置。

可以通过修改/etc/lvm/lvm.conf文件中的auto_activation_volume_list参数限制自动激活的卷。如果存在问题,可以将此选项注释掉。

物理卷

对于存在物理卷的设备,在扩增其容量之后或缩小其容量之前,必须使用pvresize命令对应地增加或减少物理卷的大小。

扩增

增大分区/dev/sda1的容量之后,需要执行以下命令扩展物理卷的大小

# pvresize /dev/sda1

命令将自动探测设备当前大小并将物理卷扩展到其最大容量。

注意: 该命令可在卷在线时运行。
缩小

在减少某个物理卷所在设备大小之前,需要通过指定--setphysicalvolumesize size参数缩小物理卷大小,例如

# pvresize --setphysicalvolumesize 40G /dev/sda1

该命令可能会提示以下错误:

 /dev/sda1: cannot resize to 25599 extents as later ones are allocated.
 0 physical volume(s) resized / 1 physical volume(s) not resized

即该物理卷已分配物理区域超过了命令指定的新大小边界,pvresize会拒绝将物理卷缩小。若磁盘空间足够,可通过pvmove将物理区域重新分配至别的卷组来解决这个问题。

移动物理区域

在移动空闲的物理区域到卷尾部之前,需要运行# pvdisplay -v -m命令查看物理分段。如下例所示,仅有一个物理卷/dev/sdd1, 一个卷组vg1和一个逻辑卷backup

# pvdisplay -v -m
    Finding all volume groups.
    Using physical volume(s) on command line.
  --- Physical volume ---
  PV Name               /dev/sdd1
  VG Name               vg1
  PV Size               1.52 TiB / not usable 1.97 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              399669
  Free PE               153600
  Allocated PE          246069
  PV UUID               MR9J0X-zQB4-wi3k-EnaV-5ksf-hN1P-Jkm5mW
   
  --- Physical Segments ---
  Physical extent 0 to 153600:
    FREE
  Physical extent 153601 to 307199:
    Logical volume	/dev/vg1/backup
    Logical extents	1 to 153599
  Physical extent 307200 to 307200:
    FREE
  Physical extent 307201 to 399668:
    Logical volume	/dev/vg1/backup
    Logical extents	153601 to 246068

可用空间在卷中段。为了减小物理卷大小,首先必须把所有的已用分段移到前部。

此例中,第一个可用空间在第0至第153600分段共153601个可用区域。我们可以从最后的分段中移动相同数目的物理区域来填补这段空间

# pvmove --alloc anywhere /dev/sdd1:307201-399668 /dev/sdd1:0-92466
/dev/sdd1: Moved: 0.1 %
/dev/sdd1: Moved: 0.2 %
...
/dev/sdd1: Moved: 99.9 %
/dev/sdd1: Moved: 100,0%
Note:
  • 命令将92467 (399668-307201)个物理区域最后一个分段移动到第一个分段。由于第一个分段共有153600个空闲的物理区域,可以容纳92467个物理区域,命令可以成功执行。
  • 参数--alloc anywhere可以用于在同一个分区中移动物理区域的。若要在不同分区中移动,命令形式应该是# pvmove /dev/sdb1:1000-1999 /dev/sdc1:0-999
  • 当操作的数据较多时,移动操作将持续很久(一到两个小时)。最好在TmuxGNU Screen会话中执行此过程。任何形式的意外中断都可能会导致致命错误。
  • 当操作完成后,可运行Fsck保证文件系统完整性。
调整物理卷大小

当所有空闲分段都移动到最后的物理区域时,运行# vgdisplay查看。

之后可以再次运行命令:

# pvresize --setphysicalvolumesize size PhysicalVolume

结果类似:

# pvs
  PV         VG   Fmt  Attr PSize    PFree 
  /dev/sdd1  vg1  lvm2 a--     1t     500g
调整分区大小

最后,你可以用你喜欢的分区工具来缩小该分区。

逻辑卷
注意: 虽然 lvextendlvreduce可以实现 lvresize特定选项实现的功能,且他们都有一个 -r, --resizefs选项允许文件系统利用 fsadm(8)(支持 ext2ext3ext4ReiserFSXFS)同步调节其大小。但除非你要对整个过程有更加精确的控制,直接使用 lvresize辅以 --resizefs选项来完成所有工作比较简便。
使用lvresize增加或缩小容量
警告: 虽然即便是对根分区,增加文件系统大小一般都可以在线完成( 文件系统已经被挂载),缩小其大小往往要求首先卸载文件系统以避免数据丢失。请首先确定你的文件系统支持相关操作。

为了向逻辑组vg1中的逻辑卷lv1增加2GB空间但并不修改其文件系统,执行:

# lvresize -L +2G vg1/lv1

而从逻辑组vg1/lv1中减少500MB空间但并不修改其文件系统大小(需要确保文件系统已经缩小过[broken link: invalid section]),执行:

# lvresize -L -500M vg1/lv1

设置vg1/lv1为15GB并同时更改其文件系统大小:

# lvresize -L 15G -r vg1/lv1
注意: 仅支持 ext2ext3ext4ReiserFS and  XFS  file systems。如果使用不同文件系统请使用 合适的组件 [broken link: invalid section]

如果想将所有可用空间都加入一个卷组,可以执行:

# lvresize -l +100%FREE vg/lv

查阅man lvresize可见详细说明。

单独设置文件系统大小

如果在执行lv{resize,extend,reduce}时没有使用-r, --resizefs选项, 或文件系统不支持fsadm(8)(如BtrfsZFS等),则需要在缩小逻辑卷之前或扩增逻辑卷后手动调整文件系统大小。

警告: 并非所有文件系统都支持无损或/且在线地调整大小。

例如对于ext2/ext3/ext4文件系统:

# resize2fs vg/lv

会将文件系统大小扩展到逻辑卷支持的最大容量,而

# resize2fs -M vg/lv

会将文件系统减小到其所需的最小容量。也可以指定具体的尺寸:

# resize2fs vg/lv NewSize

移除逻辑卷

警告: 在移除逻辑卷之前,请先备份好数据以免丢失!

首先,找到你所要移除的逻辑卷的名称。你可以使用以下命令来查看系统的所有逻辑卷:

# lvs

接下来,找到你所要移除的逻辑卷的挂载点

$ lsblk

并卸载它:

# umount /<mountpoint>

最后,使用以下命令来移除逻辑卷:

# lvremove <volume_group>/<logical_volume>

例如:

# lvremove VolGroup00/lvolhome

请输入y来确定你要执行移除逻辑卷操作。

此外,请不要忘了更新/etc/fstab

你可以再次使用lvs命令来确认你的逻辑卷已被移除。

添加物理卷(PV)到卷组(VG)中

首先创建一个新的物理卷(PV),再把卷组(VG)扩充到该物理卷上:

# pvcreate /dev/sdb1
# vgextend VolGroup00 /dev/sdb1

这将增加你卷组中的物理区域总数,你可以按需要将它们分配到逻辑卷中。

注意: 分区表保存在LVM所在媒体设备是个值得借鉴的方式。对于MBR可以使用类型 8e,或GPT类型 8e00

从卷组(VG)中移除分区

首先,分区中的所有数据需要被转移到别的分区,幸而LVM提供了以下的简便方式:

# pvmove /dev/sdb1

如果你想指定所要转移的目标分区,那么可以把该分区作为pvmove的第二个参数:

# pvmove /dev/sdb1 /dev/sdf1

接着,从卷组(VG)中移除物理卷(PV):

# vgreduce myVg /dev/sdb1

或者把所有的空物理卷(PV)都移除掉:

# vgreduce --all vg0

最后,如果你仍然想要使用该分区,而且不想让LVM以为它是一个物理卷,那么你可以执行以下命令:

# pvremove /dev/sdb1

快照功能

介绍

LVM可以给系统创建一个快照,由于使用了写入时复制(copy-on-write) 策略,相比传统的备份更有效率。 初始的快照只有关联到实际数据的inode的实体链接(hark-link)而已。只要实际的数据没有改变,快照就只会包含指向数据的inode的指针,而非数据本身。一旦你更改了快照对应的文件或目录,LVM就会自动拷贝相应的数据,包括快照所对应的旧数据的拷贝和你当前系统所对应的新数据的拷贝。这样的话,只要你修改的数据(包括原始的和快照的)不超过2G,你就可以只使用2G的空间对一个有35G数据的系统创建快照。

配置

你可以像创建普通逻辑卷一样创建快照逻辑卷。

# lvcreate --size 100M --snapshot --name snap01 /dev/mapper/vg0-pv

你可以修改少于100M的数据直到该快照逻辑卷空间不足为止。

更多资源


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值