解決Docker存儲空間不足問題

虛擬機磁盤擴展實戰:解決Docker存儲空間不足問題

問題背景

在虛擬機中運行的Linux系統上,Docker服務因根分區空間不足而無法正常運行。初始狀態如下:

[root@localhost ~]# df -h /
文件系統                 容量  已用  可用 已用% 掛載點
/dev/mapper/centos-root   17G   17G  983M   95% /[root@localhost ~]# docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          8         7         3.914GB   260.4MB
Containers      8         4         6.741GB   18.13kB

根分區使用率已達95%,僅剩983MB空間,導致Docker無法正常工作。

完整解決方案

步驟1:安裝parted工具(如未安裝)

# 檢查parted是否已安裝
which parted || echo "parted not installed"# 安裝parted工具
sudo yum install -y parted  # CentOS/RHEL
# 或
sudo apt-get install -y parted  # Ubuntu/Debian# 驗證安裝
sudo parted --version

步驟2:擴展虛擬機磁盤

  1. 關閉虛擬機
  2. 在虛擬機管理軟件中:
    • VMware: 虛擬機設置 → 硬盤 → 擴展
    • VirtualBox: 設置 → 存儲 → 調整大小
    • 將磁盤從30GB擴展到53.7GB
  3. 啟動虛擬機

步驟3:進入parted交互模式

# 啟動parted工具(需要root權限)
sudo parted /dev/sda

步驟4:parted交互操作指南

在parted交互模式中,按順序執行以下命令:

# 1. 查看當前分區信息
(parted) print# 2. 調整分區大小(注意:100%后不要添加任何注釋)
(parted) resizepart 2 100%# 3. 確認分區已擴展
(parted) print# 4. 退出parted
(parted) quit

關鍵操作截圖

(parted) print  # 執行前
Number  Start   End     Size    Type     File system  標志
1      1049kB  1075MB  1074MB  primary  xfs          啟動
2      1075MB  30.0GB  28.9GB  primary               lvm(parted) resizepart 2 100%  # 正確執行(parted) print  # 執行后
Number  Start   End     Size    Type     File system  標志
1      1049kB  1075MB  1074MB  primary  xfs          啟動
2      1075MB  53.7GB  52.6GB  primary               lvm

步驟5:更新分區表

# 強制內核重新讀取分區表
sudo partprobe -s /dev/sda
sudo udevadm settle# 確認分區已擴展
sudo fdisk -l /dev/sda

預期輸出

   設備 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200   104857599    51379200   8e  Linux LVM

步驟6:擴展物理卷(PV)

# 強制物理卷使用整個分區空間
sudo pvresize /dev/sda2# 驗證PV大小
sudo pvdisplay /dev/sda2

檢查關鍵值

  • PV Size 應接近53.7GB
  • Free PE 應有大量空間

步驟7:擴展邏輯卷(LV)和文件系統

# 查看卷組可用空間
sudo vgdisplay centos | grep "Free"# 將所有空閑空間分配給根邏輯卷
sudo lvextend -l +100%FREE /dev/mapper/centos-root# 擴展XFS文件系統
sudo xfs_growfs /dev/mapper/centos-root# 驗證最終結果
df -h /

成功驗證

操作完成后,系統顯示:

[root@localhost ~]# df -h /
文件系統                 容量  已用  可用 已用% 掛載點
/dev/mapper/centos-root   54G   17G   37G   32% /[root@localhost ~]# docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          8         7         3.914GB   260.4MB
Containers      8         4         6.741GB   18.13kB

根分區從17GB擴展到54GB,Docker存儲空間不足問題得到解決。

Parted交互模式詳解

什么是parted交互模式?

parted是一個磁盤分區工具,提供兩種使用方式:

  1. 命令行模式:sudo parted /dev/sda resizepart 2 100%
  2. 交互模式:通過sudo parted /dev/sda進入,然后輸入命令

為什么使用交互模式?

  1. 更直觀:每一步操作都有明確提示
  2. 更安全:操作前可預覽更改
  3. 更靈活:支持多種磁盤操作命令

常用交互命令:

命令功能示例
print顯示分區表(parted) print
resizepart調整分區大小(parted) resizepart 2 100%
rm刪除分區(parted) rm 3
mkpart創建新分區(parted) mkpart primary 30GB 100%
quit退出交互模式(parted) quit

關鍵要點

  1. 操作順序至關重要

    • 先擴展虛擬機磁盤
    • 再擴展Linux分區
    • 最后擴展LVM和文件系統
  2. parted命令注意事項

    # 正確命令(簡潔無注釋)
    (parted) resizepart 2 100%# 錯誤命令(會導致失敗)
    (parted) resizepart 2   # 選擇要調整的分區(這里是分區2)
    
  3. LVM擴展邏輯

    物理磁盤 → 分區 → 物理卷(PV) → 卷組(VG) → 邏輯卷(LV) → 文件系統
    
  4. XFS文件系統特性

    • 支持在線擴展(無需卸載)
    • 使用xfs_growfs命令擴展

常見問題解決方案

問題1:parted未安裝

# CentOS/RHEL
sudo yum install -y parted# Ubuntu/Debian
sudo apt-get update && sudo apt-get install -y parted

問題2:parted命令無效

# 確保使用正確語法
(parted) help resizepart  # 查看命令幫助# 使用絕對路徑
/sbin/parted /dev/sda

問題3:空間未完全釋放

# 清理Docker無用數據
docker system prune -af# 清理系統日志
sudo journalctl --vacuum-size=200M
sudo rm -rf /var/log/journal/*

問題4:parted無法調整分區

使用fdisk替代方案:

# 備份分區表
sudo sfdisk -d /dev/sda > sda.bak# 進入fdisk交互模式
sudo fdisk /dev/sda# 在fdisk中執行:
d      # 刪除分區
2      # 選擇分區2
n      # 新建分區
p      # 主分區
2      # 分區號2
2099200 # 起始扇區(必須相同!)
Enter  # 使用默認結束位置(整個磁盤)
t      # 更改類型
2      # 選擇分區2
8e     # Linux LVM 類型
w      # 寫入更改

總結

通過本指南,您成功實現了:

  1. parted工具的安裝與使用
  2. 虛擬機磁盤從30GB擴展到53.7GB
  3. Linux分區擴展到整個可用空間
  4. LVM物理卷和邏輯卷的擴展
  5. XFS文件系統的在線擴展
  6. Docker存儲空間不足問題的解決

經驗提示:在生產環境中操作前,務必對虛擬機進行快照備份,以防操作失誤導致數據丟失。parted交互模式雖然需要額外學習,但提供了更直觀和安全的分區管理方式。

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

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

相關文章

Redis 中如何保證緩存與數據庫的數據一致性?

在 Redis 中保證緩存與數據庫的數據一致性,需結合業務場景選擇以下策略: 核心策略總結 Cache Aside(旁路緩存)模式 讀操作:先查緩存,未命中則查數據庫并寫入緩存。寫操作:先更新數據庫&#xf…

晶振頻率穩定性:5G 基站與航天設備的核心競爭力

在當今科技飛速發展的時代,電子設備的性能和可靠性至關重要。晶振作為電子設備中的核心部件,為系統提供精確的時間和頻率基準。晶振的頻率穩定性直接影響著設備的整體性能,從日常生活中廣泛使用的智能手機、智能穿戴設備,到對精度…

PDFGear——完全免費且功能強大的PDF處理軟件

關鍵詞 :PDFGear、免費、跨平臺、多功能、OCR 概要 :PDFGear是一款完全免費且功能強大的PDF處理軟件,支持Windows、macOS、iOS和Android等多平臺使用。它集PDF閱讀、編輯、格式轉換、OCR識別及AI智能助手于一體,滿足用戶多樣化文檔…

【筆記】在 MSYS2(MINGW64)中正確安裝 Rust

#工作記錄 1. 環境信息 Windows系統: MSYS2 MINGW64當前時間: 2025年6月1日Rust 版本: rustc 1.87.0 (17067e9ac 2025-05-09) (Rev2, Built by MSYS2 project) 2. 安裝步驟 步驟 1: 更新系統包數據庫并升級已安裝的包 首先,確保我們的 MSYS2 系統是最新狀態。打…

WIN11+VSCODE搭建的c/c++環境調試報錯解決

解決調試報錯 前面win11vscode搭建的c/c環境,ctrlshiftB生成正常,cttlF5運行正常。今天打斷點逐步調試時報錯,提示找不到庫文件。解決方案如下: 下載mingw-w64源碼庫:(兩種途徑) 通過MSYS2 UC…

React項目在ios和安卓端要做一個漸變色背景,用css不支持,可使用react-native-linear-gradient

以上有個模塊是灰色逐漸到白的背景色過渡 如果是css,以下代碼就直接搞定 background: linear-gradient(180deg, #F6F6F6 0%, #FFF 100%);但是在RN中不支持這種寫法,那應該寫呢? 1.引入react-native-linear-gradient插件,我使用的是…

android-studio-2024.3.2.14如何用WIFI連接到手機(給數據線說 拜拜!)

原文:Android不用數據線就能調試真機的方法—給數據線說 拜拜!(adb遠程調試) android-studio-2024.3.2.14是最新的版本,如何連接到手機,可用WIFI,可不用數據線,拜拜 第一步&#xf…

【前端】JS引擎 v.s. 正則表達式引擎

JS引擎 v.s. 正則表達式引擎 它們的轉義符都是\ 經過JS引擎會進行一次轉義 經過正則表達式會進行一次轉義在一次轉義中\\\\\的轉義過程: 第一個 \ (轉義符) 會“吃掉”第二個 \,結果是得到一個字面量的 \。 第三個 \ (轉義符) 會“吃掉”第四個 \&#x…

ReactHook有哪些

React 中常用的 Hooks 列表及用法 React Hooks 是 React 16.8 版本引入的一項重要特性,它極大地簡化和優化了函數組件的開發過程。以下是 React 中常用的 Hooks 列表及其詳細用法: 1. useState useState 是用于在函數組件中添加狀態的 Hook。通過調用…

【PyQt5】PyQt5初探 - 一個簡單的例程

PyQt5初探 - 一個簡單的例程 引言一、安裝配置二、使用2.1 PyQt5簡單例程2.2 與c Qt深入對比 三、相關教程 引言 PyQt5是一個比較流行的Python圖形用戶界面(GUI)庫,它基于Qt庫(一個跨平臺的C庫,用于開發應用程序的圖形界面)為Pyt…

圖文詳解Java并發面試題

文章目錄 1、并發與并行2、線程安全3、線程、進程、協程4、線程間通信5、線程創建方式6、8G內存創建的線程數7、普通Java程序含有的線程8、start()、run()9、線程調度、6種狀態、強制停止線程、上下文切換10、守護線程、用戶線程11、 volatile 、synchronized12、sleep() 、 wa…

飛牛fnNAS存儲空間模式詳解

目錄 一、NAS的存儲空間 二、多硬盤對NAS速度的提升原理 三、多硬盤對數據安全的提升原理 四、多硬盤對容量的提升原理 五、磁盤陣列模式 六、飛牛NAS支持的存儲模式 七、具體如何選擇存儲空間模式 在數字化時代,數據是個人和企業發展的核心資產,但面臨硬盤損壞、病毒…

OpenCv高階(二十)——dlib臉部輪廓繪制

文章目錄 一、人臉面部輪廓繪制代碼實現1、定義繪制直線段的函數2、定義繪制凸包輪廓的函數3、讀取輸入圖像4、初始化dlib的人臉檢測器5、使用檢測器在圖像中檢測人臉(參數0表示不進行圖像縮放)6、加載dlib的68點人臉關鍵點預測模型7、遍歷檢測到的每個人…

WEBSTORM前端 —— 第3章:移動 Web —— 第3節:移動適配

目錄 一、移動Web基礎 1.谷歌模擬器 2.屏幕分辨率 3.視口 4.二倍圖 二、適配方案 三、rem 適配方案 四、less 1.less – 簡介 2.less – 注釋 3.less – 運算 4.less – 嵌套 5.less – 變量 6.less – 導入 7.less – 導出 8.less – 禁止導出 五…

Altium Disigner(16.1)學習-原理圖繪制以及必要操作

一、下載軟件 通過網盤分享的文件:Altium Designer 16.zip 鏈接: https://pan.baidu.com/s/1uBHeoJJ-iA2tXw3NRjCcdA?pwd7c3h 提取碼: 7c3h 復制這段內容后打開百度網盤手機App,操作更方便哦 --來自百度網盤超級會員v5的分享 二、建立工程 添加proje…

AI煉丹日志-25 - OpenAI 開源的編碼助手 Codex 上手指南

點一下關注吧!!!非常感謝!!持續更新!!! Java篇: MyBatis 更新完畢目前開始更新 Spring,一起深入淺出! 大數據篇 300: Hadoop&…

Redis:安裝與常用命令

🌈 個人主頁:Zfox_ 🔥 系列專欄:Redis 🔥 安裝 Redis 使?apt安裝 apt install redis -y?持遠程連接 修改 /etc/redis/redis.conf 修改 bind 127.0.0.1 為 bind 0.0.0.0 修改 protected-mode yes 為 protected-mo…

02 APP 自動化-Appium 運行原理詳解

環境搭建見 01 APP 自動化-環境搭建 文章目錄 一、Appium及Appium自動化測試原理二、Appium 自動化配置項三、常見 ADB 命令四、第一個 app 自動化腳本 一、Appium及Appium自動化測試原理 Appium 跨平臺、開源的 app 自動化測試框架,用來測試 app 應用程序&#x…

UDP/TCP協議全解

目錄 一. UDP協議 1.UDP協議概念 2.UDP數據報格式 3.UDP協議差錯控制 二. TCP協議 1.TCP協議概念 2.三次握手與四次揮手 3.TCP報文段格式(重點) 4.流量控制 5.擁塞控制 一. UDP協議 1.UDP協議概念 當應用層的進程1要向進程2傳輸報文&#xff…

AWS之數據分析

目錄 數據分析產品對比 1. Amazon Athena 3. AWS Lake Formation 4. AWS Glue 5. Amazon OpenSearch Service 6. Amazon Kinesis Data Analytics 7. Amazon Redshift 8.Amazon Redshift Spectrum 搜索服務對比 核心功能與定位對比 適用場景 關鍵差異總結 注意事項 …