我需要将 /var 和 /usr 迁移到另一个 lv 以删除它今天使用的物理磁盘,有人知道我该怎么做吗?
LV VG Attr LSize
lvroot rootvg -wi-ao---- 10,00g
lvusr rootvg -wi-ao---- <110,00g
lvvar rootvg -wi-ao---- <123,90g
我正在考虑将 lvusr 和 lvvar 移动到 lvroot (如果需要,我可以扩展该磁盘),但我找不到它的步骤。
提前致谢
答案1
LVM 的优点在于,LV 就像流体一样,可以从一个 PV 倒入另一个 PV。看来您可以通过将lvusr
和lvvar
LV 移动到另一个 PV 来实现您的实际目标。这可以在线实现,无需卸载任何东西。
另一种方法(将这些 LV 的内容移动到lvroot
)将需要卸载lvusr
和lvvar
,这很可能需要重新启动到紧急模式才能实现,因为在系统正常运行时卸载/usr
或/var
不会成功。
如果您可以添加新的物理磁盘,则可以将它们添加到rootvg
:
<optionally partition the new disk>
pvcreate /dev/<disk or partition>
vgextend rootvg /dev/<disk or partition>
如果您可以扩展您希望保留的现有物理磁盘(例如 disk /dev/sdX
)并且 LVM PV 位于磁盘上的最后一个分区(分区号 N),则可以在扩展磁盘后扩展现有 PV:
growpart /dev/sdXN # or use gparted or similar
pvresize /dev/sdXN
或者,如果PV位于全盘设备上(例如/dev/sdX
没有分区号),则可以在扩展磁盘后仅扩展PV:
pvresize /dev/sdX
或者,如果扩容磁盘已分区且PV不是最后一个分区,则可以使用添加的空间创建新分区,并将其添加到VG中:
fdisk /dev/sdX # to create a new partition, e.g. /dev/sdXNN
pvcreate /dev/sdXNN
vgextend rootvg /dev/sdXNN
完成这 4 个过程中的任何一个之后,您rootvg
现在应该有未分配的空间,如vgs
或所示vgdisplay rootvg
。要将 LV 从当前 PV 移动到可用空间,请使用pvmove
。
如果您不关心数据将被移动到哪里(或者 VG 中只有一大块可用空间),您可以简单地指定要将数据移出的 PV 的设备名称:
pvmove /dev/<old disk or partition containing a LVM PV>
vgreduce rootvg /dev/<old disk or partition containing a LVM PV>
pvremove /dev/<old disk or partition containing a LVM PV>
仅当所有 LV 数据已成功移走时,该vgreduce
步骤才会继续:如果移动不成功,vgreduce
将告诉您该 PV 仍在使用中,并拒绝从 rootvg 中删除该 PV。
如果需要,您可以为 pvmove 显式指定一个或多个目标 PV:
pvmove /dev/<old PV> /dev/<new PV that is already part of the same VG> ...
该pvmove
命令会将数据从旧 PV 移动到第一个新 PV,直到完全分配为止,然后根据需要按顺序移动到其他列出的 PV。 (是的,单个 LV 可以毫无问题地占用多个 PV。)
答案2
您真正想要的是“合并逻辑 LVM 卷”。它不能也不会在您的情况下工作,因为它们已经包含不同的数据,即文件系统。
您可以做的是删除不需要的逻辑卷,增加剩余的逻辑卷,移动数据(sudo mv source destination
在 LiveCD 下),删除源逻辑卷,然后再次增加剩余的逻辑卷。
在尝试执行任何操作之前,请确保已备份所有内容。