調整 GPT 驅動器上 LVM 分區的大小
我們有一個 Centos 伺服器作為 / 路徑已滿的虛擬機。所以我們想將分區的大小從 50GB 調整為 70GB。
我按照本指南 https://www.thomas-krenn.com/de/wiki/LVM_vergr%C3%B6%C3%9Fern
所以第一步是增加 VM 首選項的大小。
在此之後,我使用 cfdisk 創建了一個新分區。
前:
sda1 NC Primary GPT 53687.10 * Pri/Log Free Space 21474.84 *
寫完之後:
sda1 NC Primary GPT 53687.10 * sda2 Primary Linux 21474.84 *
正如指南所說,我首先沒有重新啟動並使用命令 partprobe。
partprobe Error: The backup GPT table is not at the end of the disk, as it should be. This might mean that another operating system believes the disk is smaller. Fix, by moving the backup to the end (and removing the old backup)? Warning: Not all of the space available to /dev/sda appears to be used, you can fix the GPT to use all of the space (an extra 41943040 blocks) or continue with the current setting? Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy). As a result, it may not reflect all of your changes until after reboot.
收到此消息後,我不確定並最終重新啟動。
然後我嘗試將新分區初始化為 PV
[root]# pvs PV VG Fmt Attr PSize PFree /dev/sda3 vg_atcrushftp lvm2 a-- 49.31g 10.00g
並收到此錯誤消息:
[root]# pvcreate /dev/sda2 Can't open /dev/sda2 exclusively. Mounted filesystem?
現在我不確定並做了一個 df 來尋找它
[root]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_atcrushftp-lv_root 35G 8.4G 25G 26% / tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/sda2 477M 121M 331M 27% /boot /dev/sda1 200M 260K 200M 1% /boot/efi //192.168.0.53/pictures [root]# df -T Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/mapper/vg_atcrushftp-lv_root ext4 36380264 8720856 25804740 26% / tmpfs tmpfs 1962068 0 1962068 0% /dev/shm /dev/sda2 ext4 487652 123566 338486 27% /boot /dev/sda1 vfat 204580 260 204320 1% /boot/efi
掛載命令顯示了這一點
[root]# mount /dev/mapper/vg_atcrushftp-lv_root on / type ext4 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0") /dev/sda2 on /boot type ext4 (rw) /dev/sda1 on /boot/efi type vfat (rw,umask=0077,shortname=winnt) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
看起來我不能使用創建的分區,因為它是 /boot。這是否意味著我破壞了 /boot 上的資訊?在開始之前,我創建了一個快照。所以我可以恢復舊的狀態。
接下來我該怎麼辦?我想在不失去數據的情況下調整分區大小。
調整 GPT 驅動器上 LVM 分區的大小
命令:
pvs Shows physical volume lvs Shows logical volume vgs Shows volume groups vgdisplay Shows volume groups including mount points lsblk Shows block hierarchy (plate, partition, LVM)
必要步驟的基本流程基本上是:
- 調整 LVM 分區大小以使用新空間。
- 調整 LVM 分區中物理卷的大小以使用新調整大小的空間。
- 將捲組內的邏輯卷調整為新的大小。
- 調整每個邏輯卷中文件系統的大小以匹配它們的大小。
警告:請先備份
重新啟動進入恢復模式
或重新啟動到 Live CD/USB 環境,因為無法在分區聯機時調整分區大小。
(由於這是一個 GPT 分區磁碟,我們必須使用 Parted 工具而不是 FDisk。)
在您的恢復模式或實時環境中,如果您還沒有終端,請打開一個終端並啟動 Parted 以檢查您的陣列,方法是輸入:
$ sudo parted /dev/sda GNU Parted 2.3 Using /dev/sda Welcome to GNU Parted! Type 'help' to view a list of commands.
現在我們有一個“(parted)”提示。首先,我們需要將我們使用的測量單位切換到扇區。通過發出以下命令來做到這一點:
(parted) u s
現在使用“print”命令列出現有分區。您將看到類似於以下內容的內容:
(parted) print Model: INTEL SRCSATAWB (scsi) Disk /dev/sda: 19521474560s Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 1 2048s 1953791s 1951744s ext4 Boot boot 2 (red)1953792s(/red) 19521474526s 19519520735s MYSERVER_HDD lvm
注意:您可能會看到一條警告消息,告知 GPT 表不在磁碟末尾,說磁碟大小小於系統預期的大小(因為您調整了陣列的大小,記得嗎?)。它會詢問您是否要解決此問題。輸入“F”並輸入。然後可能會警告您核心尚未意識到正在發生的更改。通過輸入“I”並按 Enter 鍵以忽略來響應此問題。在使用 Parted 時,您可能會多次收到後一條消息的提示。每次都回答“忽略”。在這種環境下,目前核心不需要知道這些變化,因為無論如何我們都會在它結束時重新啟動。
記下上面以紅色突出顯示的項目,即設備的總扇區(代表新擴展陣列的總大小)和第二個分區的起始扇區。請仔細檢查您的數字並確保它們是正確的。這裡的任何錯誤都可能破壞您的數據。
現在我們將調整第二個分區的大小以使用數組中所有新創建的空間。不幸的是,GPT 無法調整大小。相反,您必須刪除分區並重新創建它。**別擔心,聽起來很可怕,這個過程不會改變驅動器上的任何數據。**它僅刪除與驅動器上分區的開始和結束相關的幾何數據。使用以下命令刪除第二個分區:
(parted) rm 2
現在讓我們創建一個新分區來替換它。輸入以下內容:
(parted) mkpart
您將被要求輸入分區的名稱。給它與之前相同的名稱,或者如果您願意,可以指定一個新名稱:
Partition name? []? MYSERVER_HDD
然後將詢問您有關文件系統類型的資訊。您不能在此處指定 LVM,因此只需按 Enter 鍵接受“ext2”——我們稍後會更改它:
File system type? [ext2]?
然後將要求您輸入起始扇區。指定您之前記錄的第二個分區的開始值(不要在末尾寫字母“s”):
Start? 1953792
然後您將被要求提供末端扇區。指定您之前記錄的驅動器總大小減去一的值。如果您指定實際值,您將收到一條錯誤消息,指出該值在“設備之外”,這就是您指定一個剛好在該限制範圍內的值的原因。
End? 19521474559
然後您將被告知系統實際上無法創建一個分區到該位置(因為磁碟上有另一個分區佔用空間),因此系統將提供下一個最接近的值,該值恰好是剩餘的最大空間數組。只需對“是”回答“Y”即可。
Warning: You requested a partition from 1953792s to 19521474559s. The closest location we can manage is 1953792s to 19521165533s. Is this still acceptable to you? Yes/No?
現在我們需要將分區類型更改為 LVM,如下所示:
(parted) toggle Partition number? 2 Flag to Invert? lvm
我們現在已經完成了我們的分區,所以用 quit 命令退出:
(parted) quit
重啟你的伺服器
並正常啟動。如果您使用 parted 或 fdisk 檢查您的驅動器,它現在應該顯示總分區大小包括陣列中新添加的空間,但尚未使用它。現在是時候通過使用以下命令調整物理卷的大小來告訴 LVM 使用新空間了:
$ sudo pvresize /dev/sda2
- 完成後,您現在可以通過發出以下命令檢查 LVM 物理組中的新空閒空間(顯示為空閒範圍):
$ sudo pvdisplay
現在我們可以開始將這個新獲得的空閒空間分配給我們的 LVM 邏輯卷。首先,讓我們獲取所有定義的邏輯卷的列表:
$ sudo lvdisplay
記下要添加空間的每個邏輯卷的“LV 名稱”。
現在讓我們調整邏輯卷的大小。有兩種方法可以做到這一點。一種方法是指定一個絕對值來定義該邏輯卷的新大小,或者指定一個將添加到它的現有大小的值。在第一個範例中,我將更改名為 /dev/myserver/mylogicalvolume 的邏輯卷的大小,使其絕對大小為 20 GB:
$ sudo lvextend -L20G /dev/myserver/mylogicalvolume
…這將使 /dev/myserver/mylogicalvolume 邏輯卷的大小達到 20 GB,而不管其以前的大小。它不會添加到現有大小。或者,使用以下命令將空間添加到現有大小:
$ sudo lvextend -L+20G /dev/myserver/mylogicalvolume
(注意 -L 和 20G 之間的加號)……這將為 /dev/myserver/mylogicalvolume 邏輯卷增加 20 GB 的空間。如果之前的大小是 10 GB,那麼現在將是 30 GB。或者,如果您希望將所有剩餘的可用空間分配給邏輯卷,請發出以下命令:
$ sudo lvextend -l +100%FREE /dev/myserver/mylogicalvolume
(注意參數是小寫的 L 而不是大寫的 L)對您正在擴展的所有邏輯卷重複此操作。還有其他分配空間的方法,但以上是最常用的方法。有關更多資訊,請參見 lvextend 命令的手冊頁。
您可以通過發出以下命令來確認每個邏輯卷的新大小:
$ sudo lvdisplay
我們快到了!現在剩下要做的就是調整邏輯卷中包含的文件系統的大小以使用新分配的空間。同樣,使用您之前記錄的 LV 名稱,為您修改的每個邏輯卷指定以下命令:
$ sudo resize2fs /dev/myserver/mylogicalvolume
在所有邏輯卷上擴展文件系統後,您可以通過發出以下命令檢查每個文件系統上的可用空間:
$ df -h
就是這樣!您已成功擴展 GPT 分區陣列上的 LVM 分區!拍拍自己的背。你完成了。
原帖:
經過長時間的搜尋,本指南幫助了我: http ://www.serenux.com/2013/11/howto-resize-an-lvm-partition-on-a-gpt-drive-after-expanding-the-underlying-array /
(我盡我所能將其格式化。)