如何縮小物理體積?
我在一個分區上有一個物理卷,它延伸到整個磁碟,比如 /dev/sda1 使用 100% 的 /dev/sda。現在我需要縮小它來創建/dev/sda2。一個邏輯卷實際上使用了大約 50% 的 PV,因此理論上有足夠的可用空間,但它們都是使用單個 PV 分配的。有沒有一種安全的方法來縮小物理卷(和底層磁碟分區),為第二個分區創造一些額外的空間?不幸的是,我的配置排除了臨時將物理卷 pvmove 到另一台設備的可能性。
當然,我知道我可以在文件級別上執行此操作(例如備份內容、重新分區磁碟驅動器和重新創建 LVM 配置),但我更願意在不需要從頭配置 LV 的情況下完成這項工作。
謝謝你。
如果您只需要另一個單獨的文件系統,則不必創建新分區:您可以使用 PV 中未分配的空間在現有捲組中創建另一個 LVM 邏輯卷。但是如果你特別需要一個新的分區,那麼你必須按照你最初的計劃去做。
GParted是一個 GUI 工具,可以為您完成整個 PV + 分區大小調整操作。您很可能會在您的發行版的軟體包集合中找到它。
但是,如果您由於某種原因不能或不想使用它,請繼續閱讀…
減少其中包含未分配空間的 LVM 物理卷非常簡單。例如,要將 /dev/sda1 的大小減小到 40 GiB:
# pvresize --setphysicalvolumesize 40G /dev/sda1
該命令是安全的,因為如果它要切除的 PV 部分包含已分配的範圍,它將拒絕執行任何操作。
但這只是第一步。第二步是減小分區本身的大小。
為了安全起見,建議您最初收縮 PV 比實際收縮分區的計劃要多一點,以便在收縮分區後您可以顯式擴展 PV 以覆蓋分區的全部大小。如果擴展操作失敗,您將立即知道調整分區大小時出現問題,並且不會留下隱藏的錯誤來讓您或其他人陷入困境。
您可以使用普通的 Linux
fdisk
命令縮小分區,但您必須記住以下幾點:
- 用於
fdisk
調整分區大小時,請確保將其設置為首先顯示所有分區大小和扇區中的起始位置。在 Linux 的歷史中fdisk
,它的行為在這裡有所不同:現代版本預設執行此操作,舊版本可能需要一個-u
or-u=sectors
選項來執行此操作。- 調整現有分區的大小時,不能移動分區的起點。(如果移動起點,將不再是簡單的resize操作,而是更複雜的分區移動操作。)
使用 時,僅當您使用該命令
fdisk
時,所有更改才會寫入磁碟。w
所以我建議這樣進行:
- 用於
sfdisk -d /dev/sda > /safe/location/partition_table_backup.dump
備份現有的分區表。fdisk /dev/sda
以互動模式開始- 使用該
p
命令查看目前分區表並驗證“開始”和“結束”值是否顯示為扇區。記下“開始”值。- 使用該
d
命令刪除sda1
.- 使用該
n
命令重新創建sda1
所需大小的主分區條目 1,注意準確指定第一個扇區的位置(即與p
命令的“開始”值中顯示的數字相同)。- 使用
t
命令將分區1的類型設置為“Linux LVM”。- 仔細檢查你的工作
- 使用
w
命令寫入更新的分區表並退出fdisk
。注意
fdisk
最後顯示的消息。如果它說“核心仍然使用舊表”,則說明有東西阻止了線上分區表更新。您可以嘗試partprobe /dev/sda
告訴核心重新讀取分區表(使用比某些舊版本使用的新介面fdisk
,因此它可能會有所幫助並且肯定不會受到傷害),然後查看cat /proc/partitions
分區現在是否已被核心辨識在預期的大小。如果分區調整大小成功,您現在可以執行
pvresize /dev/sda1
. 如果您按照我的建議最初將 PV 的大小調整為比所需的分區新大小小一點,它現在應該成功地擴展 PV 以自動完全覆蓋調整大小的分區。如果此命令報告錯誤,您可能在指定新大小時出錯,應該使用sfdisk /dev/sda < /safe/location/partition_table_backup.dump
它來將分區表恢復到最初的狀態,然後重試。(在非常舊的系統上,您實際上可能必須在執行之前停用 VG,
partprobe
甚至重新啟動以允許系統重新讀取更新的分區表。)調整大小操作完成後,您現在可以
fdisk
再次使用來創建所需的第二個分區。是的,您也可以在調整分區大小時一起執行此操作,但一次只執行一件事更安全,並確保您可以在需要時輕鬆回滾更改。