Linux LVM管理 -- 擴大與縮小LV空間

        LVM是Linux系統中內定的磁碟管理方式,只要在安裝系統時沒有特別設定,系統自動會使用LVM將磁碟切割為兩部份,一部份開機磁區約100MB,剩下部分為全權交由LVM管理,更多相關LVM說明,可參考鳥哥網站:http://linux.vbird.org/linux_basic/0420quota.php#lvm,這裡僅列出towns實做的結果。

        towns擴大的原因為,虛擬主機的空間擴大(請參考VirtualBoxVMware討論),也同時說明如何縮小LV空間

擴大LV

1. 確定該磁區是否有空間可以放大

第一個框表示目前該硬碟的總量、第二個框表示該硬碟的總磁柱數、第三個框說明第二磁區的最後磁柱、第四個框說明目前LV的實際空間大小,由這可得知,該硬碟仍有未使用的空間

2. 將未使用的空間建立第三個partition(hda3)
使用fdisk指令建立hda3,並設定hda3的ID為8e(指定給LVM管理)

建立過程系統會告知裝置正在忙碌中,重新啟動後生效
註:在使用fdisk建立hda3後,如果沒有重新啟動系統,在dev/是看不到hda3的,但使用fdisk -l 則可以看到


OK,hda3已經生效了

3. 新增PV
使用pvcreate指令新增

新增前與新增後,下面多了/dev/hda3

4. 加入VolGroup00中
使用vgextend,將hda3加入VolGroup00

圖中PV由1變成2、而VSize及VFree也加大了,必需有VFree

5. 擴大LV空間
使用lvextend指令,將hda3加入VolGroup00-LogVol00中

當沒有下參數加入後,LV的空間就由9.38G變成48.19GB,直接延伸到最大值,但看第三個框,實際可用的空間還是只有9.1G
註:如何找出 mapper 的路徑,可以使用 df 指令,就可以看到完整路徑了

使用resize2fs,將LV的實際空間擴大到最大值

在執行 resize2fs 時,如果沒有指定容量大小,會將容量放到最大值,而執行時間會因擴大的量而不同。

到此,擴大 LV 空間已經完成設定

原本一開始 towns 想要直接擴大 hda2 的磁砫到上限,但參考文件、詢問高手後,似乎無法直接擴大,目前仍暫用此方式加大容量

參考資料:
范老師上課資料
yst大的文章 -- LVM 調整 HDD空間。文章的內容比towns寫的還完整,包含fdisk使用、LVM指令
http://www.yst1979.com/centos/usr-lvm-to-adjust-hdd-space/

補充1:這樣的做法,在Centos7中,會發生問題(最後一個步驟resize2fs),CentOS7 Partition預設使用XFS的關係,而resize2fs只能管理ext2、ext3及ext4
錯誤訊息:
Bad magic number is super-block while trying to open /dev/centos/root
Couldn't find valid filesystem superblock

補充2:安xfs工具來擴大
1. 安裝 xfsprogs 套件
2. 使用指令 xfs_growfs /dev/mapper/centos-root

補充3:如何看目前的 Partition 所使用的格式呢?
df -T <== 這時就會顯示目前 Partition 的格式

參考資料:
stackoverflow討論 -- Tony大的回應
http://stackoverflow.com/questions/26305376/resize2fs-bad-magic-number-in-super-block-while-trying-to-open

stackoverflow討論 -- Michel大的回應
http://stackoverflow.com/questions/13362910/trying-to-resize2fs-eb-volume-fails


縮小LV

在官方文件得知,要縮小的LV必需先卸離磁區(umount),但towns的 / 是一整個磁區,就算用了光碟開機,/ 還是被掛上的,如果未使用resiz2fs,就強制縮小LV空間並將PV卸離,系統會無法開機,目前正在找尋方法及測試中

-------------------------------------------------------------------------------------------------

的確可以縮小,但有相當大的風險,主要是因為PE分配的問題。towns可以縮小,主要是因為未使用,所以移除後正常

移除LV
pvdisplay /dev/sda3 ==> 先確認sda3有多少個 PE。看Total PE 數
lvdisplay /dev/centos/root ==> 先確認 Sgments 是否為 2
lvresize -l -3659 /dev/mapper/centos-root ==> 將 sda3 的所有 PE 移出
lvdisplay /dev/centos/root ==> 確認 Sgments 是否為 1
註:直接使用 pvdisplay 可以看到就以看到每一個 PV,使用 lvdisplay 也可以看到每一個 lv,在不知道磁碟資訊時,直接使用就可以看到了

移除VG
vgreduce centos /dev/sda3 <== 將 /dev/sda3 這個 PV 移出 centos 這個群組

移除PV
pvremove /dev/sda3 <== 將已加入的sda3,移除

註:如果發生了無法開機的情形,試著到 RAM Disk(參考Cent OS 7文章),並使用 xfs_repair 修復 FS


補充資料:這一段文字是由溪頭大文章中截取,很重要的概念

PE(Physical Extend;實體延伸區塊)
PE為LVM的儲存單位。一個VG最多只能含有65534個PE,不過每個PE的大小可以由使用者決定,一個PE的大小可以數個MB、數個GB或數個TB大。因此可知,一個VG的最大容量,跟PE的大小有關係。

PV會記載PV中的每個PE隸屬那個LV。要記得,LV是由PE組成,不是由PV組成。一個PV中的PE可能分散隸屬於多個LV。例如,假設有一個PV含有50個PE,則其中20個PE可能屬於第一個LV,其中20個PE可能屬於第二個LV,剩下的10個PE可能屬於第三個LV。

在一開始時,PE是由vgcreate指令規畫出來,vgcreate指令依指定的PE大小在PV上劃分成一到多個PE。例如,假設有一個PV容量為1GB,PE為4MB,則此PV可劃分成256個PE。
每個PE可以視為一個獨立的個體,就算是屬於同一個PV的PE,它們不一定會隸屬於同一個LV。

註1:PE的觀念很重要,如果不清楚的話,可能就無法正確使用「pvmove」這個指令。
註2:如果依PE的概念,LVM 將不適合縮小呢!


擴大磁碟空間(不透過 LVM)

在寫這一篇文章時,towns 主要是想 Linux 是否能與 windows 相同,不透過 LVM 直接將空間擴大,經過 Jamce 大大的說明,是可以辦到的哦!

1. 擴大虛擬硬碟容量
一般來說這是使用虛擬化才能做的,如果是實體硬碟,除非在切割時沒有將空間用盡,否則實體硬碟應該不會有多餘的空間,如果要加硬碟,就只能使用 LVM 方式
 1. 使用 ESXi,可以直接於 ESXi 介面 虛擬機器->編輯 直接擴大磁碟空間(使用 virtualbox 好像不能於開機時擴大,需關閉 Guest 後才能擴大)
補充:當使用了快照功能 ESXi 的磁碟檔將無法在 Guest 系統啟動時使用

2. 擴大 Guest 空間
 1. 重開 Guest
 2. fdisk -l /dev/sda
1.jpg - vdisk_extend
 空間放大了,不過有跳出一個警告訊息
 3. fdisk /dev/sda
 p
2.jpg - vdisk_extend
 這裡與圖2類似,不過,注意兩個紅框 sectors 不同
 註:必需要確認是最後一個磁區才能進行向後延伸空間(towns 只有兩個磁區,通常第二個磁區就是最後一個),如果不是最後一個,就必需將要擴大的磁區移動到最後了,這個就是另一段技術了
 d、2
 3.jpg - vdisk_extend
 刪除第二個磁區
 n 2 enter enter n w
 建立新磁區(主要為修改 Last sector 到最後)4.jpg - vdisk_extend
 這裡有出現一個詢問,是否刪除 xfs 的簽章,towns 是沒刪除的
 最後寫入分區表並完成磁碟同步

 4. fdisk -l /dev/sda
 5.jpg - vdisk_extend
 再檢查一次磁區,sda2 已經變為 35 GB 了

 5. df -h
 5_1.JPG - vdisk_extend
 檢查實際空間,仍為 30 GB

 6. xfs_growfs /dev/sda2
 6.jpg - vdisk_extend
 使用 xfs_growfs 指令後,再檢查實際空間,已經成功擴大了
--------------------------------------------------------------------------

在很多時候,擴大虛擬硬碟空間時,是無法重開系統的(windows 可以做到,Linux 豈有不行之理),這時該如何處理?
重開與不重開的差別在於 Guest 系統是否知道虛擬硬碟空間已經擴大,所以不重開擴大就需進行手動掃描虛擬硬碟

1. 動態的將虛擬硬碟擴大
7.jpg - vdisk_extend
手動將虛擬硬碟擴大到 40GB
8.jpg - vdisk_extend
這時 Guest 系統還不知道硬碟變大了,只有 35GB

2. 確認磁碟代碼並通知系統重掃
9.jpg - vdisk_extend
先確認目前磁碟代號
10.jpg - vdisk_extend
通知系統重掃。在這裡 towns 重掃了兩個 scsi 裝置,主要是因為不確定哪一個才是硬碟裝置,所以將 scsi 裝置全都重掃,不過這一次的掃描只需要重掃 2:0:0:0 這個裝置
11.jpg - vdisk_extend
嗯,虛擬硬碟擴大到 40GB 了

接來的動作與上面的動作就一模一樣,這裡就不多說明了。
補充
1. fdisk 主要的工作是在建立磁區使用的範圍,所以才能透過這樣的方式擴大容量
2. 這個方式是通用於大多數的格式,目前 EXT4、XFS、NTFS 都可以使用,而其差別是在於實際使用量的延伸使用的指令不同
EXT4 使用 resize2fs
XFS 使用 xfs_growfs
NTFS !?用滑鼠吧!(diskpart 應該可以做到)
3. 可不可以縮小呢!應該可以,但是需要透過系統先計算及整理資料最末端位置,才能像 windows 一樣進行空間壓縮

參考資料:James 技術指導


 

其他資料:
Dan Nanni大的文章 -- 使用 System Storage Manager(ssm)管理LVM
http://xmodulo.com/manage-lvm-volumes-centos-rhel-7-system-storage-manager.html

溪頭大的文章 -- LVM 簡介及指令介紹,這裡有提及 PE 的概念
http://justforyou046.blogspot.tw/2012/05/lvm.html

reahat 官方文件 -- 非常詳細、完整,而且是中文的
https://access.redhat.com/documentation/zh-TW/Red_Hat_Enterprise_Linux/6/html/Logical_Volume_Manager_Administration/LVM_components.html

鳥哥
第七章 Linux 磁碟與檔案系統管理
第十四章 磁碟配額(Quota)與進階系統管理

某大大的文章 -- 不關機重新載入硬碟,這個在 VM 中加入新硬碟非常有用
https://linoxide.com/linux-how-to/add-new-disk-centos-7-without-rebooting/

留言

這個網誌中的熱門文章

zimbra 安裝、管理、設定

Fortigate 100D -- 管理、設定

IT 隨手記6