重製 LVM 紙條

有一陣子沒有出產文章,先丟張紙條墊檔

  • /dev/sda1 -> boot
  • /dev/sda2 -> LVM (/)

最近進行升級 Ubuntu 系統,由於 boot 割太小,就算移除其他 linux image 都仍然不足通過升級程序檢查。

首先 LVM resize/reduce 不太可行,因為 boot 磁區不在 LVM 後面阿,也不考慮調換 boot 磁區順序,那麼只剩下最後手段,重新分割,所以要暫時先把 /dev/sda1 與 /dev/sda2 搬出去

一般使用 dd 備份即可,但是 /dev/sda 是 ssd 硬碟,為了盡可能可能減少寫入,所以改使用 partclone 製作 partclone 格式映像檔:

partclone.ext2 -c -s /dev/sda1 -o /mnt/boot.partclone.ext2.img
partclone.ext4 -c -s /dev/vg0/root -o /mnt/root.partclone.ext4.img
partclone.ext4 -c -s /dev/vg0/var -o /mnt/var.partclone.ext4.img

以防萬一,備份分割表:

dd if=/dev/sda of=/mnt/mbr.img bs=512 count=1

另外也把 LVM 規劃以及其他硬碟資訊記錄下來,以備不時之需:

lvdisplay > /mnt/lvdisplay
vgdisplay > /mnt/vgdisplay
pvdisplay > /mnt/pvdisplay
blkid > /mnt/blkid

接著刪除 /dev/sda1, /dev/sda2 ,重新分割以及重新建立 LVM:

重新分割:

fdisk /dev/sda

重新建立 LVM:

pvcreate /dev/sda1
vgcreate vg0 /dev/sda1
lvcreate -n var -L 24G vg0
lvcreate -n root -l 100%FREE vg0

還原資料:

partclone.ext2 -r -s /mnt/boot.partclone.ext2.img -o /dev/sda1
partclone.ext4 -r -s /mnt/root.partclone.ext4.img -o /dev/vg0/root
partclone.ext4 -r -s /mnt/root.partclone.ext4.img -o /dev/vg0/var

確保刷新檔案系統的使用空間大小:

e2fsck -f /dev/sda1 && resize2fs /dev/sda1
e2fsck -f /dev/vg0/root && resize2fs /dev/vg0/root
e2fsck -f /dev/vg0/var && resize2fs /dev/vg0/var

對照 /mnt/blkid ,修改 /boot/grub/grub.cfg 刷新 lvmid ,而 /dev/sda1 UUID 剛好沒有更動到就維持原狀 。以及對照 /etc/fstab 是否有需要修改。

最後重開機就大公告成了。

Show your support

Clapping shows how much you appreciated Andrew Chen’s story.