![LVM:移动物理卷](https://linux22.com/image/691298/LVM%EF%BC%9A%E7%A7%BB%E5%8A%A8%E7%89%A9%E7%90%86%E5%8D%B7.png)
在虚拟服务器(Debian GNU/Linux 8 amd64)中,我有以下磁盘和文件系统:
# pvscan
PV /dev/vda1 VG vg0 lvm2 [100.00 GiB / 0 free]
PV /dev/vdb1 VG vg0 lvm2 [46.56 GiB / 0 free]
PV /dev/vda2 VG vg0 lvm2 [100.00 GiB / 0 free]
PV /dev/vdc1 VG vg0 lvm2 [60.00 GiB / 60.00 GiB free]
Total: 4 [306.55 GiB] / in use: 4 [306.55 GiB] / in no VG: 0 [0 ]
# lvdisplay
--- Logical volume ---
LV Path /dev/vg0/root
LV Name root
VG Name vg0
LV UUID qpeei3-v1nW-pYVR-lK7Y-4wwy-Y4Y4-c9yQEl
LV Write Access read/write
LV Creation host, time nomos, 2015-03-17 16:34:05 +0100
LV Status available
# open 1
LV Size 246.56 GiB
Current LE 63119
Segments 3
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/dm-0 243G 135G 98G 59% /
[... no other on-disk filesystems]
根文件系统是 ext4。
由于/dev/vda
有足够的空间容纳我的所有数据,我想删除/dev/vdb
和/dev/vdc
。后者只是作为临时空间,为必要的操作提供空间。在删除 之前,/dev/vdb1
应将 上的数据移动到。但是,根文件系统目前跨越所有三个分区、和。/dev/vda*
/dev/vdb1
/dev/vda1
/dev/vda2
/dev/vdb1
问题是我只能在很短的时间内关闭虚拟机(几秒钟,只需重新启动),所以我无法减少根文件系统的大小,因为这需要卸载它并使服务器长时间处于关闭状态。不过,如果需要,我可以添加其他磁盘,最多 500GB。
我已经运行 pvmove 将数据从驱动器中移出:
# pvmove /dev/vdb1
Detected pvmove in progress for /dev/vdb1
/dev/vdb1: Moved: 4.0%
并等待它达到 100%。然而 pvmove 将数据移动到了/dev/vdc1
。
# pvs
PV VG Fmt Attr PSize PFree
/dev/vda1 vg0 lvm2 a-- 100.00g 0
/dev/vda2 vg0 lvm2 a-- 100.00g 0
/dev/vdb1 vg0 lvm2 a-- 46.56g 46.56g
/dev/vdc1 vg0 lvm2 a-- 60.00g 13.43g
现在呢?我可能可以删除/dev/vdb1
,但我的数据被困在 上/dev/vdc1
。我真正需要的是将根文件系统的分配 inode 移到/dev/vdb1
中的空闲文件系统空间/dev/vda*
。然后我梦想着我可以移开,/dev/vdb1
因为文件系统已移至/dev/vda*
。我意识到它不会自动以这种方式工作,但我无法想象一种迁移策略可以让我手动执行此操作,而无需缩小根文件系统。
你能帮忙吗?
答案1
以下步骤仅为想法,从未尝试过,但我认为它可以起作用:
- 考虑 Btrfs 的优缺点,以及它还没有真正做好生产准备(嗯,截至 2015 年,但我找不到有关该主题的更新内容)。我们假设您无论如何都想要它。
- 备份 备份 备份
- 将 ext4 文件系统转换为 Btrfs,因为 Btrfs支持从 ext4 在线迁移
- 缩小新的根文件系统(现在是 Btrfs),因为 Btrfs支持在线收缩
- 缩小 LVM 容器卷(vg0/root)
- pvmove 数据关闭
/dev/vdb1
(如果我们认为我已经将其移动到,则现在是 vdc1/dev/vdc1
) - 移除
/dev/vdb1
(或/dev/vdc1
) - 永远和 ext4 说再见
假设没有其他更好的答案,我会尝试这个并在此报告详细信息。
答案2
好的,您已从vdb1
。现在:
- 消除
/dev/vdb1
使用vgreduce vg0 /dev/vdb1
- 使用
pvmove
从中删除数据/dev/vdc1
- 问题
vgreduce vg0 /dev/vdc1
其从卷组中删除
此时,您的数据应该只在vda*
是非常小心在删除物理卷之前,你应该当然您的数据已从要移除的设备中清除。并进行备份在做任何事情之前
答案3
你的问题是resize2fs
一个活动的根文件系统缩小到 200 GB。一种可能的方法在Unix操作系统如何缩小根文件系统问题。它使用pivot_root
两次,并且需要手动重新启动大多数操作系统进程和服务;它会导致最近数据的丢失,因此如果您有一个活动数据库,则无法使用它;而且说得客气一点,它很可怕。但是,它仍然是人们尝试过的替代方案,并取得了一些成功。