
長話短說,有一個 SVN VM(vmware 伺服器)空間不足。我無法承諾,因為它說空間不足。 VM 連接了一個 80GB 虛擬磁碟機 (hda)、一個 /boot 分割區和一個用於 / 的大 VG (VolGroup00)
我正在從磁碟歸檔並刪除舊的 SVN 儲存庫,但我沒有恢復可用空間。我需要做什麼才能使該空間恢復可用?我幾乎所有事情都使用 Linux,但從來沒有真正使用過 LVM,我不知道發生了什麼。
vg顯示輸出:
--- 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 管理器中建立另一個虛擬磁碟,其大小與您想要的可用空間一樣大。然後將該磁碟映像提供給虛擬機器。
確保虛擬機器可以看到它(使用 dmesg 查看它是否顯示)。假設確實如此,請對其進行 fdisk,並建立一個分割區。
問題
pvcreate /dev/whatever1
其中「無論什麼」顯然是設備。可能是sdb。 1是你剛剛創建的分區。製作這個物理卷應該沒問題。
現在,運行
vgextend VolumeGroupName /dev/whatever1
您可以使用 vgdisplay 來驗證磁碟區組現在是否有可用空間。現在,增加邏輯磁碟區:
lvextend -l +100%FREE
這應該擴展邏輯卷以填充卷組。
現在是棘手的部分。假設您有一個 ext3 檔案系統,您應該能夠即時調整大小:
resize2fs /dev/volgroup/logicalvolume
(其中 volgroup 和邏輯磁碟區是安裝在 / 上的任何內容的實際路徑)
它會說它正在執行即時調整大小,因為磁碟區已安裝,瞧,運行 df -h 應該顯示您有可用空間。
答案3
卷組上的可用空間量不會改變。它全部由您格式化的檔案系統分配。刪除檔案只會從檔案系統中刪除其索引節點條目,但檔案系統仍會佔用該空間。
回收卷組中空間的唯一方法是調整邏輯卷大小或刪除邏輯卷。
但是,您所描述的聽起來就像您的磁碟空間不足。您應該檢查虛擬機器中的輸出df -h
,並查看儲存庫所在的磁碟區上有多少可用空間。
答案4
嘗試重新啟動 SVN 伺服器。如果刪除檔案沒有釋放空間,則它們一定仍在使用中。活動日誌也會發生這種情況。我曾經有一些日誌每小時增長 10 mb,所以很快我就不得不刪除該日誌,但它並沒有釋放空間,直到我重新啟動湧入該日誌的守護進程。
編輯:我查了一下為什麼會發生這種事。 linux/unix 似乎對檔案進行引用計數,因此可以刪除它們,直到它們被打開它們的所有進程釋放為止。