踩坑經(jīng)驗(yàn)+1,給用戶解決磁盤擴(kuò)容問(wèn)題,差點(diǎn)翻車!
昨天接了非常簡(jiǎn)單但又有坑的私活。一個(gè)粉絲用戶找到我,讓我?guī)吞幚硪粋€(gè)磁盤擴(kuò)容的問(wèn)題,因?yàn)檫@種問(wèn)題比較簡(jiǎn)單,我就爽快答應(yīng)了。
他們操作系統(tǒng)是CentOS7,/data盤目前已經(jīng)100%了,上面跑是MySQL和PG數(shù)據(jù)庫(kù)都掛了,業(yè)務(wù)也連不上。但他們這塊盤有2.5T擴(kuò)容,只用了1T,運(yùn)維剛好走了,需要協(xié)助擴(kuò)容。

因?yàn)槲沂沁h(yuǎn)程協(xié)助處理的,首先讓他先在云平臺(tái)給這臺(tái)服務(wù)器打個(gè)快照,備份一下重要的數(shù)據(jù),這很重要。
作為運(yùn)維工程師,我早已司空見(jiàn)慣。登錄服務(wù)器,確認(rèn)磁盤情況:
df -h /data輸出顯示:
Filesystem Size Used Avail Use% Mounted on
/dev/vdb1 985G 935G 0 100% /data確實(shí)已經(jīng)100%了。這是一塊2.5TB的云磁盤,按理說(shuō)應(yīng)該很充裕才對(duì)。
1. 第一次擴(kuò)容踩坑
我熟練地執(zhí)行了標(biāo)準(zhǔn)的擴(kuò)容命令:
growpart /dev/vdb 1然而,等待我的不是成功的提示,而是一串報(bào)錯(cuò)信息:

正常執(zhí)行這條命令后,/dev/vdb的所有空間擴(kuò)容到/dev/vdb1。但是出現(xiàn)了報(bào)錯(cuò),好像是分區(qū)表沖突了,還提示有數(shù)據(jù)丟失風(fēng)險(xiǎn),突然認(rèn)真了起來(lái)。
2. 深入排查
接下來(lái),我開始仔細(xì)排查。首先查看磁盤的詳細(xì)信息:
fdisk -l /dev/vdb輸出結(jié)果令人驚訝:

再用parted確認(rèn):
parted /dev/vdb print
問(wèn)題有三個(gè)方面:
- 磁盤實(shí)際大小2.5T,但只劃分了1T的分區(qū)
- 分區(qū)表是GPT類型(正確,因?yàn)榇笥?TB)
- 文件系統(tǒng)只格式化了985G,沒(méi)有占滿整個(gè)1T分區(qū)
但是為什么我執(zhí)行g(shù)rowpart /dev/vdb 1會(huì)失敗呢?我問(wèn)那個(gè)人好像也不太清楚,我總結(jié)了可能的原因:
- 可能之前有人嘗試在大于2TB的磁盤上使用MBR分區(qū)表
- 后來(lái)發(fā)現(xiàn)無(wú)法使用全部空間,又創(chuàng)建了GPT分區(qū)表
- 但沒(méi)有正確清理舊的MBR信息,導(dǎo)致兩者并存,變成了一個(gè)"混合式"的分區(qū)表,既有GPT信息,又有非保護(hù)性的MBR信息。
3. 解決方案
由于是ext4文件系統(tǒng),他不支持在線擴(kuò)容空間,既然growpart已經(jīng)不可行,我就換成parted來(lái)處理,但需要卸載分區(qū)才能擴(kuò)容,經(jīng)用戶同意后開始恢復(fù)操作。
(1) 卸載分區(qū)
首先需要卸載分區(qū):
umount /data但系統(tǒng)提示:
umount: /data: target is busy.這意味著有進(jìn)程正在使用這個(gè)目錄。使用以下命令找出罪魁禍?zhǔn)祝?/p>
lsof /data看到很多MySQL文件還占用這個(gè)目錄,應(yīng)該是異常中斷,有些進(jìn)程沒(méi)有完全退出,我就用ps -ef |grep mysql命令找出MySQL進(jìn)程,然后用kill -9 PID殺掉后,成功卸載/data分區(qū)
(2) 安全檢查與擴(kuò)容
卸載成功后,按順序執(zhí)行:
# 文件系統(tǒng)檢查(強(qiáng)烈推薦?。?e2fsck -f /dev/vdb1
# 擴(kuò)容分區(qū)至磁盤末尾
parted /dev/vdb resizepart 1 100%
# 刷新系統(tǒng)分區(qū)表信息
partprobe /dev/vdb
# 4. 擴(kuò)容文件系統(tǒng)
resize2fs /dev/vdb1
# 5. 重新掛載(這步如果系統(tǒng)啟動(dòng)了自動(dòng)掛載,可不執(zhí)行就自動(dòng)掛載
mount /dev/vdb1 /data(3) 驗(yàn)證成果
最后檢查擴(kuò)容結(jié)果:
df -h /datalsblk /dev/vdb
整個(gè)擴(kuò)容過(guò)程就完成了。
4. 技術(shù)要點(diǎn)總結(jié)和建議
- MBR vs GPT:大于2TB的磁盤必須使用GPT分區(qū)表,分區(qū)前做好劃分
- 分區(qū) vs 文件系統(tǒng):分區(qū)大小和文件系統(tǒng)大小是兩回事,我平時(shí)不喜歡將一塊數(shù)據(jù)盤再進(jìn)行分區(qū),直接格式化來(lái)用,容易擴(kuò)容
- 操作前先診斷:知其然更要知其所以然,我開始就犯了個(gè)小錯(cuò)誤,上來(lái)就擴(kuò)容,沒(méi)有弄清楚情況。
- 讀懂錯(cuò)誤信息:錯(cuò)誤信息往往包含了解決方案的線索
- 備份是最后的防線:我一上來(lái)就讓用戶打個(gè)快照和備份,必要時(shí)進(jìn)行回滾。
最后想說(shuō)的是:賺錢不易,操作需謹(jǐn)慎,別把自己搭進(jìn)去了!
































