Lvm

如何縮小物理體積?

  • April 27, 2020

我在一個分區上有一個物理卷,它延伸到整個磁碟,比如 /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 以覆蓋分區的全部大小。如果擴展操作失敗,您將立即知道調整分區大小時出現問題,並且不會留下隱藏的錯誤來讓您或其他人陷入困境。

您可以使用普通的 Linuxfdisk命令縮小分區,但您必須記住以下幾點:

  • 用於fdisk調整分區大小時,請確保將其設置為首先顯示所有分區大小和扇區中的起始位置。在 Linux 的歷史中fdisk,它的行為在這裡有所不同:現代版本預設執行此操作,舊版本可能需要一個-uor-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再次使用來創建所需的第二個分區。是的,您也可以在調整分區大小時一起執行此操作,但一次只執行一件事更安全,並確保您可以在需要時輕鬆回滾更改。

引用自:https://unix.stackexchange.com/questions/479545