Linux LVM管理 -- 擴大與縮小LV空間
LVM是Linux系統中內定的磁碟管理方式,只要在安裝系統時沒有特別設定,系統自動會使用LVM將磁碟切割為兩部份,一部份開機磁區約100MB,剩下部分為全權交由LVM管理,更多相關LVM說明,可參考鳥哥網站:http://linux.vbird.org/linux_basic/0420quota.php#lvm,這裡僅列出towns實做的結果。
towns擴大的原因為,虛擬主機的空間擴大(請參考VirtualBox 及VMware討論),也同時說明如何縮小LV空間
擴大LV
1. 確定該磁區是否有空間可以放大
第一個框表示目前該硬碟的總量、第二個框表示該硬碟的總磁柱數、第三個框說明第二磁區的最後磁柱、第四個框說明目前LV的實際空間大小,由這可得知,該硬碟仍有未使用的空間
2. 將未使用的空間建立第三個partition(hda3)
使用fdisk指令建立hda3,並設定hda3的ID為8e(指定給LVM管理)
建立過程系統會告知裝置正在忙碌中,重新啟動後生效
註:在使用fdisk建立hda3後,如果沒有重新啟動系統,在dev/是看不到hda3的,但使用fdisk -l 則可以看到
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
空間放大了,不過有跳出一個警告訊息
3. fdisk /dev/sda
p
這裡與圖2類似,不過,注意兩個紅框 sectors 不同
註:必需要確認是最後一個磁區才能進行向後延伸空間(towns 只有兩個磁區,通常第二個磁區就是最後一個),如果不是最後一個,就必需將要擴大的磁區移動到最後了,這個就是另一段技術了
d、2

刪除第二個磁區
n 2 enter enter n w
建立新磁區(主要為修改 Last sector 到最後)
這裡有出現一個詢問,是否刪除 xfs 的簽章,towns 是沒刪除的
最後寫入分區表並完成磁碟同步
4. fdisk -l /dev/sda

再檢查一次磁區,sda2 已經變為 35 GB 了
5. df -h

檢查實際空間,仍為 30 GB
6. xfs_growfs /dev/sda2

使用 xfs_growfs 指令後,再檢查實際空間,已經成功擴大了
--------------------------------------------------------------------------
在很多時候,擴大虛擬硬碟空間時,是無法重開系統的(windows 可以做到,Linux 豈有不行之理),這時該如何處理?
重開與不重開的差別在於 Guest 系統是否知道虛擬硬碟空間已經擴大,所以不重開擴大就需進行手動掃描虛擬硬碟
1. 動態的將虛擬硬碟擴大
手動將虛擬硬碟擴大到 40GB
這時 Guest 系統還不知道硬碟變大了,只有 35GB
2. 確認磁碟代碼並通知系統重掃
先確認目前磁碟代號
通知系統重掃。在這裡 towns 重掃了兩個 scsi 裝置,主要是因為不確定哪一個才是硬碟裝置,所以將 scsi 裝置全都重掃,不過這一次的掃描只需要重掃 2:0:0:0 這個裝置
嗯,虛擬硬碟擴大到 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)與進階系統管理
https://linoxide.com/linux-how-to/add-new-disk-centos-7-without-rebooting/







留言
張貼留言