当前位置: > 虚拟化 Virtualization > oVirt >

oVirt部署自托管引擎

时间:2019-11-30 16:12来源:linux.it.net.cn 作者:IT

LVM精简配置

 

创建LV时,将分配标准逻辑卷中的块,但是在精简配置的逻辑卷中,将在写入时分配它们。因此,精简配置的LV具有虚拟大小,并且可能比物理可用存储大得多。以后可以根据需要增加为精简配置的LV提供的物理存储量。标准LV中的块是在VG中分配的(在创建过程中),而精简LV中的块是从特殊的瘦池LV”分配的(使用过程中)的。精简池LV包含物理存储块,而精简LV中的块只是精简池LV中的参考块。

必须先创建精简池LV,然后才能在其中创建精简LV。精简池LV是通过组合两个标准LV来创建的:一个大数据LV,它将保存精简LV的块;一个元数据LV,它将保存元数据。元数据跟踪哪些数据块属于每个精简LV

精简LV的快照非常有效,因为共享了精简LV通用的数据块及其快照。快照可以是精简LV或其他精简快照。递归快照共有的块也在瘦池中共享。快照序列没有限制或降级。写入精简LV或快照LV时,它们会消耗精简池中的数据块。随着池中可用数据块的减少,可能需要提供更多可用块。这是通过使用VG的额外物理空间扩展精简池数据LV来完成的。从精简池中删除精简LV或快照也可以释放精简池中的块。但是,删除LV并不总是一种释放精简池中空间的有效方法,因为该数量仅限于不与池中其他LV共享的块数。精简池的增量块分配可能导致精简LV变得碎片化。标准LV通常通过在创建过程中一次分配所有块来避免此问题。

瘦词

简写

文字形式

描述

ThinDataLV

瘦数据L​​V

在精简池用于存储ThinLV块的VG中创建的大型LV

ThinMetaLV

瘦元数据LV

在精简池用于跟踪数据块使用的VG中创建的小型LV

ThinPoolLV

瘦池LV

ThinDataLV和ThinMetaLV的组合包含ThinLV和SnapLV

薄LV

薄LV

从ThinPoolLV创建的创建后显示为空白

SnapLV

快照LV

从ThinPoolLV创建的图像在创建后显示为另一个LV的快照

精简用法

使用LVM精简配置的主要方法是:

创建ThinDataLV

创建将保存精简池数据的LV

命令lvcreate -n ThinDataLV -L LargeSize VG

范例

生的

# lvcreate -n poolA -L 100G vg

创建ThinMetaLV

创建一个将容纳精简池元数据的LV

命令lvcreate -n ThinMetaLV -L SmallSize VG

范例

生的

# lvcreate -n poolA_meta -L 1G vg

 

# lvs

poolA vg -wi-a----- 10.00g

poolA_meta vg -wi-a----- 1.00g

创建ThinPoolLV

将数据和元数据LV合并到精简池LV中。ThinDataLV重命名为隐藏的ThinPoolLV_tdataThinMetaLV重命名为隐藏的ThinPoolLV_tmeta。新的ThinPoolLV采用ThinDataLV的旧名称。

命令lvconvert --thinpool VG/ThinDataLV --poolmetadata VG/ThinMetaLV

范例

生的

# lvconvert --thinpool vg/poolA --poolmetadata vg/poolA_meta

 

# lvs vg/poolA

LV VG Attr LSize Pool Origin Data%

poolA vg twi-a-tz-- 10.00g 0.00

 

# lvs -a

LV VG Attr LSize Pool Origin Data%

poolA vg twi-a-tz-- 10.00g

[poolA_tdata] vg Twi-ao---- 10.00g

[poolA_tmeta] vg ewi-ao---- 1.00g

创建ThinLV

从精简池LV创建新的精简LV。精简LV使用虚拟大小创建。可以在精简池中创建多个新的精简LV。瘦LV名称在VG中必须唯一。该--thinpool参数指定哪个精简池将包含ThinLV

命令lvcreate --type thin -n ThinLV -V VirtualSize --thinpool VG/ThinPoolLV

范例

生的

Create a thin LV in a thin pool:

# lvcreate --type thin -n thinX -V 1T --thinpool vg/poolA

 

Create another thin LV in the same thin pool:

# lvcreate --type thin -n thinY -V 1T --thinpool vg/poolA

 

# lvs vg/thinX vg/thinY

LV VG Attr LSize Pool Origin Data%

thinX vg Vwi-a-tz-- 1.00t poolA 0.00

thinY vg Vwi-a-tz-- 1.00t poolA 0.00

创建SnapLV

创建现有ThinLVSnapLV的快照。

命令

生的

lvcreate --type thin -n SnapLV -s ThinLV --thinpool VG/ThinPoolLV

lvcreate --type thin -n SnapLV -s PrevSnapLV --thinpool VG/ThinPoolLV

范例

生的

Create the first snapshot of an existing ThinLV:

# lvcreate --type thin -n snapX1 -s thinX --thinpool vg/poolA

 

Create the second snapshot of the same ThinLV:

# lvcreate --type thin -n snapX2 -s thinX --thinpool vg/poolA

 

Create a snapshot of the first snapshot:

# lvcreate --type thin -n snapsnapX1 -s snapX1 --thinpool vg/poolA

 

# lvs vg/snapX1 vg/snapX2 vg/snapsnapX1

LV VG Attr LSize Pool Origin

snapX1 vg Vwi---tz-k 1.00t poolA thinX

snapX2 vg Vwi---tz-k 1.00t poolA thinX

snapsnapX1 vg Vwi---tz-k 1.00t poolA snapX1

激活SnapLV

使用k属性指示的持久性激活跳过标志创建精简快照。-Klvchangevgchange一起使用可激活带有k属性的精简快照。

命令lvchange -ay -K VG/SnapLV

范例

生的

# lvchange -ay -K vg/snapX1

 

# lvs vg/snapX1

snapX1 vg Vwi-a-tz-k 1.00t poolA thinX

细话题

指定用于数据和元数据LV的设备

精简池中的数据和元数据LV最好在单独的物理设备上创建。为此,请在行末指定设备名称lvcreate。将快速设备用于元数据LV尤其有用。

命令

生的

lvcreate -n ThinDataLV -L LargeSize VG PV_Large

lvcreate -n ThinMetaLV -L SmallSize VG PV_Small

lvconvert --thinpool VG/ThinDataLV --poolmetadata VG/ThinMetaLV

范例

生的

# lvcreate -n poolA -L 100G vg /dev/sdA

# lvcreate -n poolA_meta -L 1G vg /dev/sdB

# lvconvert --thinpool vg/poolA --poolmetadata vg/poolA_meta

参见/etc/lvm/lvm.conf配置文件参数thin_pool_metadata_require_separate_pvs设定为薄池创建默认PV使用。

使用RAID容忍设备故障

为了容忍设备故障,请对池数据LV和池元数据LV使用RAID。对于池元数据LV,特别推荐这样做。

命令

生的

lvcreate --type raid1 -m 1 -n ThinMetaLV -L SmallSize VG PVA PVB

lvcreate --type raid1 -m 1 -n ThinDataLV -L LargeSize VG PVC PVD

lvconvert --thinpool VG/ThinDataLV --poolmetadata VG/ThinMetaLV

范例

生的

# lvcreate --type raid1 -m 1 -n poolA -L 100G vg /dev/sdA /dev/sdB

# lvcreate --type raid1 -m 1 -n poolA_meta -L 1G vg /dev/sdC /dev/sdD

# lvconvert --thinpool vg/poolA --poolmetadata vg/poolA_meta

备用元数据LV

第一次创建精简池LV时,LVM将在VG中创建备用元数据LV。可以使用option控制此行为--poolmetadataspare y|n。如果不存在,将来的瘦池创建也将尝试创建pmspare LV

要创建pmspare池元数据备用LVLVM首先创建一个具有默认名称的LV,例如lvol0,然后将该LV转换为带有_pmspare后缀(例如lvol0_pmspare)的隐藏LV

一个pmspare LV保留在VG中,可用于任何精简池。

pmspare LV不能显式创建,但可以显式删除。

范例

生的

# lvcreate -n poolA -L 10G vg

# lvcreate -n poolA_meta -L 10G vg

# lvconvert --thinpool vg/poolA --poolmetadata vg/poolA_meta

 

# lvs -a

[lvol0_pmspare] vg ewi------- 10.00g

poolA vg twi---tz-- 10.00g

[poolA_tdata] vg Twi------- 10.00g

[poolA_tmeta] vg ewi------- 1.00g

元数据检查和修复部分介绍了pmspare LV的用法。

元数据检查和修复

如果精简池元数据已损坏,则可以修复。检查和修复精简池元数据类似于在文件系统上运行fsck

激活精简池LV后,LVM将运行thin_check命令以检查池元数据LV上元数据的正确性。

要禁用该thin_check步骤,请将/etc/lvm/lvm.confoption 设置thin_check_executable为空字符串(“”)。不建议这样做。

要设置thin_check命令的/etc/lvm/lvm.conf选项,请设置option thin_check_options

如果thin_check命令发现元数据有问题,则不会激活精简池LV,并且应该修复精简池元数据。

修复精简池LV的命令lvconvert --repair VG/ThinPoolLV

修复执行以下步骤:

1.创建一个新的,修复的元数据副本。

  • lvconvert运行thin_repair命令以从现有池元数据LV中读取损坏的元数据,然后将新的已修复副本写入VG的pmspare LV。

2.替换精简池元数据LV

  • 如果步骤1成功,则将精简池元数据LV替换为包含已校正元数据的pmspare LV。使用新名称ThinPoolLV_tmetaN(其中N为0,1,...),可以看到包含损坏的元数据的先前的精简池元数据LV。
  • 如果修复有效,则可以激活瘦池LV及其瘦LV,并可以删除包含已损坏的瘦池元数据的LV。将新的元数据LV(以前是pmspare)移动到更好的PV可能很有用。
  • 如果修复不起作用,则精简池LV及其精简LV将丢失。
  • 如果thin_repair直接使用元数据手动还原,则可以将池元数据LV与包含新元数据的另一个LV手动交换:

生的

lvconvert --thinpool VG/ThinPoolLV --poolmetadata VG/NewThinMetaLV

到路径thin_checkthin_dumpthin_repair命令可以在被设置/etc/lvm/lvm.conf

自动池元数据LV

精简数据LV可以转换为精简池LV,而无需指定精简池元数据LVLVM将自动从同一VG创建元数据LV

命令

生的

lvcreate -n ThinDataLV -L LargeSize VG*

lvconvert --thinpool VG/ThinDataLV*

范例

生的

# lvcreate -n poolC -L 10G vg

# lvconvert --thinpool vg/poolC

 

# lvs -a

poolC vg twi-a-tz-- 10.00g

[poolC_tdata] vg Twi-ao---- 10.00g

[poolC_tmeta] vg ewi-ao---- 16.00m

激活精简快照

创建精简快照LV时,默认情况下会为其指定激活跳过标志。该标志由显示的k属性指示lvs

生的

# lvs vg/snapX1

LV VG Attr LSize Pool Origin

snapX1 vg Vwi---tz-k 1.00t poolA thinX

该标志导致快照LV被普通激活命令跳过(即不激活)。跳过行为不适用于停用命令。

除标准(或)选项外,还可以使用(或)选项激活具有k属性的快照LV -K--ignoreactivationskip-ay--activate y

激活精简快照LV的命令lvchange -ay -K VG/SnapLV

可以在lvcreate或以后lvchange使用-kn(或--setactivationskip n)选项关闭持久性激活跳过标志。可以使用-ky(或--setactivationskip y)再次将其打开。

删除激活跳过标志后,正常的激活命令将激活LV,并且-K不需要激活选项。

创建不带激活跳过标志的快照LV的命令lvcreate --type thin -n SnapLV -kn -s ThinLV --thinpool VG/ThinPoolLV

从快照LV删除激活跳过标志的命令lvchange -kn VG/SnapLV

请参阅/etc/lvm/lvm.conf选项auto_set_activation_skip以设置激活跳过的默认用法。

删除精简池LV,精简LV和快照

删除精简LV及其相关快照将其使用的块返回到精简池LV。这些块将重新用于其他精简LV和快照。

删除精简池LV会同时删除数据LV和元数据LV,并将空间返回给VG

lvremove精简池LV,精简LV和快照的数量不能通过反转vgcfgrestore

vgcfgbackup 不备份精简池元数据。

手动管理精简池LV的可用数据空间

可以使用以下lvs命令显示精简池LV中的可用空间。可以通过扩展精简池LV添加可用空间。

范例

生的

1. A thin pool LV is using 26.96% of its data blocks.

# lvs

LV VG Attr LSize Pool Origin Data%

poolA vg twi-a-tz-- 10.00g 26.96

 

2. Double the amount of physical space in the thin pool LV.

# lvextend -L+10G vg/poolA

 

3. The percentage of used data blocks is half the previous value.

# lvs

LV VG Attr LSize Pool Origin Data%

poolA vg twi-a-tz-- 20.00g 13.48

在精简池LV中增加可用数据空间的其他方法包括删除精简LV及其相关快照,或fstrim使用精简LV在文件系统上运行。

手动管理精简池LV的可用元数据空间

可以使用以下lvs -o+metadata_percent命令显示精简池LV中的可用元数据空间。

范例

生的

1. A thin pool LV is using 12.40% of its metadata blocks.

 

# lvs -oname,size,data_percent,metadata_percent vg/poolA

LV LSize Data% Meta%

poolA 20.00g 13.48 12.40

 

2. Display a thin pool LV with its component thin data LV and thin metadata LV.

# lvs -a -oname,attr,size vg

LV Attr LSize

poolA twi-a-tz-- 20.00g

[poolA_tdata] Twi-ao---- 20.00g

[poolA_tmeta] ewi-ao---- 12.00m

 

3. Double the amount of physical space in the thin metadata LV.

# lvextend -L+12M vg/poolA_tmeta

 

4. The percentage of used metadata blocks is half the previous value.

# lvs -a -oname,size,data_percent,metadata_percent vg

LV LSize Data% Meta%

poolA 20.00g 13.48 6.20

[poolA_tdata] 20.00g

[poolA_tmeta] 24.00m

使用fstrim增加精简池LV中的可用空间

在精简LV顶部的文件系统中删除文件通常不会向精简池中添加可用空间。手动运行fstrim命令可以将空间返回到已删除文件已使用的精简池。fstrim使用丢弃,并且如果精简池LV将丢弃模式设置为忽略,则将不起作用。

范例

精简池具有10G的物理数据空间,而精简LV具有100G的虚拟大小。将1G文件写入文件系统会将精简池中的可用空间减少10%,并将文件系统的虚拟使用量增加1%。删除1G文件会将虚拟1%还原到文件系统,但不会将物理10%还原到精简池。该fstrim命令将物理空间还原到精简池。

生的

# lvs -a -oname,attr,size,pool_lv,origin,data_percent,metadata_percent vg

LV Attr LSize Pool Origin Data% Meta%

poolA twi-a-tz-- 10.00g 47.01 21.03

thinX Vwi-aotz-- 100.00g poolA 2.70

 

# df -h /mnt/X

Filesystem Size Used Avail Use% Mounted on

/dev/mapper/vg-thinX 99G 1.1G 93G 2% /mnt/X

 

# dd if=/dev/zero of=/mnt/X/1Gfile bs=4096 count=262144; sync

 

# lvs

poolA vg twi-a-tz-- 10.00g 57.01 25.26

thinX vg Vwi-aotz-- 100.00g poolA 3.70

 

# df -h /mnt/X

/dev/mapper/vg-thinX 99G 2.1G 92G 3% /mnt/X

 

# rm /mnt/X/1Gfile

 

# lvs

poolA vg twi-a-tz-- 10.00g 57.01 25.26

thinX vg Vwi-aotz-- 100.00g poolA 3.70

 

# df -h /mnt/X

/dev/mapper/vg-thinX 99G 1.1G 93G 2% /mnt/X

 

# fstrim -v /mnt/X

 

# lvs

poolA vg twi-a-tz-- 10.00g 47.01 21.03

thinX vg Vwi-aotz-- 100.00g poolA 2.70

自动扩展瘦池LV

dmeventd默认情况下,LVM守护程序()将监视精简池LV的数据使用情况,并在使用量达到一定水平时对其进行扩展。VG中必须存在必要的可用空间才能扩展精简池LV

用于启用或禁用对现有精简池LV的监视和自动扩展的命令lvchange --monitor {y|n} VG/ThinPoolLV

查看/etc/lvm/lvm.conf选项thin_pool_autoextend_thresholdthin_pool_autoextend_percent定义自动扩展行为。

该选项thin_pool_autoextend_threshold是一个百分比值,该值定义何时应扩展精简池LV。将此设置为100将禁用自动扩展。最小值是50

该选项thin_pool_autoextend_percent以精简池当前大小的百分比定义应向精简池添加多少额外的数据空间。

当池的使用率达到80%,85%,90%和95%时,将通过syslog发出警告。

范例

如果thin_pool_autoextend_threshold70thin_pool_autoextend_percent20,则每当池使用量超过70%时,池的使用量将再增加20%。对于1G池,使用700M将触发将大小调整为1.2G。当使用量超过840M时,池将扩展到1.44G,依此类推。

调零

当精简池为精简LV配置新数据块时,新块首先被零覆盖。归零模式由所显示的z属性指示lvs。可以将选项-Z(或--zero)添加到命令中以指定清零模式。

创建精简池LV时设置清零模式的命令lvconvert -Z{y|n} --thinpool VG/ThinDataLV --poolmetadata VG/ThinMetaLV

更改现有精简池LV的清零模式的命令lvchange -Z{y|n} VG/ThinPoolLV

如果清零模式从“ n”更改为“ y”,则先前设置的块不会清零。

调配大零块会影响性能。

请参阅设置默认归零模式的/etc/lvm/lvm.conf选项thin_pool_zero

丢弃

精简池LV的丢弃行为决定了如何处理丢弃请求。可能的丢弃行为:
- 忽略:忽略收到的任何丢弃。
- nopassdown:处理在薄池本身任何丢弃并允许不再需要延伸到由新数据覆盖。
- passdown:在薄池进程丢弃(如用nopassdown),并通过丢弃向下底层设备。这是默认模式。

显示精简池LV当前丢弃模式的命令lvs -o+discards VG/ThinPoolLV

创建精简池LV时设置丢弃模式的命令lvconvert --discards {ignore|nopassdown|passdown} --thinpool VG/ThinDataLV --poolmetadata VG/ThinMetaLV

更改现有瘦池LV的丢弃模式的命令lvchange --discards {ignore|nopassdown|passdown} VG/ThinPoolLV

范例

生的

# lvs -o name,discards vg/poolA

poolA passdown

 

# lvchange --discards ignore vg/poolA

请参阅/etc/lvm/lvm.conf选项thin_pool_discards以设置默认的丢弃模式。

块大小

--chunksize创建精简池LV时,可以使用该选项指定由精简池管理的数据块的大小。默认单位为千字节,默认值为64KiB。该值必须是4KiB1GiB之间的2的幂。

当精简池主要用于精简配置功能时,较大的值是最佳的。为了优化大量快照,较小的值可以减少复制时间并占用较少的空间。

显示精简池LV块大小的命令lvs -o+chunksize VG/ThinPoolLV

范例

生的

# lvs -o name,chunksize

poolA 64.00k

请参阅/etc/lvm/lvm.conf选项thin_pool_chunk_size以设置默认块大小。

池元数据LV的大小

精简元数据的数量取决于精简LV之间(即通过快照)共享多少块。具有许多快照的精简池可能需要较大的元数据LV

支持的元数据LV大小范围是2MiB16GiB

默认大小通过以下公式估算:
ThinPoolLV_size / ThinPoolLV_chunk_size* 64b

显式创建精简元数据LV时,在lvcreate命令中指定大小。当命令自动创建精简元数据LV时,--poolmetadatasize可以使用该选项指定非默认大小。默认单位是兆字节。

创建外部只读LV的精简快照

精简快照通常是从同一精简池中的其他精简LV或其他精简快照LV获取的。还可以对外部只读LV进行精简快照。对快照的写操作存储在精简池中,外部LV用于读取精简快照的未写部分。

命令lvcreate --type thin -n SnapLV -s VG/ExternLV --thinpool VG/ThinPoolLV

范例

生的

# lvchange -an vg/lve

# lvchange --permission r vg/lve

# lvcreate --type thin -n snaplve -s vg/lve --thinpool vg/poolA

 

# lvs vg/lve vg/snaplve

LV VG Attr LSize Pool Origin Data%

lve vg ori------- 10.00g

snaplve vg Vwi-a-tz-- 10.00g poolA lve 0.00

使用外部原点将标准LV转换为精简LV

可以创建新的精简LV,并为其指定现有标准LV的名称。同时,现有LV将转换为具有新名称的只读外部LV。瘦LV的未写部分从外部LV读取。可以使用指定指定给现有LV的新名称--originname,否则,将为现有LV提供默认名称,例如lvol#。

ExampleLV转换为具有新名称ExternalLV的只读外部LV,并创建一个新的精简LV,该新LV的名称与ExampleLV相同。

命令lvconvert --type thin --thinpool VG/ThinPoolLV --originname ExternalLV --thin VG/ExampleLV

范例

生的

# lvcreate -n lv_example -L 10G vg

 

# lvs

lv_example vg -wi-a----- 10.00g

 

# lvconvert --type thin --thinpool vg/poolC --originname lv_external --thin vg/lv_example

 

# lvs

LV VG Attr LSize Pool Origin

lv_example vg Vwi-a-tz-- 10.00g poolC lv_external

lv_external vg ori------- 10.00g

单步精简池LV创建

可以使用单个lvcreate命令创建精简池LV ,而不是lvconvert在现有LV上使用。此命令创建一个精简数据LV,一个精简元数据LV,并将两者组合成一个精简池LV

命令 lvcreate -L LargeSize --thinpool VG/ThinPoolLV

范例

生的

# lvcreate -l1 --thinpool vg/poolC

 

# lvs vg/poolC

LV VG Attr LSize Pool Origin Data%

poolC vg twi-a-tz-- 8.00m 0.00

 

# lvs -a

poolC vg twi-a-tz-- 8.00m

[poolC_tdata] vg Twi-ao---- 8.00m

[poolC_tmeta] vg ewi-ao---- 8.00m

单步精简池LV和精简LV创建

可以使用单个lvcreate命令创建精简池LV和精简LV 。此命令创建一个精简数据LV,一个精简元数据LV,将两者组合成一个精简池LV,并在新池中创建一个精简LV

  • -L LargeSize:指定精简池LV的物理大小。
  • -V VirtualSize:指定精简LV的虚拟大小。

命令lvcreate -L LargeSize -V VirtualSize -n ThinLV --thinpool VG/ThinPoolLV

相当于:

生的

lvcreate -L LargeSize --thinpool VG/ThinPoolLV

lvcreate --type thin -n ThinLV -V VirtualSize --thinpool VG/ThinPoolLV

范例

生的

# lvcreate -L8M -V2G -n thinZ --thinpool vg/poolC

 

# lvs -a

poolC vg twi-a-tz-- 8.00m

[poolC_tdata] vg Twi-ao---- 8.00m

[poolC_tmeta] vg ewi-ao---- 8.00m

thinZ vg Vwi-a-tz-- 2.00g poolC

 


(责任编辑:IT)
------分隔线----------------------------