「lvm(8)」-

LVM2工具

命令语法格式

lvm [command|file]

命令描述

逻辑卷管理器(LVM)提供了从物理设备中创建虚拟块设备的工具。虚拟设备可以比物理设备更容易管理,并且可以具有超出物理设备自身提供的能力。每个物理设备称为物理卷(PV)。卷组(VG)是一个或多个物理卷(PV)的集合。逻辑卷(LV)是可由系统或应用程序使用的虚拟块设备。根据内核中的“Device Mapper”(DM)实现的算法,LV中的每个数据块存储在VG中的一个或多个PV上。

命令lvm和下面列出的其他命令是LVM的命令行工具。每个命令的单独手册页描述了其详细信息。

如果在没有参数的情况下调用lvm命令,则会显示readline提示符(假设它编译时使用readline支持)。可以在此提示符下以交互方式输入LVM命令,其中包括历史记录、命令名称、选项补全。有关详细信息,请参阅readline(3)。

如果在将argv[0]设置为特定LVM命令的名称(例如,通过使用硬链接或软链接)调用lvm,则它将充当该命令。

在调用时,lvm要求只有标准文件描述符stdin、stdout、stderr可用。如果找到其他人,他们将被关闭,并发出警告泄漏的警告。可以通过设置环境变量LVM_SUPPRESS_FD_WARNINGS来抑制此警告。

其中,命令将VG或LV名称作为参数,完整路径名称是可选的。在名为“vg0”的VG中,称为“lvol0”的LV可以指定为“vg0/lvol0”。如果需要VG列表,但留空,则将替换所有VG的列表。如果需要LV列表,但是给出了VG,则将替换该VG中所有LV的列表。因此lvdisplay vg0将显示“vg0”中的所有LV。也可以使用标签,请参阅下面的–addtag选项。

使用内置shell的一个优点是:配置信息在命令之间内部缓存。

也可以在命令行上给出包含每行一个命令的简单脚本的文件。如果第一行是#!后跟lvm的绝对路径,则可以直接执行脚本。

选项名称中的附加连字符将被忽略。例如,–readonly和–read-only都被接受。

内置命令

在lvm中内置了以下命令,通常不会在文件系统中为它们创建链接。通常在交互模式中执行:

config,参考lvmconfig(8)手册。

devtypes,显示已识别的内置块设备类型。

dumpconfig,参考lvmconfig(8)手册。

formats,显示识别的元数据格式。

fullreport,同时报告有关PV,PV段,VG,LV段,LV的信息。

lastlog,如果启用了命令日志报告,则显示在LVM的Shell中运行的最后一个命令的日志报告。

lvpoll,完成lvmpolld操作(内部命令)。

segtypes,显示已识别的LV段类型。

systemid,显示当前在此主机上设置的任何系统ID。

tags,显示在此主机上定义的任何标签。

version,显示版本信息。

help,显示帮助信息。

以下介绍命令实现核心LVM功能。

与PV有关的命令

pvchange,更改PV的属性。

pvck,检查PV元数据。

pvcreate,初始化磁盘或分区以供LVM使用。

pvdisplay,显示PV的属性。

pvmove,移动PE。

pvremove,删除PV。

pvresize,调整LVM2使用的磁盘或分区的大小。

pvs,报告有关PV的信息。

pvscan,扫描PV的所有磁盘。

与VG有关的命令

vgcfgbackup,备份VG描述符区域。

vgcfgrestore,恢复VG描述符区域。

vgchange,更改VG的属性。

vgck,检查VG的元数据。

vgconvert,转换VG元数据格式。

vgcreate,创建一个VG。

vgdisplay,显示VG的属性。

vgexport,使VG对系统未知。

vgextend,将PV添加到VG。

vgimport,使系统识别导出的VG。

vgimportclone,导入并重命名重复的VG(例如硬件快照)。

vgmerge,合并两个VG。

vgmknodes,重新创建VG目录和LV特殊文件

vgreduce,通过删除一个或多个PV来减少VG。

vgremove,删除VG。

vgrename,重命名VG。

vgs,报告有关VG的信息。

vgscan,扫描VG的所有磁盘,并重建缓存。

vgsplit,将VG拆分为两个,通过移动整个PV将任何LV从一个VG移动到另一个VG。

与LV有关的命令

lvchange,更改LV的属性。

lvconvert,将LV从线性转换为镜像或快照。

lvcreate,在现有VG中创建LV。

lvdisplay,显示LV的属性。

lvextend,扩展LV的大小。

lvmconfig,加载lvm.conf(5)和其他任何配置文件后,显示配置信息。

lvmdiskscan,扫描LVM2可见的所有设备。

lvmdump,创建lvm2信息转储,以用于诊断目的。

lvreduce,减小LV的大小。

lvremove,删除LV。

lvrename,重命名LV。

lvresize,调整LV的大小。

lvs,报告有关LV的信息。

lvscan,扫描(所有磁盘)的LV。

未实现的命令

在LVM2中未实现以下LVM1中的命令:lvmchange,lvmsadc,lvmsar,pvdata。 对于性能指标,直接使用dmstats(8)或操作由LVM2使用的内核设备映射驱动程序,使用dmsetup(8)。

有效的名字

VG和LV名称的有效字符为:a-z A-Z 0-9 + _ . -

VG名称不能以连字符(-)开头。新LV的名称也不能以连字符(-)开头。但是,如果启用了配置设置metadata/record_lvs_history,那么带有连字符作为前缀的LV名称表示:虽然LV被移除了,但它仍然被跟踪,因为它构成了至少一个仍然存在的LV历史的一部分。这有助于记录精简快照的祖先,即使链中的某些链接已被删除。如果VG已经设置,对VG’vg00’中历史LV’lvol1’的引用将是’vg00/\-lvol1’或仅仅是’-lvol1’。 (后一种形式必须以’–‘开头,以在到达此参数之前终止命令行选项的处理。)

lvm内部还使用了各种保留名称,这些名称不能用作LV或VG名称:

  • 在创建时,VG不能调用/dev/中存在的任何内容,也不能称为“.”、“..”。
  • LV不能被称为“.”、“..”、“snapshot”、“pvmove”。
  • LV名称也可能不包含以下任何字符串:’_cdata’, ‘_cmeta’, ‘_corig’, ‘_mlog’, ‘_mimage’, ‘_pmspare’, ‘_rimage’, ‘_rmeta’, ‘_tdata’, ‘_tmeta’, ‘_vorigin’

当激活任何LV时,在/dev下创建一个带有每个GV名称的目录。可以从此目录访问每个活动LV,作为通向设备节点的符号链接。/dev/mapper中的链接或节点仅供内部使用,精确格式和转义可能会在发行版和发行版之间发生变化。其他软件和脚本应使用/dev/VolumeGroupName/LogicalVolumeName格式,以减少软件更新时需要修改的可能性。如果需要处理/dev/mapper中的节点名称,可以使用dmsetup splitname分离出原始的VG、LV、内部层名称。

唯一命名

VG名称应该是唯一的。 如果指定的VG名称与现有VG名称匹配,则vgcreate将产生错误。但是,有些情况下,LVM可能会出现具有相同名称的不同VG,例如 对磁盘进行移动,或更修改滤器后。

当存在具有相同名称的VG时,在所有VG上运行的命令将包括具有相同名称的所有VG。如果在命令行中指定了不明确的VG名称,该命令将产生错误,该错误表明存在多个具有指定名称的VG。要专门处理其中一个VG,应使用–select选项与预期VG的UUID一起使用:–select vg_uuid=<uuid>

例外情况是,除了一个具有共享名称的VG之外的所有VG都是外来的(请参阅lvmsystemid(7))。在这种情况下,假定一个非外来的VG是预期的VG,并进行处理。

在VG中,LV名称是唯一的。 在历史LV本身被删除或重命名之前,不能重复使用历史LV的名称。

分配

当一个操作需要为一个或多个LV分配PE时,工具按如下方式进行:

首先,它们在VG中生成完整的未分配PE集。如果在命令行末尾提供了任何PE范围,则仅考虑指定PV上这些范围内的未分配PE。

然后,他们依次尝试每个分配策略,从最严格的策略(连续)开始,以使用–alloc指定的分配策略结束,或者设置为相关特定LV或VG的默认值。对于每个策略,从需要填充的空LV空间的编号最小的LE开始,它们根据策略施加的限制分配尽可能多的空间。如果需要更多空间,他们将继续执行下一个策略。

限制如下:

“Contiguous”要求“不是LV的第一个LE的任何LE”的物理位置与紧邻其之前的LE的物理位置相邻。

“Cling”要求将用于任何LE的PV添加到现有LV中,该LV之前已至少使用一个LE。如果定义了配置参数allocation/cling_tag_list,则如果两个PV上都存在任何列出的标记,则认为两个PV匹配。这允许对具有相似属性(例如其物理位置)的PV进行标记,并将其视为等效用于分配目的。

当条带化或镜像LV时,上述限制将独立应用于需要空间的每个条带或镜像(腿)。

”Normal“通常不会选择”共享相同PV的PE“来做为一个LE来将其分配给一个并行LV,该LV在并行LV内的相同偏移处。

在与LV同时分配镜像日志以保存镜像数据时,”Normal“将首先尝试为日志和数据选择不同的LV。如果这不可能,并且allocation/mirror_logs_require_separate_pvs配置参数设置为0,则它​​将允许日志与部分数据共享PV。

分配”精简池元数据“时,基于allocation/thin_pool_metadata_require_separate_pvs配置参数的值,应用与上一段中镜像日志类似的注意事项。

如果您依赖于此处记录的任何布局行为,请注意它在将来的代码版本中可能会更改。

例如,如果您在命令行上提供两个可用于分配的具有相同数量的可用PE的空PV,则当前代码会考虑按列出的顺序使用每个PV,但不保证将来的版本将保持该属性。如果获取特定LV的特定布局很重要,那么您应该通过一系列lvcreate(8)和lvconvert(8)步骤构建它,以便上述适用于每个步骤的限制使工具无法自行决定在布局上。

要查看分配过程当前在任何特定情况下的工作方式,请阅读调试日志记录输出,例如将-vvvv添加到命令中。

逻辑卷类型

某些逻辑卷类型很容易创建,可以使用单个lvcreate(8)命令完成。线性和条带逻辑卷类型就是一个例子。

其他逻辑卷类型可能需要多个命令才能创建。 缓存(lvmcache(7))和精简配置(lvmthin(7))类型就是这样的例子。

问题诊断

所有工具在成功时返回零状态代码,或在失败时返回非零值。非零代码仅区分广泛类别的无法识别的命令、处理命令行参数的问题、任何其他故障。由于LVM仍在积极开发中,因此特定情况下使用的代码偶尔会在不同版本之间发生变化。 消息文本也可能会更改。

相关环境变量

HOME
如果调用内部readline的Shell,则该变量指定了包含.lvm_history的目录。

LVM_OUT_FD
用于LVM命令的公共输出的文件描述符。

LVM_ERR_FD
用于LVM命令的错误输出的文件描述符。

LVM_REPORT_FD
用于LVM命令的报告输出的文件描述符。

LVM_COMMAND_PROFILE
用于LVM命令的默认命令概要文件的名称。直接使用–commandprofile命令行选项会覆盖此配置文件。

LVM_RUN_BY_DMEVENTD
此变量通常由dmeventd插件设置,以通知lvm2命令它正在从dmeventd插件运行,因此lvm2需要一些额外的操作来避免与dmeventd的通信和死锁。

LVM_SYSTEM_DIR
包含lvm.conf(5)和其他LVM系统文件的目录。默认为“/etc/lvm”。

LVM_SUPPRESS_FD_WARNINGS
抑制有关传递到LVM的意外文件描述符的警告。

LVM_VG_NAME
假定的VG名称,对于未指定路径的LV的任何引用。默认情况下未设置。

LVM_LVMETAD_PIDFILE
存储lvmetad进程ID的文件的路径。

LVM_LVMETAD_SOCKET
用于与lvmetad通信的套接字的路径。

LVM_LVMPOLLD_PIDFILE
存储lvmpolld进程ID的文件的路径。

LVM_LVMPOLLD_SOCKET
用于与lvmpolld通信的套接字的路径。

LVM_LOG_FILE_EPOCH
最多32个字母的字符串附加到日志文件名,后跟进程ID和启动时间戳,使用此格式字符串“_%s_%d_%llu”。设置后,每个进程都会记录到一个单独的文件中。

LVM_LOG_FILE_MAX_LINES
如果将超过此行数的行发送到日志文件,则命令将中止。自动化测试使用它来终止循环命令。

LVM_EXPECTED_EXIT_STATUS
进程退出时的状态。使用“>N”匹配任何大于N的状态。如果实际退出状态匹配,并生成日志文件,则将其删除。

LVM_LOG_FILE_EPOCH和LVM_EXPECTED_EXIT_STATUS一起允许自动测试脚本丢弃不感兴趣的日志数据。

LVM_SUPPRESS_LOCKING_FAILURE_MESSAGES
用于在已知配置的锁定不可用时,禁止显示警告消息。

DM_ABORT_ON_INTERNAL_ERRORS
如果代码检测到非致命内部错误,则中止处理。

DM_DISABLE_UDEV
避免与udev交互。 LVM将直接管理/dev中的相关节点。

相关文件

/etc/lvm/lvm.conf
LVM的配置文件。

$HOME/.lvm_history
执行LVM命令的历史记录。

相关手册

lvm(8) lvm.conf(5) lvmconfig(8)

pvchange(8) pvck(8) pvcreate(8) pvdisplay(8) pvmove(8) pvremove(8) pvresize(8) pvs(8) pvscan(8)

vgcfgbackup(8) vgcfgrestore(8) vgchange(8) vgck(8) vgcreate(8) vgconvert(8) vgdisplay(8) vgexport(8) vgextend(8) vgimport(8) vgimportclone(8) vgmerge(8) vgmknodes(8) vgreduce(8) vgremove(8) vgrename(8) vgs(8) vgscan(8) vgsplit(8)

lvcreate(8) lvchange(8) lvconvert(8) lvdisplay(8) lvextend(8) lvreduce(8) lvremove(8) lvrename(8) lvresize(8) lvs(8) lvscan(8)

lvm-fullreport(8) lvm-lvpoll(8) lvm2-activation-generator(8) blkdeactivate(8) lvmdump(8)

dmeventd(8) lvmetad(8) lvmpolld(8) lvmlockd(8) lvmlockctl(8) clvmd(8) cmirrord(8) lvmdbusd(8)

lvmsystemid(7) lvmreport(7) lvmraid(7) lvmthin(7) lvmcache(7)

dmsetup(8), dmstats(8), readline(3)

参考文献

  • man 8 lvm, Version 2.02.176-4.1

更新日志

  • 08/14/2018 创建文章