卷组空间不足。如何恢复?

卷组空间不足。如何恢复?

长话短说,有一个 SVN VM(vmware 服务器)空间不足。我无法提交,因为它说空间不足。该 VM 连接了一个 80GB 虚拟驱动器(hda)、一个 /boot 分区和一个用于 / 的大 VG(VolGroup00)

我正在归档并删除磁盘上的旧 SVN 存储库,但没有恢复可用空间。我需要做什么才能恢复这些空间?我几乎在所有事情上都使用 Linux,但从未真正使用过 LVM,不知道发生了什么。

vgdisplay输出:

--- Volume group ---
VG Name               VolGroup00
System ID             
Format                lvm2
Metadata Areas        1
Metadata Sequence No  3
VG Access             read/write
VG Status             resizable
MAX LV                0
Cur LV                2
Open LV               2
Max PV                0
Cur PV                1
Act PV                1
VG Size               74.41 GB
PE Size               32.00 MB
Total PE              2381
Alloc PE / Size       2380 / 74.38 GB
Free  PE / Size       1 / 32.00 MB
VG UUID               dPSZpL-kFBn-HpkH-ChfO-dw9q-YGg2-qHOiQF

从昨天起,太空就被释放了……

df -h 的输出

Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                       72G   67G  959M  99% /
/dev/hda1              99M   15M   80M  16% /boot
tmpfs                  62M     0   62M   0% /dev/shm

lvs 的输出

LV       VG         Attr   LSize  Origin Snap%  Move Log Copy% 
LogVol00 VolGroup00 -wi-ao 73.38G                              
LogVol01 VolGroup00 -wi-ao  1.00G

有些事情似乎仍然很奇怪,因为它说可用 959M,但使用了 67G,大小为 72G......

所以现在,通过删除存储库,我正在恢复空间......但是,宇宙的平衡尚未恢复......

答案1

删除文件不会改变逻辑卷的大小(并且,也不会影响卷组上的可用空间)。

您可以将卷组视为“虚拟磁盘”,将其上的逻辑卷视为分区,但与常规分区相比,它们的操作(调整大小、创建、删除)要容易得多。

正如 Kamil 所说,如果您在工作时遇到“空间不足”错误,那不是 LVM 的直接错误——这是一个简单的文件系统错误,您可以使用 确定哪个文件系统空间不足df -h,删除文件系统上足够多的内容最终会为您提供更多空间。但是,使用 LVM,如果您有一个文件系统有大量可用空间,而另一个没有可用空间,您可以缩小具有大量可用空间的 LV,然后将该空间分配给空间不足的 LV,从而更有效地使用分配的磁盘。

缩小和扩展文件系统的过程有点冒险(因此要备份),并且缩小阶段必须在未挂载的文件系统上完成(因此最好切换到单用户模式,并且您不能缩小根文件系统;如果您的文件系统支持它(XFS、reiser、最近的 ext2/3),您可以进行在线扩展)。一般来说,这个过程是:

  1. 将要从中删除空间的文件系统缩小到比最终大小略小一点的大小(使用类似resize2fs /dev/mapper/VolGroup00-largeLV xG)。之所以要缩小到更小一点,是因为如果您的计算错误,将 LV 缩小到比文件系统更小,那么您会把它塞满。
  2. 将要删除空间的 LV 缩小到所需大小(lvresize -L xG VolGroup00/largeLV
  3. 将该 LV 上的文件系统扩大到 LV 的新大小:resize2fs /dev/mapper/VolGroup00-largeLV
  4. 将太小的 LV 扩大到新的更大的尺寸:lvresize -L+nG VolGroup00/smallLV
  5. 将太小的 LV 上的文件系统扩大到新的更大的大小:resize2fs /dev/mapper/VolGroup00-smallLV

现在你应该到处都有足够的空间了。

一些提示:

  • lvs将列出所有 LV 及其大小
  • vgs将快速显示所有 VG 的大小和可用空间
  • 如果您的交换位于 LVM 上,并且机器运行不太繁忙,那么这通常是获取一些临时可用空间的好地方。

祝你好运!

答案2

/dev/sda 是本地的还是在 SAN 上?如果在 SAN 上,那就还有希望。如果在本地,并且占用了所有可用空间,则必须通过删除文件来释放一些磁盘空间。

更新问题并让我们知道状态。

编辑

啊,这是虚拟机!你真走运(不管怎样,前提是主机上有可用空间)。

在 VM 管理器中创建另一个虚拟磁盘,其大小与您想要的可用空间大小相同。然后将该磁盘映像呈现给 VM。

确保虚拟机能够看到它(使用 dmesg 查看它是否出现)。假设它能看到,则对其进行 fdisk 操作,然后创建一个分区。

问题

 pvcreate /dev/whatever1  

其中“whatever”显然是设备。可能是 sdb。1 是您刚刚创建的分区。创建这个物理卷应该没有问题。

现在,运行

 vgextend VolumeGroupName /dev/whatever1 

您可以使用 vgdisplay 来验证卷组现在是否有可用空间。现在,扩大逻辑卷:

 lvextend -l +100%FREE 

这应该扩大逻辑卷以填充卷组。

现在到了棘手的部分。假设您有一个 ext3 文件系统,您应该能够实时地调整大小:

 resize2fs /dev/volgroup/logicalvolume 

(其中 volgroup 和 logicalvolume 是安装在 / 上的实际路径)

它会说由于卷已被挂载,所以它正在进行实时调整大小,运行 df -h 应该会显示你有可用空间。

答案3

卷组上的可用空间量不会改变。它们全部由您格式化的文件系统分配。删除文件只会从文件系统中删除它们的 inode 条目,但文件系统仍会占用空间。

回收卷组空间的唯一方法是调整大小或删除逻辑卷。

但是,您所描述的情况听起来就像您磁盘空间不足。您应该检查df -h虚拟机中的输出,看看存储库所在的卷上有多少可用空间。

答案4

尝试重新启动 SVN 服务器。如果删除文件没有释放空间,则它们一定仍在使用中。活动日志也会发生这种情况。我曾经有一些日志每小时增长 10 MB,所以很快我不得不删除该日志,但直到我重新启动向该日志中喷涌数据的守护程序后,空间才得以释放。

编辑:我查了一下为什么会发生这种情况。看来 linux/unix 引用计数文件,因此它们可以被删除,直到它们被所有打开它们的进程释放。

相关内容