LVM 簡介
LVM 是 Linux 系統(tǒng)上一個(gè)磁盤映射工具,為 Linux 內(nèi)核提供虛擬卷宗管理, 原理如圖所示,LVM 主要的一個(gè)優(yōu)勢就是可以將多個(gè)物理磁盤(或分區(qū))合并為一個(gè)超大邏輯分區(qū),以滿足類似超大數(shù)據(jù)庫文件等存儲需求。

LVM 有個(gè)局限性就是在將磁盤(或分區(qū))納入 LVM 管理的時(shí)候需要對磁盤或分區(qū)進(jìn)行格式化操作, 這就導(dǎo)致我們無法直接將已經(jīng)存儲了數(shù)據(jù)的磁盤納入 LVM 管理。
本案例系統(tǒng)版本
Ubuntu 22.04.3 LTS
具體問題
系統(tǒng)盤上裝了 Docker ,Docker 目錄迅速膨脹,導(dǎo)致系統(tǒng)磁盤空間不足,購買一塊新硬盤安裝后發(fā)現(xiàn)無法將新增硬盤空間添加到系統(tǒng)盤所在的卷宗,因?yàn)榘惭b系統(tǒng)時(shí)沒有使用 LVM 管理系統(tǒng)盤。
解決方案
將新增硬盤使用 LVM 管理,并創(chuàng)建邏輯卷宗
將原系統(tǒng)文件全部 copy 到 LVM 管理的邏輯卷宗
引導(dǎo)系統(tǒng)從 LVM 邏輯卷宗啟動
確認(rèn)新卷宗啟動正常
將原系統(tǒng)所在硬盤格式
將原系統(tǒng)盤納入 LVM 管理
使用 LVM 對系統(tǒng)邏輯卷宗擴(kuò)容

方案難點(diǎn)
該方案難點(diǎn)是遷移系統(tǒng),Linux 系統(tǒng)雖然是基于文件的系統(tǒng),但是文件中涉及到文件軟硬鏈接, mount 目錄, 虛擬目錄,socket 文件等,并不是簡單的 copy 操作; 還有就是遷移后的系統(tǒng)的啟動引導(dǎo)流程需要處理,在處理的過程中要格外小心,稍有不慎就可能導(dǎo)致系統(tǒng)無法啟動、文件丟失等嚴(yán)重后果。
方案操作過程
該方案是從虛擬機(jī)上多次嘗試最終驗(yàn)證成功所得;
在操作時(shí)務(wù)必確認(rèn)清楚當(dāng)前命令在做什么,命令參數(shù)需要根據(jù)實(shí)際情況調(diào)整。
一. 新磁盤操作
添加磁盤
fdisk -l
查看新增磁盤名稱 假如新磁盤為 “/dev/nvme1n1”
fdisk /dev/nvme1n1
fdisk 命令進(jìn)入操作模式按 m 鍵可以展示幫助說明
新建 gpt 分區(qū)表, 然后 new 兩個(gè)分區(qū),一個(gè) EFI ,另一個(gè) linux 系統(tǒng)分區(qū)
使用 fdisk -l 查看新分區(qū),假如為 /dev/nvme1n1p1 和 /dev/nvme1n1p2
apt install lvm2
安裝 lvm2 工具套件
pvcreate /dev/nvme1n1p2
將新磁盤的第二分區(qū)使用 lvm 管理,使用 pvdisplay 命令查看新增的物理磁盤名(一般與原名相同 /dev/nvme1n1p2), pvs 命令也可以查看
vgcreate vg0 /dev/nvme1n1p2
創(chuàng)建 volume group (名稱vg0) 可以使用 vgs 或 vgdisplay 命令查看創(chuàng)建結(jié)果
lvcreate -n lv0 -L 15G vg0
創(chuàng)建 logic volume (名稱 lv0, 大小 15G 按需指定)之后使用 lvs 或 lvdisplay 命令可以查看創(chuàng)建的邏輯分區(qū)
fdisk -l
查看新建的邏輯卷 id (假如新邏輯卷為 /dev/mapper/vg0-lv0 )
mkfs.ext4 /dev/mapper/vg0-lv0
設(shè)置文件格式為 ext4
mkfs.fat -F32 /dev/nvme1n1p1
給 EFI 系統(tǒng)分區(qū)設(shè)置文件格式 fat32
二. 遷移系統(tǒng)
mkdir /root2
創(chuàng)建分區(qū)掛載點(diǎn)
mount /dev/mapper/vg0-lv0 /root2
掛載新分區(qū)
tar -cf - --one-file-system / | tar -xf - -C /root2
copy 系統(tǒng)文件到目標(biāo) 新分區(qū), 提示刪除開頭的 / 是安全警告可以忽略,提示忽略套接字也正常
mount /dev/nvme1n1p1 /root2/boot/efi
將新的 EFI 引導(dǎo)分區(qū)掛載到新系統(tǒng)的 /boot/efi 目錄
- mount 必要節(jié)點(diǎn)
sudo mount --bind /dev /root2/dev
sudo mount --bind /proc /root2/proc
sudo mount --bind /sys /root2/sys
chroot /root2
切換到新系統(tǒng)盤
- 修改 mount 映射
vi /etc/fstab
修改 / 對應(yīng)的 uuid 為 /dev/mapper/vg0-lv0 分區(qū)的 id,
修改 boot/efi 的 uuid 為 /dev/nvme1n1p1 EFI 分區(qū)的 id,
blkid 命令可以查看 id
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu
安裝引導(dǎo)程序,并創(chuàng)建系統(tǒng)引導(dǎo)配置 ubuntu (ubuntu 名稱不可隨意指定)
可能會彈出警告: 提示 EFI 變量無法設(shè)置在當(dāng)前系統(tǒng),需要手動完成 GRUB 設(shè)置, 可忽略
grub-mkconfig -o /boot/grub/grub.cfg
更新新系統(tǒng)下的 grub 配置
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --recheck --removable
重新安裝引導(dǎo)程序,并創(chuàng)建系統(tǒng)引導(dǎo)配置
grub-mkconfig -o /boot/grub/grub.cfg
再次更新新系統(tǒng)下的 grub 配置
21 . 重啟系統(tǒng)到固件,選擇啟動磁盤為新增磁盤
三. 處理舊的系統(tǒng)盤
pvcreate /dev/nvme0n1
整個(gè)磁盤創(chuàng)建lvm物理盤
vgextend vg0 /dev/nvme0n1
將新物理盤符添加到磁盤組 vg0
lvextend -l +100%FREE /dev/mapper/vg0-lv0
將邏輯盤擴(kuò)容到 vg0 的最大可用空間
resize2fs /dev/mapper/vg0-lv0
將文件系統(tǒng)擴(kuò)容到邏輯盤符的最大空間
操作失誤遇到的問題
如果磁盤 已經(jīng)被 lvm 管理, 然后你又手動的對磁盤進(jìn)行分區(qū)操作,那么對應(yīng)的 lvm 邏輯分區(qū)不會自動消失, 導(dǎo)致 /dev/mapper/ 下有個(gè) lv 的映射一直 lvremove 刪不掉
可使用 dmsetup ls 查看映射信息,然后使用 dmsetup remove 刪除對應(yīng)的邏輯映射。
設(shè)置面板無法打開
過了幾天發(fā)現(xiàn)系統(tǒng)設(shè)置面板無法打開,不確定是不是由于系統(tǒng)擴(kuò)容引起的,解決辦法如下
apt install gnome-control-center 按轉(zhuǎn)完即可。