Linux 磁盤擴容實戰案例:從問題發現到完美解決

Linux 磁盤擴容實戰案例:從問題發現到完美解決

案例背景

某企業服務器根目錄 (/) 空間不足,運維人員通過 df -h 發現 /dev/vda1 分區已 100% 占滿(99G 已用)。檢查發現物理磁盤 /dev/vda 已擴展至 200G,但分區和文件系統未完全擴展,導致 df -hlsblk 輸出不一致。本文檔記錄從問題排查、觸發、發現到成功擴容的詳細過程,包括具體命令、輸入輸出及問題原因分析。

初始狀態檢查

1. 磁盤空間查看

運行以下命令檢查磁盤使用情況:

df -h

初始輸出:

文件系統        容量  已用  可用 已用% 掛載點
devtmpfs        7.5G     0  7.5G    0% /dev
tmpfs           7.5G     0  7.5G    0% /dev/shm
tmpfs           7.5G  267M  7.2G    4% /run
tmpfs           7.5G     0  7.5G    0% /sys/fs/cgroup
/dev/vda1        99G   99G     0  100% /

分析:根分區 /dev/vda1 已滿(99G 已用,0 可用),需擴容。

2. 檢查磁盤和分區情況

運行以下命令查看磁盤和分區信息:

lsblk
fdisk -l /dev/vda

輸出:

[root@master ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda    253:0    0  200G  0 disk 
└─vda1 253:1    0  100G  0 part /[root@master ~]# fdisk -l /dev/vda
磁盤 /dev/vda:214.7 GB, 214748364800 字節,419430400 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0x000c4c7a設備 Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048   209715166   104856559+  83  Linux

分析

  • 磁盤 /dev/vda 大小:200GB(214.7 GB)。
  • 分區 /dev/vda1 大小:100GB,掛載點為 /
  • 分區表類型:MBR(dos)。
  • 起始扇區:2048(擴容時必須保持一致)。
  • 分區未使用磁盤全部空間,需擴展分區和文件系統。

3. 檢查文件系統類型

運行以下命令確認文件系統類型:

df -Th /

輸出:

文件系統       類型     1K-塊      已用  可用 已用% 掛載點
/dev/vda1      ext4 103080204 103063820     0  100% /

分析:文件系統為 ext4,后續擴展將使用 resize2fs

問題觸發:分區擴展未同步文件系統

觸發步驟

為解決磁盤空間不足問題,運維人員嘗試擴展 /dev/vda1 分區以使用 /dev/vda 的全部 200G 空間。以下操作觸發了 df -hlsblk 不一致的問題:

1. 擴展底層磁盤
  • 操作:在云服務器控制臺(如阿里云、AWS)或虛擬機管理器(如 KVM、VMware)將 /dev/vda 從 100G 擴展到 200G。

  • 命令:使系統識別新磁盤大小:

    echo "- - -" > /sys/class/scsi_device/<device>/device/rescan
    

    <device> 替換為實際設備,例如 2:0:0:0,可通過 ls /sys/class/scsi_device/ 查看。)

  • 驗證

    lsblk
    

    輸出:

    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    vda    253:0    0  200G  0 disk 
    └─vda1 253:1    0  100G  0 part /
    

    分析:磁盤 /dev/vda 已擴展到 200G,但分區 /dev/vda1 仍為 100G。

2. 擴展分區

使用 fdisk 擴展 /dev/vda1 分區:

fdisk /dev/vda

交互過程:

歡迎使用 fdisk (util-linux 2.23.2)。
更改將停留在內存中,直到您決定寫入磁盤。
使用寫入命令前請謹慎。命令(輸入 m 獲取幫助): d
選定分區 1命令(輸入 m 獲取幫助): n
分區類型p   主分區 (0個主分區,0個擴展分區,4空閑)e   擴展分區
選擇 (默認 p): p
分區號 (1-4, 默認 1): 1
第一個扇區 (2048-419430399, 默認 2048): 2048
Last sector, +sectors or +size{K,M,G,T,P} (2048-419430399, 默認 419430399): [直接回車]命令(輸入 m 獲取幫助): p
磁盤 /dev/vda:214.7 GB, 214748364800 字節,419430400 個扇區
...設備 Boot      Start         End      Blocks   Id  System
/dev/vda1            2048   419430399   209714176   83  Linux命令(輸入 m 獲取幫助): w
分區表已調整。
正在同步磁盤。
3. 使分區表生效

運行以下命令通知內核更新分區表:

partprobe /dev/vda

若提示分區正在使用,則重啟:

reboot
4. 驗證分區擴展

檢查分區是否擴展:

lsblk

輸出:

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda    253:0    0  201G  0 disk 
└─vda1 253:1    0  201G  0 part /

分析:分區 /dev/vda1 已擴展到 201G,但未擴展文件系統。

問題原因

  • 分區擴展完成:通過 fdisk 擴展了 /dev/vda1 分區,lsblk 顯示新分區大小(201G)。
  • 文件系統未擴展:文件系統仍基于舊分區大小(99G),未同步到新分區大小,導致 df -h 顯示容量未變化。
  • 機制差異lsblk 顯示分區大小(底層塊設備),而 df -h 顯示文件系統大小,兩者未同步是常見問題。

問題發現:df -hlsblk 不一致

在完成分區擴展后,運行以下命令發現問題:

df -h
lsblk

輸出:

[root@master ~]# df -h
文件系統        容量  已用  可用 已用% 掛載點
devtmpfs        7.5G     0  7.5G    0% /dev
tmpfs           7.5G     0  7.5G    0% /dev/shm
tmpfs           7.5G  5.3M  7.5G    1% /run
tmpfs           7.5G     0  7.5G    0% /sys/fs/cgroup
/dev/vda1        99G   78G   17G   83% /[root@master ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda    253:0    0  201G  0 disk 
└─vda1 253:1    0  201G  0 part /

問題

  • lsblk 顯示 /dev/vda1 為 201G,說明分區擴展成功。
  • df -h 顯示 /dev/vda1 仍為 99G,說明文件系統未擴展。
    結論:需擴展文件系統以匹配分區大小。

解決方案

1. 備份數據

擴容操作可能導致數據丟失,強烈建議備份:

rsync -a / /mnt/backup

注意:確保備份完整后再繼續。

2. 檢查文件系統完整ity

在擴展文件系統前,檢查 ext4 文件系統:

e2fsck -f /dev/vda1

注意:根分區無法直接卸載,若需檢查,進入單用戶模式:

init 1
e2fsck -f /dev/vda1
init 5

預期輸出:

e2fsck 1.42.9 (28-Dec-2013)
/dev/vda1: clean, 123456/6553600 files, 26211839/26211839 blocks

3. 擴展文件系統

確認文件系統類型:

df -Th / | awk '{print $2}' | tail -n 1

輸出:

ext4

擴展 ext4 文件系統:

resize2fs /dev/vda1

預期輸出:

resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vda1 to 52428544 (4k) blocks.
The filesystem on /dev/vda1 is now 52428544 blocks long.

4. 驗證擴容結果

運行以下命令確認擴容效果:

lsblk | grep vda1
df -h / | grep vda1

預期輸出:

└─vda1 253:1    0  201G  0 part /
/dev/vda1       201G   78G  123G   39% /

常見問題

  • df -h 未更新,重新掛載:

    mount -o remount /
    df -h
    

    預期輸出:

    /dev/vda1       201G   78G  123G   39% /
    
  • resize2fs 報錯 The filesystem is already XXXX blocks long

    • 文件系統已自動擴展,重新掛載即可。

5. 解決 yum 安裝問題(附加)

嘗試安裝 cloud-utils-growpart 時,遇到 RPM 數據庫錯誤:

錯誤:db5 錯誤(11) 來自 dbenv->open:資源暫時不可用
錯誤:無法使用 db5 - 資源暫時不可用 (11) 打開 Packages 索引

解決步驟

  1. 刪除 RPM 鎖文件:

    rm -f /var/lib/rpm/__db*
    
  2. 重建 RPM 數據庫:

    rpm --rebuilddb
    

    預期輸出:

    [無錯誤輸出]
    
  3. 清理 yum 緩存:

    yum clean all
    
  4. 安裝 cloud-utils-growpart

    yum install -y cloud-utils-growpart
    

    預期輸出:

    Installed:cloud-utils-growpart.x86_64 0.31-1.el7
    Complete!
    

使用 growpart 擴展分區(可選)

growpart /dev/vda 1
resize2fs /dev/vda1

預期輸出:

CHANGED: partition=1 start=2048 old: size=209713119 end=209715167 new: size=419426303 end=419430399

注意事項

  • 備份優先:任何磁盤操作前必須備份數據。

  • 起始扇區:重建分區時,起始扇區必須為 2048,否則數據會丟失。

  • 分區表類型:本案例為 MBR 分區表,若為 GPT,建議使用 parted

    parted /dev/vda
    
  • 云服務器:確保磁盤已在云平臺控制臺擴展。

  • 文件系統緩存:若 df -h 未更新,重新掛載:

    mount -o remount /
    
  • 救援模式:若誤操作導致系統無法啟動,使用 Live CD/USB 修復。

總結

通過 df -hlsblk 發現分區擴展未同步文件系統的問題,確認問題源于使用 fdisk 擴展分區后未執行文件系統擴展。使用 resize2fs 擴展 ext4 文件系統,最終使根分區容量從 99G 擴展到 201G,解決了空間不足問題。文檔詳細記錄了命令、輸入輸出、問題原因及解決步驟,確保運維人員可安全復現擴容操作。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/906453.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906453.shtml
英文地址,請注明出處:http://en.pswp.cn/news/906453.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入解析FramePack:高效視頻幀打包技術原理與實踐

摘要 本文深入探討FramePack技術在視頻處理領域的核心原理&#xff0c;解析其在不同場景下的應用優勢&#xff0c;并通過OpenCV代碼示例演示具體實現方法&#xff0c;為開發者提供可落地的技術解決方案。 目錄 1. FramePack技術背景 2. 核心工作原理剖析 3. 典型應用場景 …

RVTools 官網遭入侵,被用于分發攜帶 Bumblebee 惡意軟件的篡改安裝包

VMware 環境報告工具 RVTools 的官方網站遭黑客入侵&#xff0c;其安裝程序被植入惡意代碼。安全研究人員 Aidan Leon 發現&#xff0c;從該網站下載的受感染安裝程序會側加載一個惡意 DLL 文件&#xff0c;經確認是已知的 Bumblebee 惡意軟件加載器。 官方回應與風險提示 RV…

mysql故障排查與環境優化

一、mysql運行原理 mysql的運行分為三層 客戶端和連接服務 核心服務功能&#xff08;sql接口、緩存的查詢、sql的分析和優化以及部分內置函數的執行等。&#xff09; 存儲引擎層&#xff08;負責mysql中數據的存儲和提取。&#xff09; 二、示例 1、實驗環…

Codex與LangChain結合的智能代理架構:重塑軟件開發的未來

??「炎碼工坊」技術彈藥已裝填! 點擊關注 → 解鎖工業級干貨【工具實測|項目避坑|源碼燃燒指南】 引言:當代碼生成遇見智能決策 想象以下場景: 凌晨三點:你需要緊急修復一個遺留系統的內存泄漏漏洞,但代碼注釋缺失且邏輯復雜; 產品經理需求變更:要求在24小時內將現有…

【開源Agent框架】CAMEL:角色扮演+任務分解

一、項目概覽:重新定義智能體協作范式 CAMEL(Communicative Agents for “Mind” Exploration of Large Language Model Society)是由camel-ai社區開發的開源多智能體框架,致力于探索智能體的規模法則(Scaling Laws)。該項目通過構建包含百萬級智能體的復雜社會系統,研…

第32節:基于ImageNet預訓練模型的遷移學習與微調

1. 引言 在深度學習領域,遷移學習(Transfer Learning)已經成為解決計算機視覺任務的重要方法,特別是在數據量有限的情況下。其中,基于ImageNet數據集預訓練的模型因其強大的特征提取能力而被廣泛應用于各種視覺任務。本文將詳細介紹遷移學習的概念、ImageNet預訓練模型的特…

celery獨立部署接入數據庫配置

目錄結構&#xff1a; config下配置&#xff1a; __init__: import os import sys sys.path.append(os.getcwd()) from celery import CeleryappCelery(celeryTester) # 創建一個Celery實例&#xff0c;名字自定義 app.config_from_object(config.celery_config) # 從celery_…

攻防世界-題目名稱-文件包含

進入環境 看到 include()&#xff0c;想到文件包含&#xff0c;用php偽協議 /?filenamephp://filter/readconvert.base64-encode/resourceflag.php do not hack!猜測可能是黑名單檢測的敏感字符 輸入單個字符串/?filenamebase64 還是顯示do not hack&#xff01; 構造payl…

MySQL高頻面試八連問(附場景化解析)

文章目錄 "為什么訂單查詢突然變慢了&#xff1f;"——從這個問題開始說起一、索引的生死時速&#xff08;必考題&#xff01;&#xff09;二、事務的"套娃"藝術三、鎖機制的相愛相殺四、存儲引擎的抉擇五、慢查詢的破案技巧六、分頁的深度優化七、高可用架…

Android 中 自定義生成的 APK/AAR 文件名稱

在 Kotlin DSL 中&#xff0c;可以通過配置 build.gradle.kts 文件來自定義生成的 APK 或 AAR 文件名稱。 1、自定義 APK 名稱 在模塊的 build.gradle.kts 中通過修改 applicationVariants.all 配置來實現。 android {......applicationVariants.all {outputs.all {val df …

《從零開始:Spring Cloud Eureka 配置與服務注冊全流程》?

關于Eureka的學習&#xff0c;主要學習如何搭建Eureka&#xff0c;將order-service和product-service都注冊到Eureka。 1.為什么使用Eureka? 我在實現一個查詢訂單功能時&#xff0c;希望可以根據訂單中productId去獲取對應商品的詳細信息&#xff0c;但是產品服務和訂單服…

鴻蒙開發進階:深入解析ArkTS語言特性與高性能編程實踐

一、前言 在鴻蒙生態蓬勃發展的當下&#xff0c;開發者對于高效、優質的應用開發語言需求愈發迫切。ArkTS 作為鴻蒙應用開發的核心語言&#xff0c;在繼承 TypeScript 優勢的基礎上&#xff0c;進行了諸多優化與擴展&#xff0c;為開發者帶來了全新的編程體驗。本文將深入剖析…

ARM-Linux 完全入門

1.準備部分 1.1 虛擬機安裝 準備VMware軟件、ubuntu系統鏡像安裝過程 VMware安裝 破解&#xff08;自己百度破解碼&#xff0c;多試幾個網址&#xff0c;會有能用的&#xff09;Ubuntu安裝 配置聯網 橋接 虛擬機Ubuntu系統必須能連接到外網&#xff0c;不然不能更新軟件安裝…

深度學習驅動下的目標檢測技術:原理、算法與應用創新(三)

五、基于深度學習的目標檢測代碼實現 5.1 開發環境搭建 開發基于深度學習的目標檢測項目&#xff0c;首先需要搭建合適的開發環境&#xff0c;確保所需的工具和庫能夠正常運行。以下將詳細介紹 Python、PyTorch 等關鍵開發工具和庫的安裝與配置過程。 Python 是一種廣泛應用于…

致敬經典 << KR C >> 之打印輸入單詞水平直方圖和以每行一個單詞打印輸入 (練習1-12和練習1-13)

1. 前言 不知道有多少同學正在自學C/C, 無論你是一個在校學生, 還是已經是上班族. 如果你想從事或即將從事軟件開發這個行業, C/C都是一個幾乎必須要接觸的系統級程序開發語言. 雖然現在有Rust更安全的系統級編程語言作為C/C的替代, 但作為入門, C應該還是要好好學的. C最早由B…

【Leetcode 每日一題】3355. 零數組變換 I

問題背景 給定一個長度為 n n n 的整數數組 n u m s nums nums 和一個二維數組 q u e r i e s queries queries&#xff0c;其中 q u e r i e s [ i ] [ l i , r i ] queries[i] [l_i, r_i] queries[i][li?,ri?]。 對于每個查詢 q u e r i e s [ i ] queries[i] quer…

[java八股文][Java虛擬機面試篇]垃圾回收

什么是Java里的垃圾回收&#xff1f;如何觸發垃圾回收&#xff1f; 垃圾回收&#xff08;Garbage Collection, GC&#xff09;是自動管理內存的一種機制&#xff0c;它負責自動釋放不再被程序引用的對象所占用的內存&#xff0c;這種機制減少了內存泄漏和內存管理錯誤的可能性…

ubuntu服務器版啟動卡在start job is running for wait for...to be Configured

目錄 前言 一、原因分析 二、解決方法 總結 前言 當 Ubuntu 服務器啟動時&#xff0c;系統會顯示類似 “start job is running for wait for Network to be Configured” 或 “start job is running for wait for Plymouth Boot Screen Service” 等提示信息&#xff0c;并且…

Android 手寫簽名功能詳解:從原理到實踐

Android 手寫簽名功能詳解 1. 引言2. 手寫簽名核心實現&#xff1a;SignatureView 類3. 交互層實現&#xff1a;MainActivity 類4. 布局與配置5. 性能優化與擴展方向 1. 引言 在電子政務、金融服務等移動應用場景中&#xff0c;手寫簽名功能已成為提升用戶體驗與業務合規性的關…

【nRF9160 常用prj.conf配置與AT指令介紹】

參考資料&#xff1a; 技術討論&#xff1a;Q群&#xff1a;542294007 nRF91 NCS SDK安裝工具與SDK安裝包等常用軟件下載地址 云盤下載&#xff1a;pan.olib.cn 一、nRF9160 常用prj.conf配置介紹 nRF9160通過prj.conf配置網絡模式為&#xff1a;CAT-M模式 CONFIG_LTE_NETWOR…