卷组空间不足。 我如何回收它?

这么长时间以来,有一个SVN VM(vmware服务器)耗尽了空间。 我不能承诺,因为它说空间不足。 虚拟机有一个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尺寸一起使用…

所以我现在正在从删除存储库中获得空间……然而,宇宙中的平衡尚未恢复。

删除文件不会更改逻辑卷的大小(并且扩展名不会影响卷组上的可用空间)。

您可以将卷组视为“虚拟磁盘”,并将其上的逻辑卷视为分区,但与常规分区相比,更容易处理(resize,创build,删除)。

正如Kamil所说,如果在工作时出现“空间不足”的错误,那不是LVM直接的错误 – 这是一个简单的文件系统错误,您可以使用df -h确定哪个文件系统空间不足,那个文件系统上的东西最终会给你更多的空间。 然而,对于LVM,如果你有一个文件系统,有一堆可用空间,而另一个没有,你可以用很多的空闲空间缩小LV,然后把这个空间分配给空间不足的LV,从而使用你的更有效地分配磁盘。

缩小和扩展文件系统的过程有点危险(备份也是这样),而且缩小阶段必须在卸载的文件系统上完成(所以放到单用户模式是好的,你不能缩小根文件系统;如果你的文件系统支持它(XFS,reiser,最近的ext2 / 3)你可以做在线扩展)。 一般来说,这个过程是:

  1. 将要删除空间的文件系统缩小到比想要的更小的尺寸(使用resize2fs /dev/mapper/VolGroup00-largeLV xG )。 你把它缩小一点的原因是因为如果你弄错了math,把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上进行的,那么如果机器工作不太努力,这通常是获得一点临时空闲空间的好地方。

祝你好运!

是/ dev / sda本地还是在SAN上? 如果它在SAN上,那么就有希望了。 如果它是本地的,并且正在使用所有可用的空间,那么您将不得不通过删除文件来释放一些磁盘空间。

更新问题,让我们知道状态是什么。

编辑

啊,这是一个虚拟机! 你运气好(如果主机上有空闲空间的话)。

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

确保虚拟机看到它(使用dmesg,看看它是否显示)。 假设它,fdisk它,并创build一个分区。

问题

  pvcreate /dev/whatever1 

凡“无论”显然是设备。 可能是sdb。 1是你刚刚做的分区。 这个物理卷不应该有问题。

现在跑吧

  vgextend VolumeGroupName /dev/whatever1 

您可以使用vgdisplay来validation卷组是否有空闲空间。 现在,增长逻辑卷:

  lvextend -l +100%FREE 

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

现在是棘手的部分。 假设你有一个ext3文件系统,你应该能够实时resize:

  resize2fs /dev/volgroup/logicalvolume 

(volgroup和logicalvolume是安装在/上的任何path)

它会说,它正在做一个实时resize,因为卷被挂载,瞧,运行df -h应该显示你有空闲的空间。

卷组上的可用空间量不会改变。 这一切都是由您已经格式化的文件系统分配的。 删除文件只会从文件系统中删除它们的inode条目,但是文件系统仍然会声明这个空间。

回收卷组中空间的唯一方法是resize或删除逻辑卷。

但是,你所描述的内容听起来就像你没有磁盘空间一样。 您应该检查虚拟机中df -h的输出,并查看存储库所在的卷上有多less可用空间。

尝试重新启动您的SVN服务器。 如果删除文件没有释放空间,它们仍然必须以某种方式被使用。 这也发生在活动日志中。 我曾经有一些日志每小时增长10MB,所以很快我不得不删除日志,但是在我重新启动守护进程后,没有释放这个日志。

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