前情提要
- 🧱 磁盤結構流程概念圖:
物理磁盤 (/dev/sdX) ?└── 分區(如 /dev/sdX1)或整塊磁盤(直接使用) ????? └── 物理卷 (PV, 用 pvcreate) ?????????? └── 卷組 (VG, 用 vgcreate) ??????????????? └── 邏輯卷 (LV, 用 lvcreate) ???????????????????? └── 格式化為文件系統(如 ext4,用 mkfs.ext4) |
- ? 命令職責說明
命令 | 作用 | 用于哪種結構 |
mkpart | 用于創建磁盤分區(在 parted 中) | 普通分區結構、也可為 LVM 提供空間 |
vgcreate | 創建 LVM 的卷組(VG) | LVM 結構 |
pvcreate | 初始化一個設備或分區為 LVM 的物理卷 | LVM 結構 |
lvcreate | 在卷組里創建邏輯卷(LV) | LVM 結構 |
mkfs.ext4 | 格式化一個分區或邏輯卷為 ext4 文件系統 | 可用于普通分區或 LVM LV |
- ? 小結
操作目標 | 你應使用的命令 |
創建普通磁盤分區 | parted + mkpart + mkfs.ext4 |
使用磁盤做 LVM | pvcreate + vgcreate + lvcreate |
格式化成 ext4 文件系統 | mkfs.ext4 |
1、添加一塊磁盤
2、創建分區
-
2.1小于2T空間可采用fdisk命令進行分區
`
fdisk /dev/sdb n p 1 w |
最后輸入w保存所有配置,輸入quit退出/放棄配置退出
-
2.2大于2T可采用parted命令進行ext4分區
parted /dev/sdb |
使用 parted 創建 GPT 分區表并分區
mklabel gpt?????????? ?# 創建 GPT 分區表 mkpart primary ext4 0% 100%?? # 創建分區,占滿整個磁盤 quit |
進入 parted 命令行后,依次執行:
mkfs.ext4 /dev/sdb1 |
格式化分區(假設創建的是 /dev/sdb1)
mkdir /data mount /dev/sdb1 /data |
創建掛載點并掛載
-
2.3大于2T可采用parted命令進行LVM分區(優選)
查看磁盤狀態和需要初始化的磁盤分區
創建物理卷(PV)
pvcreate /dev/sdc |
創建卷組(VG)
vgcreate vg_data /dev/sdc |
創建邏輯卷(LV)
比如分配 2GB 空間:
lvcreate -n lv_data -L 2G vg_data |
也可以使用所有剩余空間:
lvcreate -n lv_data -l 100%FREE vg_data |
格式化邏輯卷為 ext4
mkfs.ext4 /dev/vg_data/lv_data |
掛載到你想用的目錄
mkdir /lvm-data mount /dev/vg_data/lv_data /data |
3、設置開機自動掛載(寫入?/etc/fstab)
先獲取 UUID:
blkid /dev/sdb1 |
然后編輯?/etc/fstab:
vi /etc/fstab |
添加如下行(替換為實際 UUID):
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx? /data? ext4? defaults? 0 0 |
4、添加完成檢查狀態
🔧 注意事項
- RedHat 6.5 默認支持 GPT,但是你必須使用 parted 或 gdisk,不要使用 fdisk。
- 如果你使用的是較老的 BIOS(非 UEFI),啟動盤不能使用 GPT(但數據盤沒問題)。
5、擴容磁盤
-
5.1、ext4磁盤類型的擴容
查看目前磁盤狀態
卸載分區,此時會中斷業務
umount /dev/sdb1 |
如果提示 busy,可以用:
lsof | grep /dev/sdb1 |
結束占用進程后再卸載。
卸載之前
卸載之后
使用 parted 刪除并重建分區(不丟數據)
?? 只刪除分區,不格式化,數據不會丟失。
parted /dev/sdb |
在?parted 交互命令行中執行:
rm 1?????????????????????? # 刪除 sdb1 分區 mkpart primary ext4 0% 100%?? # 創建新的分區占滿整個磁盤 quit |
讓系統識別新的分區表
partprobe |
擴展文件系統到新的分區大小
e2fsck -f /dev/sdb1????? # 先檢查文件系統(非常重要) resize2fs /dev/sdb1????? # 擴展 ext4 文件系統 |
重新掛載分區
mount /dev/sdb1 /data df -h /data????????????? # 查看是否擴容成功 |
-
5.2、LVM格式的擴容
查看 VG 剩余空間(確認)
vgdisplay vg_data |
執行擴容邏輯卷命令(使用所有剩余空間)
lvextend -l +100%FREE /dev/vg_data/lv_data |
這表示:將 vg_data 中剩余的全部空間分配給 lv_data。
你也可以指定擴多少,比如再加 2G:
lvextend -L +2G /dev/vg_data/lv_data |
擴展文件系統(ext4)
由于你使用的是 ext4 文件系統(默認情況下通常是),運行:
resize2fs /dev/vg_data/lv_data |
這個命令會讓文件系統識別到新的邏輯卷大小,并利用新增空間。
📌 注意:這個命令可以在線運行,不影響業務!
驗證擴容是否成功
df -h /lvm-data |
6、總結
- ? LVM 與 ext4 的對比總結:
特性 | LVM | ext4 |
擴容方式 | 支持動態擴容、收縮 | 支持在線擴展,但無法收縮 |
磁盤合并 | 支持合并多個磁盤形成一個邏輯卷 | 不支持多個磁盤合并 |
文件系統管理 | 支持快速變動和調整邏輯卷 | 固定文件系統,變更需要重分區 |
快照 | 支持快照,適合數據備份與恢復 | 不支持文件系統級別的快照 |
性能開銷 | 有較小的性能開銷 | 較小,無額外的抽象層 |
數據恢復 | 恢復復雜,需要恢復 LVM 配置 | 恢復相對簡單 |
文件系統功能 | 不涉及文件系統,交給其他工具 | 提供日志、文件系統修復等功能 |
- 對于普通的ext4的格式也可以在線擴容但是需要用到非系統自帶組件,需要另外安裝。
- ?? 注意事項:
- growpart 是 cloud-utils 包的一部分(有些系統可能需要安裝):
yum install cloud-utils-growpart |
- 并且growpart 只適用于 MBR 或 GPT 分區表的末尾分區。不能擴展中間分區。
- 如果你原來是 LVM 分區,這個方法就不適用,而是要用 lvextend + resize2fs。
- ? 正確理解?growpart 和 resize2fs
命令 | 作用 | 是否會中斷業務 |
growpart | 擴展分區表中該分區的大小(前提是后面有空閑空間) | ? 不會中斷 |
resize2fs | 擴展 ext4 文件系統以使用新空間 | ? 在線執行 |
- 🧠 工作原理簡述
在使用云平臺或 LVM 之外的普通分區時,如果你掛載的是 /dev/sdb1 這樣的 普通 ext4 分區,growpart 會:
- 只調整分區表,把 /dev/sdb1 從 2G 擴到例如 5G
- 文件系統大小并沒有變化
- 所以你還需要運行 resize2fs 才會看到新的可用空間
- ? 在線擴容 ext4 分區完整流程(無業務中斷)
假設你掛載的是 /dev/sdb1 到 /data,現在你已經通過擴盤或者調整磁盤,使得 /dev/sdb 后面有空閑空間。
# 第一步:擴展分區(非破壞性) growpart /dev/sdb 1 # 第二步:擴展文件系統 resize2fs /dev/sdb1 |
注意:這個操作不會卸載分區,可以在線完成。
- 🔍 驗證是否成功:
df -h /data |