我正在尝试删除向虚拟机添加的磁盘,因为不再需要该磁盘空间。然而,看起来 VM 中的 VG 几乎所有数据都使用了那里可用的数据。
然而,我已经设法将 zoneminder--vg 的大小从 1.5TB 调整到 6G,resiz2fs
但 lvdisplay 的说法不同。
这是一些命令的输出。
root@zoneminder:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root zoneminder-vg -wi-ao---- 1.52t
swap_1 zoneminder-vg -wi-ao---- 976.00m
root@zoneminder:~# pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 zoneminder-vg lvm2 a-- 900.00g 0
/dev/sda5 zoneminder-vg lvm2 a-- 699.52g 46.57g
root@zoneminder:~# vgs
VG #PV #LV #SN Attr VSize VFree
zoneminder-vg 2 2 0 wz--n- 1.56t 46.57g
DF-H
Filesystem Size Used Avail Use% Mounted on
udev 7.9G 0 7.9G 0% /dev
tmpfs 1.6G 8.9M 1.6G 1% /run
/dev/mapper/zoneminder--vg-root 5.6G 4.9G 431M 92% /
tmpfs 7.9G 0 7.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup
/dev/sda1 472M 108M 340M 25% /boot
tmpfs 1.6G 0 1.6G 0% /run/user/1000
光伏显示
--- Physical volume ---
PV Name /dev/sda5
VG Name zoneminder-vg
PV Size 699.52 GiB / not usable 2.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 179077
Free PE 11922
Allocated PE 167155
PV UUID SVGqoc-SQ42-tDzp-Qc7H-n90f-1g9n-x0eLWe
--- Physical volume ---
PV Name /dev/sda3
VG Name zoneminder-vg
PV Size 900.00 GiB / not usable 0
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 230400
Free PE 0
Allocated PE 230400
PV UUID Cdanv0-2pLJ-Yp2n-3zsl-JvjH-72QS-Ciwhaj
lv显示
--- Logical volume ---
LV Path /dev/zoneminder-vg/root
LV Name root
VG Name zoneminder-vg
LV UUID poThtY-v96W-e2Ai-nan7-ckqn-aeBm-T0Kqji
LV Write Access read/write
LV Creation host, time zoneminder, 2018-08-01 22:22:13 +0200
LV Status available
# open 1
LV Size 1.52 TiB
Current LE 397311
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:0
--- Logical volume ---
LV Path /dev/zoneminder-vg/swap_1
LV Name swap_1
VG Name zoneminder-vg
LV UUID SXQ36r-5Kum-Z3Wa-m9DE-CBVb-h9Wx-kmctKT
LV Write Access read/write
LV Creation host, time zoneminder, 2018-08-01 22:22:13 +0200
LV Status available
# open 2
LV Size 976.00 MiB
Current LE 244
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:1
图形显示
--- Volume group ---
VG Name zoneminder-vg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 6
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 2
Act PV 2
VG Size 1.56 TiB
PE Size 4.00 MiB
Total PE 409477
Alloc PE / Size 397555 / 1.52 TiB
Free PE / Size 11922 / 46.57 GiB
VG UUID lTo8U0-dIL9-Yye3-RVYk-rJu6-w6WQ-zIpL8f
如何在不影响 LVM 上任何数据的情况下删除 /dev/sda3?然后再次将 VGroup 重建回 100G 还是其他?
fdisk -l
Disk /dev/sda: 1.6 TiB, 1717986918400 bytes, 3355443200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x21880f4a
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 999423 997376 487M 83 Linux
/dev/sda2 1001470 1468004351 1467002882 699.5G 5 Extended
/dev/sda3 1468004352 3355443199 1887438848 900G 8e Linux LVM
/dev/sda5 1001472 1468004351 1467002880 699.5G 8e Linux LVM
Partition table entries are not in disk order.
Disk /dev/mapper/zoneminder--vg-root: 1.5 TiB, 1666443116544 bytes, 3254771712 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/zoneminder--vg-swap_1: 976 MiB, 1023410176 bytes, 1998848 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
root@zoneminder:~#
更新#1:
@telcoM:感谢您友善而详细的回答,
您提到的所有操作均已完成。我还发现数据当然分布在整个磁盘上,所以我还必须物理移动数据:
root@zoneminder:~# pvresize --setphysicalvolume 101G -v /dev/sda5
Using physical volume(s) on command line.
Archiving volume group "zoneminder-vg" metadata (seqno 9).
/dev/sda5: Pretending size is 211812352 not 1467002880 sectors.
Resizing volume "/dev/sda5" to 211812352 sectors.
Resizing physical volume /dev/sda5 from 0 to 25855 extents.
/dev/sda5: cannot resize to 25855 extents as later ones are allocated.
0 physical volume(s) resized / 1 physical volume(s) not resized
root@zoneminder:~# pvs -v --segments /dev/sda5
Using physical volume(s) on command line.
Wiping cache of LVM-capable devices
PV VG Fmt Attr PSize PFree Start SSize LV Start Type PE Ranges
/dev/sda5 zoneminder-vg lvm2 a-- 699.52g 598.57g 0 25600 root 0 linear /dev/sda5:0-25599
/dev/sda5 zoneminder-vg lvm2 a-- 699.52g 598.57g 25600 141311 0 free
/dev/sda5 zoneminder-vg lvm2 a-- 699.52g 598.57g 166911 244 swap_1 0 linear /dev/sda5:166911-167154
/dev/sda5 zoneminder-vg lvm2 a-- 699.52g 598.57g 167155 11922 0 free
root@zoneminder:~# sudo pvmove --alloc anywhere /dev/sda5:166911-167154 /dev/sda5:25601-25845
/dev/sda5: Moved: 0.4%
/dev/sda5: Moved: 100.0%
root@zoneminder:~# pvresize --setphysicalvolume 101G -v /dev/sda5
Using physical volume(s) on command line.
Archiving volume group "zoneminder-vg" metadata (seqno 12).
/dev/sda5: Pretending size is 211812352 not 1467002880 sectors.
Resizing volume "/dev/sda5" to 211812352 sectors.
Resizing physical volume /dev/sda5 from 0 to 25855 extents.
Updating physical volume "/dev/sda5"
Creating volume group backup "/etc/lvm/backup/zoneminder-vg" (seqno 13).
Physical volume "/dev/sda5" changed
1 physical volume(s) resized / 0 physical volume(s) not resized
root@zoneminder:~# pvs -v --segments /dev/sda5
Using physical volume(s) on command line.
Wiping cache of LVM-capable devices
PV VG Fmt Attr PSize PFree Start SSize LV Start Type PE Ranges
/dev/sda5 zoneminder-vg lvm2 a-- 101.00g 44.00m 0 25600 root 0 linear /dev/sda5:0-25599
/dev/sda5 zoneminder-vg lvm2 a-- 101.00g 44.00m 25600 1 0 free
/dev/sda5 zoneminder-vg lvm2 a-- 101.00g 44.00m 25601 244 swap_1 0 linear /dev/sda5:25601-25844
/dev/sda5 zoneminder-vg lvm2 a-- 101.00g 44.00m 25845 10 0 free
实际上我想要实现的目标如下(post #18): https://communities.vmware.com/message/2723540#2723540
我现在卡在那个/dev/sda3
还没有删除的地方,仍然看到fdisk -l
,大小/dev/sda5
仍然是700G。
root@zoneminder:~# fdisk -l
Disk /dev/sda: 1.6 TiB, 1717986918400 bytes, 3355443200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x21880f4a
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 999423 997376 487M 83 Linux
/dev/sda2 1001470 1468004351 1467002882 699.5G 5 Extended
/dev/sda3 1468004352 3355443199 1887438848 900G 8e Linux LVM
/dev/sda5 1001472 1468004351 1467002880 699.5G 8e Linux LVM
Partition table entries are not in disk order.
Disk /dev/mapper/zoneminder--vg-root: 100 GiB, 107374182400 bytes, 209715200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/zoneminder--vg-swap_1: 976 MiB, 1023410176 bytes, 1998848 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
更新#2:
我已经通过 LIVE-CD 管理使用 GPARTED 和 PARTED 来删除磁盘并调整其中/dev/sda2
也/dev/sda5
与 LV(M) 的大小
由于我在 ESXi 中制作了快照,因此我需要再次重做所有步骤。因为 vmdk 的嵌套看起来有点令人讨厌。
需要一段时间才能复制原始虚拟机 (1.6TB)。之后,我将完整转储所有步骤,以便将来其他人也可以使用它。
答案1
太棒了,你已经成功缩小了文件系统在根 LV 内。
下一步是缩小 LV 以匹配文件系统的新大小。为了安全起见,您可能需要留一点余地,因为不小心切断太多会导致更严重的问题。
文件系统收缩操作总是比扩展风险更大,特别是如果您还不太熟悉它们的话。因此,请备份您可能需要的所有内容,以防万一出现问题。
然后使用tune2fs -l
从文件系统获取准确的块计数:
tune2fs -l /dev/mapper/zoneminder--vg-root | grep "Block "
Block count: NNNNNNNNN
Block size: XXXX
将这两个数字相乘即可得到文件系统的确切大小,然后除以 1024 即可得到二进制千字节,再除以 1024 即可得到二进制兆字节。加一以防止舍入错误:
expr NNNNNNNNN \* XXXX / 1024 / 1024 + 1
SSSSSS
现在,缩小 LV:
lvreduce -L SSSSSS /dev/mapper/zoneminder--vg-root
现在您的 Zoneminder VG 中应该有足够的可用空间。使用pvs
来确认/dev/sda3
现在是否完全未使用:
如果在pvs
输出中,PFree 值不等于 PSize /dev/sda3
,则该 PV 上仍然存在根 LV 的某些部分,您需要将它们移出那里。pvmove
可以轻松做到这一点。如果/dev/sda3
现在完全自由,您可以跳过此步骤。
pvmove /dev/sda3
这实质上是说“sda3
通过将仍在 ot 中的所有 LV 数据移动到属于同一 VG 的其他 PV 来清空”。
pvmove
其工作原理是镜像要移动到新位置的数据,然后从旧位置“删除镜像”。因此,如果pvmove
因系统崩溃而中断,也不会造成灾难性的后果。只需pvmove
不带参数运行即可从原来的位置继续。
现在,sda3
PV 应该完全是空的。从 VG 中删除它:
vgreduce zoneminder-vg /dev/sda3
此时,/dev/sda3
将成为一个独立的、完全免费的 LVM PV。如果您愿意,您可以擦除其中的 PVID:
pvremove /dev/sda3
现在您可以/dev/sda3
按照自己喜欢的方式自由地重复使用该分区。 (如果您打算做一些导致分区被覆盖的事情,那么该pvremove
命令并不是绝对必要的。)
现在,如果您想将根 LV 扩展到 100 GiB,请执行以下步骤:
lvextend -L 100G /dev/mapper/zoneminder--vg-root
resize2fs /dev/mapper/zoneminder--vg-root
你就完成了。
请注意,我在这里任何时候都没有说“卸载文件系统”或“重新启动系统”。没有必要。
答案2
LVM 系统不知道您如何使用逻辑卷。即使减少 LV 中使用的文件系统,也不会更改 LV 的大小,也不会更改 VG 和 PV 中的可用空间(分配给 LV 的所有空间都被视为正在使用)。
如果您减少了文件系统,则可以使用该命令减少 LV lvreduce
,但您应该格外小心,不要将其减少到适合您的文件系统,否则可能会丢失一些数据。
减少逻辑卷后,您可以使用该pvmove
命令将已用空间从一个 PV 移动到另一个 PV,然后使用该vgreduce
命令从 VG 中删除该 PV。