LVM:移动物理卷

LVM:移动物理卷

在虚拟服务器(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

以下步骤仅为想法,从未尝试过,但我认为它可以起作用:

  1. 考虑 Btrfs 的优缺点,以及它还没有真正做好生产准备(嗯,截至 2015 年,但我找不到有关该主题的更新内容)。我们假设您无论如何都想要它。
  2. 备份 备份 备份
  3. 将 ext4 文件系统转换为 Btrfs,因为 Btrfs支持从 ext4 在线迁移
  4. 缩小新的根文件系统(现在是 Btrfs),因为 Btrfs支持在线收缩
  5. 缩小 LVM 容器卷(vg0/root)
  6. pvmove 数据关闭/dev/vdb1(如果我们认为我已经将其移动到,则现在是 vdc1 /dev/vdc1
  7. 移除/dev/vdb1(或/dev/vdc1
  8. 永远和 ext4 说再见

假设没有其他更好的答案,我会尝试这个并在此报告详细信息。

答案2

好的,您已从vdb1。现在:

  • 消除/dev/vdb1使用vgreduce vg0 /dev/vdb1
  • 使用pvmove从中删除数据/dev/vdc1
  • 问题vgreduce vg0 /dev/vdc1其从卷组中删除

此时,您的数据应该只在vda*

非常小心在删除物理卷之前,你应该当然您的数据已从要移除的设备中清除。并进行备份在做任何事情之前

答案3

你的问题是resize2fs一个活动的根文件系统缩小到 200 GB。一种可能的方法在Unix操作系统如何缩小根文件系统问题。它使用pivot_root两次,并且需要手动重新启动大多数操作系统进程和服务;它会导致最近数据的丢失,因此如果您有一个活动数据库,则无法使用它;而且说得客气一点,它很可怕。但是,它仍然是人们尝试过的替代方案,并取得了一些成功。

相关内容