LVM (简体中文)
相关文章
- Install Arch Linux on LVM
- LVM on software RAID
- dm-crypt/Encrypting an entire system#LVM on LUKS
- dm-crypt/Encrypting an entire system#LUKS on LVM
- 物理卷 (PV)
- 一个可供存储LVM的块设备. 例如: 一块硬盘, 一个MBR或GPT分区, 一个回环文件, 一个被内核映射的设备 (例如 dm-crypt).它包含一个特殊的LVM头。
- 卷组 (VG)
- 物理卷的一个组,作为存放逻辑卷的容器。 PEs are allocated from a VG for a LV.
- 逻辑卷 (LV)
- "虚拟/逻辑卷"存放在一个卷组中并由物理块组成。是一个类似于物理设备的块设备,例如,你可以直接在它上面创建一个文件系统文件系统。
- 物理块 (PE)
- 一个卷组中最小的连续区域(默认为4 MiB),多个物理块将被分配给一个逻辑卷。你可以把它看成物理卷的一部分,这部分可以被分配给一个逻辑卷。
- 将多块硬盘看作一块大硬盘
- 使用逻辑卷(LV),可以创建跨越众多硬盘空间的分区。
- 可以创建小的逻辑卷(LV),在空间不足时再动态调整它的大小。
- 在调整逻辑卷(LV)大小时可以不用考虑逻辑卷在硬盘上的位置,不用担心没有可用的连续空间。
- 可以在线(online)对逻辑卷(LV)和卷组(VG)进行创建、删除、调整大小等操作。不过LVM上的文件系统也需要重新调整大小,好在某些文件系统(例如ext4)也支持在线操作。
- 无需重新启动服务,就可以将服务中用到的逻辑卷(LV)在线(online)/动态(live)迁移至别的硬盘上。
- 允许创建快照,可以保存文件系统的备份,同时使服务的下线时间(downtime)降低到最小。
- 支持各种设备映射目标(device-mapper targets),包括透明文件系统加密和缓存常用数据(caching of frequently used data)。这将允许你创建一个包含一个或多个磁盘、并用LUKS加密的系统,使用LVM on top 可轻松地管理和调整这些独立的加密卷 (例如.
/, ,/backup等) 并免去开机时多次输入密钥的麻烦。 - 在系统设置时需要更复杂的额外步骤。
- Windows系统并不支持LVM,若使用双系统,你将无法在Windows上访问LVM分区。
- 创建物理卷(PV)所在的分区。
- 创建物理卷(PV)。如果你只有一个硬盘,那么你最好只创建一个分区一个物理卷;如果你有多个硬盘,你可以创建多个分区,在每个分区上分别创建一个物理卷。
- 创建卷组(VG),并把所有物理卷加进卷组。
- 在卷组(VG)上创建逻辑卷(LV)。
- 继续安装指南中的格式化分区步骤。
- 当你做到安装指南中的“Initramfs”步骤时,把 加入到 文件中(请参考下文)。
- 若使用基于busybox的initramfs,请启用和。
- 若使用基于systemd的initramfs,请启用
systemd和。 - Cache逻辑卷将使用一个较小而快速的逻辑卷,来提高较大但慢速的逻辑卷的性能。它将大型逻辑卷中经常使用的块存储到较快的缓存卷中。 LVM将这个小而快速的逻辑卷称为缓冲池逻辑卷(cache pool LV)。 大而慢的逻辑卷则被称为源逻辑卷(origin LV)。由于dm-cache(内核驱动)的要求,LVM进一步将缓存池逻辑卷分为两个设备 - 缓存数据逻辑卷和缓存元数据逻辑卷。缓存数据逻辑卷存放源逻辑卷中常用块的拷贝,以提升源逻辑卷的速度。 缓存元数据逻辑卷则存储记录信息,这些信息指定了源逻辑卷中的数据被存放到缓存逻辑卷中的位置。 (即,确定源逻辑卷中的一个块是存储到自身空间还是缓存逻辑卷中?)。要想创建最好、最稳定的缓存逻辑卷,你必须熟悉这些信息。所有这些被提到的逻辑卷都必须存放在一个卷组中。
- RAID是一种创建逻辑卷的方法,它使用多个物理设备来提高性能或容错能力。在LVM中,这些物理设备是单个卷组中的物理卷。
- 加载以下模块:
- 测试以lvm开头的命令是否可以被正确执行,例如:
- 在停用卷组(VG)之前就移除掉外部的LVM设备。在你断开连接之前,请确保以下命令被执行:
- LVM2 Resource Page on SourceWare.org
- LVM HOWTO article at The Linux Documentation project
- LVM article at Gentoo wiki
- LVM2 Mirrors vs. MD Raid 1 post by Josh Bryan
- Ubuntu LVM Guide Part 1Part 2 detals snapshots
引用 Wikipedia:Logical Volume Manager (Linux) 的解释:
LVM基本组成
LVM利用Linux内核的device-mapper功能来实现存储系统的虚拟化(系统分区独立于底层硬件)。 通过LVM,你可以实现存储空间的抽象化并在上面建立虚拟分区(virtual partitions),可以更简便地扩大和缩小分区,可以增删分区时无需担心某个硬盘上没有足够的连续空间,避免为正在使用的磁盘重新分区的麻烦、为调整分区而不得不移动其他分区的不便。
LVM的基本组成部分如下:
示例:
'''物理硬盘'''
硬盘1 (/dev/sda):
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
|分区1 50GB (物理卷) |分区2 80GB (物理卷) |
|/dev/sda1 |/dev/sda2 |
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _ _ _ __|
硬盘2 (/dev/sdb):
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
|分区1 120GB (物理卷) |
|/dev/sdb1 |
| _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|
优点
比起普通的硬盘分区管理方式,LVM更富于灵活性:
缺点
准备
确保已安装lvm2包。
在LVM上安装Arch Linux
你应该在[[Installation guide (简体中文)|安装过程]中的的分区和创建文件系统这一步中创建LVM卷。不要直接格式化一个分区作为你的根文件系统(/),而应将其创建在一个逻辑卷(LV)中。
快速导览:
创建分区
在继续配置LVM前,必须对设备进行分区。
创建分区:
创建物理卷(PV)
可通过以下命令列出可被用作物理卷的设备:
# lvmdiskscan在列出的设备上创建物理卷:
# pvcreate DEVICE该命令在各个设备上创建LVM头。如#LVM基本组成所示, DEVICE可以是磁盘(如),分区(如/dev/sda2)或环回设备。例如:
你可以用以下命令查看已创建好的物理卷:
# pvdisplay创建卷组(VG)
创建完成物理卷(PV)之后,下一步就是在该物理卷创建卷组(VG)了。 首先必须先在其中一个物理卷(PV)创建一个卷组:
# vgcreate <volume_group> <physical_volume>可用作字符卷组的名称可在中查到。
例如:
# vgcreate VolGroup00 /dev/sda2然后让该卷组扩大到其他所有的物理卷:
# vgextend <卷组名> <物理卷> # vgextend <卷组名> <其它物理卷> # ...例如:
# vgextend VolGroup00 /dev/sdb1 # vgextend VolGroup00 /dev/sdc其中,“VolGroup00”名字换成你自己起的名字即可。 接下来可以用以下命令查看卷组:
# vgdisplay一步创建卷组
LVM支持将卷组与物理卷的创建聚合在一个命令中。例如,为了在前文提到的三个设备中创建名为VolGroup00的卷组,可以执行如下命令:
# vgcreate VolGroup00 /dev/sda2 /dev/sdb1 /dev/sdc该命令首先会在分区上创建物理卷(如果之前没有创建过),再创建一个包含三个物理卷的卷组。如果设备上已经存在文件系统,命令会提出警告。
创建逻辑卷(LV)
创建完卷组(VG)之后,就可以开始创建逻辑卷(LV)了。输入下面命令以指定新逻辑卷的名字、大小及其所在的卷组:
# lvcreate -L <卷大小> <"卷组名> -n <卷名>例如:
# lvcreate -L 10G VolGroup00 -n lvolhome该逻辑卷创建完后,你就可以通过/dev/mapper/Volgroup00-lvolhome或来访问它。与卷组命名类似,你可以按你的需要将逻辑卷命名。
你可以指定一个或多个物理卷来限制LVM分配数据空间的位置。比如你希望在较小的SSD硬盘上创建根文件系统,并在较慢的机械硬盘上创建家目录卷,仅需把物理卷设备加入到命令中,例如:
# lvcreate -L 10G VolGroup00 -n lvolhome /dev/sdc1如果你想让要创建的逻辑卷拥有卷组(VG)的所有未使用空间,请使用以下命令:
# lvcreate -l +100%FREE <volume_group> -n <logical_volume>可以通过以下命令来查看逻辑卷:
# lvdisplay建立文件系统与挂载逻辑卷
现在你的逻辑卷应该已经在和中了。如果你无法在以上位置找到它,请使用以下命令来加载模块、并扫描与激活卷组:
# modprobe dm-mod # vgscan # vgchange -ay现在你可以在逻辑卷上创建文件系统并像普通分区一样挂载它了(如果你正在安装Arch linux,需要更详细的信息,请参考挂载分区):
# mkfs.<类型> /dev/mapper/<卷组名>-<卷名> # mount /dev/mapper/<卷组名>-<卷名> <挂载点>例如:
# mkfs.ext4 /dev/mapper/VolGroup00-lvolhome # mount /dev/mapper/VolGroup00-lvolhome /home配置mkinitcpio
如果你的根文件系统基于LVM,你需要启用适当的mkinitcpio钩子,否则你的系统可能无法启动。
默认已经预设好,不必手动启用了。你只需要编辑文件,在与这两项中间插入:
基于busybox的initramfs
/etc/mkinitcpio.conf
HOOKS="base udev ... block '''lvm2''' filesystems"
基于systemd的initramfs:
之后你就可以继续下一步的创建和启用镜像操作了。
内核参数
如果你的根文件系统位于逻辑分卷,则root= 内核参数必须指向一个映射设备,比如。
配置
高级选项
可以通过修改文件中的参数限制自动激活的卷。如果存在问题,可以将此选项注释掉。
调整卷
物理卷
对于存在物理卷的设备,在扩增其容量之后或缩小其容量之前,必须使用命令对应地增加或减少物理卷的大小。
扩增
增大分区的容量之后,需要执行以下命令扩展物理卷的大小
# pvresize /dev/sda1命令将自动探测设备当前大小并将物理卷扩展到其最大容量。
缩小
在减少某个物理卷所在设备大小之前,需要通过指定参数缩小物理卷大小,例如:
# 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即该物理卷已分配物理区域超过了命令指定的新大小边界,会拒绝将物理卷缩小。若磁盘空间足够,可通过pvmove将物理区域重新分配至别的卷组来解决这个问题。
移动物理区域
在移动空闲的物理区域到卷尾部之前,需要运行# pvdisplay -v -m命令查看物理分段。如下例所示,仅有一个物理卷, 一个卷组和一个逻辑卷
可用空间在卷中段。为了减小物理卷大小,首先必须把所有的已用分段移到前部。
此例中,第一个可用空间在第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%
调整物理卷大小
当所有空闲分段都移动到最后的物理区域时,运行查看。
之后可以再次运行命令:
# pvresize --setphysicalvolumesize size PhysicalVolume结果类似:
调整分区大小
最后,你可以用你喜欢的分区工具来缩小该分区。
逻辑卷
{{小贴士|提供一些与和相同的命令与选项,并同时允许两种类型的操作。然而,这几个命令都提供一个-r/选项,使用在调整逻辑卷时同时调整其中的文件系统(支持ext2, ext3, ext4, ReiserFS 和 XFS )。 因此,对普通使用来说,使用
同时缩小逻辑卷和其文件系统
将组中的逻辑卷mediavol扩大10GiB,并同时扩大其文件系统:
将组中的逻辑卷mediavol大小调整为15GiB,并同时调整其文件系统:
将卷组中的所有剩余空间分配给mediavol:
更多选项请参见。
单独设置文件系统大小
对于不支持的文件系统,请在缩小逻辑卷前或扩大逻辑卷后,使用适当的工具来调整文件系统的大小。
先将组中的逻辑卷mediavol扩大2 GiB,但不调整其文件系统:
然后在调整其文件系统,是其达到逻辑卷的大小:(以ext4为例)
# resize2fs /dev/MyVolGroup/mediavol要将逻辑卷mediavol缩小500 MiB,先计算调整后文件系统的大小并调整文件系统(以ext4为例):
然后再缩小逻辑卷的大小:
# lvresize -L -500M MyVolGroup/mediavol更多选项请参见。
重命名卷
重命名卷组
要重命名一个卷组,请使用命令。
可使用下面的任意一条命令将卷组重命名为
# vgrename /dev/vg02 /dev/my_volume_group # vgrename vg02 my_volume_group重命名逻辑卷
要重命名一个逻辑卷,请使用命令。
可使用下面的任意一条命令将组中的逻辑卷lvold重命名为.
移除逻辑卷
首先,找到你所要移除的逻辑卷的名称。你可以使用以下命令来查看系统的所有逻辑卷:
# lvs接下来,找到你所要移除的逻辑卷的挂载点
$ lsblk并卸载它:
# umount /<mountpoint>最后,使用以下命令来移除逻辑卷:
# lvremove <volume_group>/<logical_volume>例如:
# lvremove VolGroup00/lvolhome请输入来确定你要执行移除逻辑卷操作。
此外,请不要忘了更新。
你可以再次使用命令来确认你的逻辑卷已被移除。
添加物理卷到卷组中
首先创建一个新的物理卷,再把卷组扩充到该物理卷上:
# pvcreate /dev/sdb1 # vgextend VolGroup00 /dev/sdb1这将增加你卷组中的物理区域总数,你可以按需要将它们分配到逻辑卷中。
从卷组中移除(物理)分区
如果在这个物理分区上创建了一个逻辑卷,请先移除它。
首先,分区中的所有数据需要被转移到别的分区,幸而LVM提供了以下的简便方式:
# pvmove /dev/sdb1如果你想指定所要转移的目标分区,那么可以把该分区作为pvmove的第二个参数:
接着,从卷组(VG)中移除物理卷(PV):
# vgreduce myVg /dev/sdb1或者把所有的空物理卷(PV)都移除掉:
# vgreduce --all vg0最后,如果你仍然想要使用该分区,而且不想让LVM以为它是一个物理卷,那么你可以执行以下命令:
# pvremove /dev/sdb1停用卷组
只需执行:
# vgchange -a n my_volume_group这将停用此卷组,以便你卸载存储它的容器。
逻辑卷类型
除了普通的逻辑卷, LVM还支持:快照, logical volume caching, thin provisioned逻辑卷,以及RAID.
快照功能
介绍
LVM可以给系统创建一个快照,由于使用了写入时复制(copy-on-write) 策略,相比传统的备份更有效率。 初始的快照只有关联到实际数据的inode的实体链接(hark-link)而已。只要实际的数据没有改变,快照就只会包含指向数据的inode的指针,而非数据本身。一旦你更改了快照对应的文件或目录,LVM就会自动拷贝相应的数据,包括快照所对应的旧数据的拷贝和你当前系统所对应的新数据的拷贝。这样的话,只要你修改的数据(包括原始的和快照的)不超过2G,你就可以只使用2G的空间对一个有35G数据的系统创建快照。要创建快照,在卷组中必须有未被分配的空间。和其他逻辑卷一样,快照也会占用卷组中的空间。所以,如果你计划使用快照来备份你的根(root)分区,不要将整个卷组的空间都分配给根(root)逻辑卷。
配置
你可以像创建普通逻辑卷一样创建快照逻辑卷。
# lvcreate --size 100M --snapshot --name snap01 /dev/vg0/lv你可以修改少于100M的数据,直到该快照逻辑卷空间不足为止。
要将逻辑卷卷'lv' 恢复到创建快照'snap01'时的状态,请使用:
# lvconvert --merge /dev/vg0/snap01如果逻辑卷处于活动状态,则在下次重新启动时将进行合并(merging)(合并(merging)甚至可在LiveCD中进行)。
也以拍摄多个快照,每个快照都可以任意与对应的逻辑卷合并。
快照也可以被挂载,并可用dd或者tar备份。使用dd备份的快照的大小为拍摄快照后对应逻辑卷中变更过文件的大小。 要使用备份,只需创建并挂载一个快照,并将备份写入或解压到其中。再将快照合并到对应逻辑卷即可。
快照主要用于提供一个文件系统的拷贝,以用来备份; 比起直接备份分区,使用快照备份可以提供一个更符合原文件系统的镜像。
LVM 缓存
来自:
创建缓存
最快速的方法是直接在快速的设备上创建一个物理卷,并把它添加到一个卷组中:
# vgextend dataVG /dev/sdx只需一步,即可在sdb上创建一个缓存池,自动生成元数据,将逻辑卷dataLV缓存到sdb上:
# lvcreate --type cache --cachemode writethrough -L 20G -n dataLV_cachepool dataVG/dataLV /dev/sdx显然,如果你想让缓存变得更大,可更改 -L参数。
删除缓存
如果需要撤消上面的创建操作:
# lvconvert --uncache dataVG/dataLV这会将缓存中挂起的写入操作提交到源逻辑卷, 然后删除缓存逻辑卷。 其它可用的参数和介绍,请参见:.
RAID
来自:
LVM RAID支持RAID 0,RAID 1,RAID 4,RAID 5,RAID 6和RAID 10。每个RAID等级的细节请见:Wikipedia:Standard RAID levels
配置RAID
创建物理卷:
# pvcreate /dev/sda2 /dev/sdb2创建卷组:
# vgcreate VolGroup00 /dev/sda2 /dev/sdb2使用参数创建逻辑卷。更多选项,请参见和。
# lvcreate --type RaidLevel [OPTIONS] -n Name -L Size VG [PVs]例如:
# lvcreate --type raid1 --mirrors 1 -L 20G -n myraid1vol VolGroup00 /dev/sda2 /dev/sdb2这将会在设备/dev/sda2、/dev/sdb2上和"VolGroup00"卷组中创建一个20GiB的镜像(mirrored)逻辑卷"myraid1vol"。
为RAID配置mkinitcpio
如果你的根文件系统在LVM RAID上,除了或钩子,你还需添加以及恰当的RAID模块(例如,,或)到中的MODULES数组中。
对于基于busybox的initramfs:
对于基于systemd的initramfs:
/etc/mkinitcpio.conf
MODULES=('''dm-raid raid0 raid1 raid10 raid456''')
HOOKS=(base '''systemd''' ... block '''sd-lvm2''' filesystems)
图形化配置
目前没有“官方的”管理LVM卷的GUI工具,不过涵盖了大多数常见操作,并提供卷状态的简单可视化。它还可以在调整逻辑卷大小时自动调整许多文件系统的大小。
常见问题
由于禁用lvmetad带来的开/关机问题
”必须“在中设置。 现在这已时默认设置 - 如果存在 lvm.conf.pacnew文件,你必须合并这个更改。
LVM 命令不起作用
正常情况下,模块应当被自动加载。假如该模块无法被自动加载,你可以试着修改:
你需要重建initramfs来提交你对的更改。
逻辑卷无法显示
如果你在挂载某个已创建好的逻辑卷时,发现它没有出现在命令的结果列表里,那么你可以用以下命令去激活它:
# vgscan # vgchange -ay在可移除设备上的LVM问题
症状:
# vgscan Reading all physical volumes. This may take a while... /dev/backupdrive1/backup: read failed after 0 of 4096 at 319836585984: Input/output error /dev/backupdrive1/backup: read failed after 0 of 4096 at 319836643328: Input/output error /dev/backupdrive1/backup: read failed after 0 of 4096 at 0: Input/output error /dev/backupdrive1/backup: read failed after 0 of 4096 at 4096: Input/output error Found volume group "backupdrive1" using metadata type lvm2 Found volume group "networkdrive" using metadata type lvm2产生原因:
解决方案:如果你已经用命令来激活卷组,但仍有Input/output error的错误信息。执行以下命令:
# vgchange -an volume group name移除外部设备,稍候几分钟后再执行以下命令:
# vgscan # vgchange -ay volume group name无法调整相邻逻辑卷的大小
在尝试扩大一个逻辑卷时出现以下错误:
" Insufficient suitable contiguous allocatable extents for logical volume "其原因是此逻辑卷在创建时使用了显式连续分配策略(an explicit contiguous allocation policy)(选项或),并且没有其他相邻的连续数据块可用(另见reference)。
要修复此错误,在扩展逻辑卷之前,使用lvchange --alloc inherit <logical_volume>更改其分配策略。 如果需要保持连续分配策略,另一种方法是将卷移动到具有足够可用区域的磁盘区域(见)。
"grub-mkconfig"命令报告"unknown filesystem"错误
请确保在生成grub.cfg前移除了快照卷。
Thinly-provisioned root volume device times out
With a large number of snapshots, runs for a long enough time so that waiting for the root device times out. To compensate, add the kernel boot parameter to your boot loader configuration. Or, make skip checking block mappings (see ) and regenerate the initramfs:
Delay on shutdown
If you use RAID, snapshots or thin provisioning and experience a delay on shutdown, make sure lvm2-monitor.service is started. See .