将 lvm 卷映射到物理卷
Map lvm volume to Physical volume
lsblk 以这种格式提供输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
sda 8:0 0 300G 0 disk
sda1 8:1 0 500M 0 part /boot
sda2 8:2 0 299.5G 0 part
vg_data1-lv_root (dm-0) 253:0 0 50G 0 lvm /
vg_data2-lv_swap (dm-1) 253:1 0 7.7G 0 lvm [SWAP]
vg_data3-LogVol04 (dm-2) 253:2 0 46.5G 0 lvm
vg_data4-LogVol03 (dm-3) 253:3 0 97.7G 0 lvm /map1
vg_data5-LogVol02 (dm-4) 253:4 0 97.7G 0 lvm /map2
sdb 8:16 0 50G 0 disk
对于已安装的卷,请说 /map1 我如何直接获取与其关联的物理卷。有没有直接的命令来获取信息?
我需要强调的是,LVM 中的挂载点(逻辑卷)和物理卷之间没有直接关系。这是它的设计目标之一。
但是您可以遍历逻辑卷、卷组和分配给该组的物理卷之间的关联。然而,这只告诉您:数据存储在这些物理卷之一上,但不是确切位置。
我找不到可以直接产生输出的命令。但是,您可以使用 mount
、lvdisplay
、vgdisplay
和 awk|sed
:
来修补一些东西
mp=/mnt vgdisplay -v $(lvdisplay $(mount | awk -vmp="$mp" '==mp{print }') | awk '/VG Name/{print }')
我正在使用环境变量 mp
将挂载点传递给命令。 (您需要以 root 身份或使用 sudo
执行命令)
对于我的测试场景,它输出:
...
--- Volume group ---
VG Name vg1
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 2
VG Access read/write
VG Status resizable
...
VG Size 992.00 MiB
PE Size 4.00 MiB
Total PE 248
Alloc PE / Size 125 / 500.00 MiB
Free PE / Size 123 / 492.00 MiB
VG UUID VfOdHF-UR1K-91Wk-DP4h-zl3A-4UUk-iB90N7
--- Logical volume ---
LV Path /dev/vg1/testlv
LV Name testlv
VG Name vg1
LV UUID P0rgsf-qPcw-diji-YUxx-HvZV-LOe0-Iq0TQz
...
Block device 252:0
--- Physical volumes ---
PV Name /dev/loop0
PV UUID Qwijfr-pxt3-qcQW-jl8q-Q6Uj-em1f-AVXd1L
PV Status allocatable
Total PE / Free PE 124 / 0
PV Name /dev/loop1
PV UUID sWFfXp-lpHv-eoUI-KZhj-gC06-jfwE-pe0oU2
PV Status allocatable
Total PE / Free PE 124 / 123
如果您只想显示物理卷,您可以将上述命令的结果通过管道传输到 sed:
above command | sed -n '/--- Physical volumes ---/,$p'
没有直接命令来显示挂载信息。你可以运行
lvdisplay -m
这将显示逻辑卷当前正在使用哪些物理卷。
请记住,逻辑卷和物理卷之间没有直接关联。逻辑卷与卷组相关联。卷组有一个物理卷池,它们可以在其中分发任何卷组。如果你总是想知道给定的 lv 在给定的 pv 上,你必须限制 vg 到只有那个 pv。那反而错过了重点。您可以使用 pvmove 将范围推离 pv (有时对维护有用)但是如果合乎逻辑,您不能停止在其上创建新范围卷已扩展或已创建。
至于为什么没有这么有用的命令...
LVM 不是 ZFS。 ZFS 是一个完整的存储和文件系统管理系统,管理存储(在多个抽象级别)和文件系统的安装。相比之下,LVM 只是 Linux 虚拟文件系统的一层。它在物理存储设备之上提供了一个抽象层,并且不假设逻辑卷的使用方式。
将 grep/awk/cut/whatever 留给您,这将显示每个 LV 实际使用的 PV:
lvs -o +devices
对于给定 LV 使用的每个 PV,您将获得单独的一行,因此如果一个 LV 在三个 PV 上具有扩展区,您将看到该 LV 的三行。 PV 设备节点路径后面是括号中该 PV 上数据的起始范围(我认为)。
dev=$(df /map1 | tail -n 1|awk '{print }')
echo $dev | grep -q ^/dev/mapper && lvdisplay -m $dev 2>/dev/null | awk '/Physical volume/{print }' || echo $dev
lsblk 以这种格式提供输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
sda 8:0 0 300G 0 disk
sda1 8:1 0 500M 0 part /boot
sda2 8:2 0 299.5G 0 part
vg_data1-lv_root (dm-0) 253:0 0 50G 0 lvm /
vg_data2-lv_swap (dm-1) 253:1 0 7.7G 0 lvm [SWAP]
vg_data3-LogVol04 (dm-2) 253:2 0 46.5G 0 lvm
vg_data4-LogVol03 (dm-3) 253:3 0 97.7G 0 lvm /map1
vg_data5-LogVol02 (dm-4) 253:4 0 97.7G 0 lvm /map2
sdb 8:16 0 50G 0 disk
对于已安装的卷,请说 /map1 我如何直接获取与其关联的物理卷。有没有直接的命令来获取信息?
我需要强调的是,LVM 中的挂载点(逻辑卷)和物理卷之间没有直接关系。这是它的设计目标之一。
但是您可以遍历逻辑卷、卷组和分配给该组的物理卷之间的关联。然而,这只告诉您:数据存储在这些物理卷之一上,但不是确切位置。
我找不到可以直接产生输出的命令。但是,您可以使用 mount
、lvdisplay
、vgdisplay
和 awk|sed
:
mp=/mnt vgdisplay -v $(lvdisplay $(mount | awk -vmp="$mp" '==mp{print }') | awk '/VG Name/{print }')
我正在使用环境变量 mp
将挂载点传递给命令。 (您需要以 root 身份或使用 sudo
执行命令)
对于我的测试场景,它输出:
...
--- Volume group ---
VG Name vg1
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 2
VG Access read/write
VG Status resizable
...
VG Size 992.00 MiB
PE Size 4.00 MiB
Total PE 248
Alloc PE / Size 125 / 500.00 MiB
Free PE / Size 123 / 492.00 MiB
VG UUID VfOdHF-UR1K-91Wk-DP4h-zl3A-4UUk-iB90N7
--- Logical volume ---
LV Path /dev/vg1/testlv
LV Name testlv
VG Name vg1
LV UUID P0rgsf-qPcw-diji-YUxx-HvZV-LOe0-Iq0TQz
...
Block device 252:0
--- Physical volumes ---
PV Name /dev/loop0
PV UUID Qwijfr-pxt3-qcQW-jl8q-Q6Uj-em1f-AVXd1L
PV Status allocatable
Total PE / Free PE 124 / 0
PV Name /dev/loop1
PV UUID sWFfXp-lpHv-eoUI-KZhj-gC06-jfwE-pe0oU2
PV Status allocatable
Total PE / Free PE 124 / 123
如果您只想显示物理卷,您可以将上述命令的结果通过管道传输到 sed:
above command | sed -n '/--- Physical volumes ---/,$p'
没有直接命令来显示挂载信息。你可以运行
lvdisplay -m
这将显示逻辑卷当前正在使用哪些物理卷。
请记住,逻辑卷和物理卷之间没有直接关联。逻辑卷与卷组相关联。卷组有一个物理卷池,它们可以在其中分发任何卷组。如果你总是想知道给定的 lv 在给定的 pv 上,你必须限制 vg 到只有那个 pv。那反而错过了重点。您可以使用 pvmove 将范围推离 pv (有时对维护有用)但是如果合乎逻辑,您不能停止在其上创建新范围卷已扩展或已创建。
至于为什么没有这么有用的命令...
LVM 不是 ZFS。 ZFS 是一个完整的存储和文件系统管理系统,管理存储(在多个抽象级别)和文件系统的安装。相比之下,LVM 只是 Linux 虚拟文件系统的一层。它在物理存储设备之上提供了一个抽象层,并且不假设逻辑卷的使用方式。
将 grep/awk/cut/whatever 留给您,这将显示每个 LV 实际使用的 PV:
lvs -o +devices
对于给定 LV 使用的每个 PV,您将获得单独的一行,因此如果一个 LV 在三个 PV 上具有扩展区,您将看到该 LV 的三行。 PV 设备节点路径后面是括号中该 PV 上数据的起始范围(我认为)。
dev=$(df /map1 | tail -n 1|awk '{print }')
echo $dev | grep -q ^/dev/mapper && lvdisplay -m $dev 2>/dev/null | awk '/Physical volume/{print }' || echo $dev