生產環境常遇到 /home 分配過大導致 / (根分區) 空間不足,需將 /home 縮減並將釋出空間線上擴充給根分區。本文以 CentOS 7 LVM 為例,完整記錄 umount → e2fsck → resize2fs → lvreduce → lvextend → resize2fs 完整流程,並強調資料安全關鍵步驟,避免資料遺失。
| 項目 | 現狀 | 目標 |
|---|---|---|
| 根分區 | /dev/mapper/VolGroup-lv_root (154G, 用 7.9G) | 擴充至全可用空間 |
| 家目錄 | /dev/mapper/VolGroup-lv_home (299G, 用 984M) | 縮減至 20G |
| 檔案系統 | ext4 | 支援線上擴充、離線縮減 |
df -h
lvdisplay
vgdisplay
# 重要:先備份 /home 關鍵資料至異地
umount /home
# 若提示 busy,查佔用進程並終止
fuser -mv /home
kill -9
umount /home
e2fsck -f /dev/mapper/VolGroup-lv_home
resize2fs -p /dev/mapper/VolGroup-lv_home 20G
鐵律:檔案系統縮減必須小於等於目標 LV 大小,否則資料損毀。
lvreduce -L 20G /dev/mapper/VolGroup-lv_home
# 提示確認輸入 y
# -L 20G = 設定最終大小 20G
# -l -20G = 從目前減少 20G (切勿混淆)
mount /home
df -h /home
# 應顯示 20G 總容量
# 先確認 VG 剩餘可用空間
vgdisplay
# 將所有剩餘 PE 給根分區 (或指定具體大小)
lvextend -l +100%FREE /dev/mapper/VolGroup-lv_root
# 或指定具體大小:lvextend -L +283G /dev/mapper/VolGroup-lv_root
resize2fs -p /dev/mapper/VolGroup-lv_root
# ext4 支援線上擴充,無需卸載
df -h
lsblk -f
根分區應已擴充至接近 450G (視原始總容量),/home 穩定在 20G。
| 風險 | 後果 | 防範 |
|---|---|---|
| 未先 e2fsck 直接 resize2fs | 檔案系統錯誤放大導致資料毀損 | 強制執行 e2fsck -f |
| lvreduce 大小小於檔案系統實際大小 | 截斷檔案系統尾部資料,永久遺失 | resize2fs 先縮減至目標大小,再 lvreduce 同尺寸 |
| 混淆 -L (絕對) 與 -l (相對) | 誤縮減/擴充錯誤大小 | 操作前用 vgdisplay/lvdisplay 核對單位 |
| 未備份 /home 關鍵資料 | 操作失敗資料無法找回 | 異地備份後再操作 |
XFS 不支援縮減,若 /home 為 XFS,唯一解法:備份資料 → 刪除 LV → 重建較小 LV → 還原資料。ext4 則支援雙向調整。
#!/bin/bash
set -euo pipefail
HOME_LV="/dev/mapper/VolGroup-lv_home"
ROOT_LV="/dev/mapper/VolGroup-lv_root"
TARGET_HOME_SIZE="20G"
umount /home
e2fsck -f "$HOME_LV"
resize2fs -p "$HOME_LV" "$TARGET_HOME_SIZE"
lvreduce -L "$TARGET_HOME_SIZE" "$HOME_LV"
mount /home
lvextend -l +100%FREE "$ROOT_LV"
resize2fs -p "$ROOT_LV"
df -h
生產環境請人工逐步確認,切勿直接跑腳本。
Linux 12 大鮮為人知的應用場景:從手機到核潛艇的隱形霸主
在 Motorola Defy 手機上安裝 Arch Linux ARM 完整教程
Kickstart 自動安裝中創建 LVM 邏輯卷完整配置範例
Linux 定時任務 Cron 完整實戰指南:系統級 /etc/cron.*、使用者級 crontab、排程語法與除錯技巧
Linux ACL 權限備份還原實戰:getfacl/setfacl 批量修正技巧
CentOS 安裝配置 FTP 服務 (vsftpd) 標準流程:yum 安裝、服務管理、配置檔調整、用戶建立、測試驗證