长话短说,有一个 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),您可以进行在线扩展)。一般来说,这个过程是:
- 将要从中删除空间的文件系统缩小到比最终大小略小一点的大小(使用类似
resize2fs /dev/mapper/VolGroup00-largeLV xG
)。之所以要缩小到更小一点,是因为如果您的计算错误,将 LV 缩小到比文件系统更小,那么您会把它塞满。 - 将要删除空间的 LV 缩小到所需大小(
lvresize -L xG VolGroup00/largeLV
) - 将该 LV 上的文件系统扩大到 LV 的新大小:
resize2fs /dev/mapper/VolGroup00-largeLV
- 将太小的 LV 扩大到新的更大的尺寸:
lvresize -L+nG VolGroup00/smallLV
- 将太小的 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 引用计数文件,因此它们可以被删除,直到它们被所有打开它们的进程释放。