说明:
Ubuntu22.04系统磁盘扩容,标准分区转换为LVM逻辑分区,并重新生成磁盘分区表。
新磁盘分区
bash
parted /dev/nvme0n1
GNU Parted 3.4
Using /dev/nvme0n1
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
(parted) mkpart
Partition name? []?
File system type? [ext2]? ext4
Start? 0
End? 100%
Warning: The resulting partition is not properly aligned for best performance: 34s % 2048s != 0s
Ignore/Cancel? Ignore
(parted) q
Information: You may need to update /etc/fstab.
创建、扩容、删除逻辑卷
bash
pvcreate /dev/nvme0n1p1
Physical volume "/dev/nvme0n1p1" successfully created.
pvs
PV VG Fmt Attr PSize PFree
/dev/nvme0n1p1 lvm2 --- <3.64t <3.64t
vgcreate evg_data /dev/nvme0n1p1
Volume group "evg_data" successfully created
vgs
VG #PV #LV #SN Attr VSize VFree
evg_data 1 0 0 wz--n- <3.64t <3.64t
pvcreate /dev/sdd # 创建pv
vgextend evg_data /dev/sdd # 将sdd加入到vg中
lvcreate -L 500G -n lv_root evg_data
Logical volume "lv_root" created.
lvcreate -l 100%FREE -n lv_home evg_data
Logical volume "lv_home" created.
lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_home evg_data -wi-a----- 3.15t
lv_root evg_data -wi-a----- 500.00g
lvextend -L +200G /dev/evg_data/lv_root # 扩容200G
resize2fs /dev/evg_data/lv_root # 同步文件系统
umount /data # 先卸载
lvremove /dev/evg_data/lv_data # 删除lv
vgremove evg_data # 删除vg
pvremove /dev/sdd # 删除pv
格式化逻辑分区
bash
:~# mkfs.ext4 /dev/evg_data/lv_root
mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done
Creating filesystem with 131072000 4k blocks and 32768000 inodes
Filesystem UUID: 2d1b240e-f520-474f-9127-3e3ab379bda9
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000
Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done
:~# mkfs.ext4 /dev/evg_data/lv_home
mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done
Creating filesystem with 845681664 4k blocks and 211427328 inodes
Filesystem UUID: f30eba67-317a-457d-963b-81cd9b5b3f81
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848, 512000000, 550731776, 644972544
Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done
挂载到/mnt对应目录后迁移数据
bash
mkdir -p /mnt/{root,home}
mount /dev/evg_data/lv_root /mnt/root
mount /dev/evg_data/lv_home /mnt/home
rsync -aAXvx --delete --exclude=/{proc,sys,dev,run,tmp,mnt,media}/ --exclude=lost+found/ / /mnt/root
rsync -aAXvx /home/ /mnt/home/
挂载新系统根分区与绑定虚拟目录
bash
mount /dev/evg_data/lv_root /mnt
# 挂载boot与EFI分区到系统标准路径
mount /dev/nvme1n1p2 /mnt/boot
mount /dev/nvme1n1p1 /mnt/boot/efi
# 绑定proc/sys/dev/run,供chroot使用
mount --bind /dev /mnt/dev
mount --bind /dev/pts /mnt/dev/pts
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
mount --bind /run /mnt/run
chroot 进入迁移后的新系统
bash
chroot /mnt
更新 /etc/fstab(重要,否则开机引导失败emergency)
bash
blkid
/dev/mapper/evg_data-lv_home: UUID="f30eba67-317a-457d-963b-81cd9b5b3f81" BLOCK_SIZE="4096" TYPE="ext4"
/dev/mapper/evg_data-lv_root: UUID="2d1b240e-f520-474f-9127-3e3ab379bda9" BLOCK_SIZE="4096" TYPE="ext4"
vim /etc/fstab
更新 GRUB(UEFI 标准命令)
bash
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --recheck # 安装EFI引导文件到新盘ESP分区
update-grub # 重新生成grub.cfg,刷新内核启动参数、替换旧UUID
update-initramfs -u # 重新生成initramfs适配新磁盘硬件
# 拓展,查看安装内核列表
dpkg -l | grep linux-image
rc linux-image-6.8.0-106-generic 6.8.0-106.106~22.04.1 amd64 Signed kernel image generic
ii linux-image-6.8.0-111-generic 6.8.0-111.111~22.04.1 amd64 Signed kernel image generic
hi linux-image-6.8.0-40-generic 6.8.0-40.40~22.04.3 amd64 Signed kernel image generic
ii linux-image-generic-hwe-22.04 6.8.0-111.111~22.04.1 amd64 Generic Linux kernel image
update-initramfs -u -k 5.15.0-107-generic # -k 指定内核只针对该内核生成 initramfs,-u 覆盖现有镜像
update-initramfs -c -k 5.15.0-107-generic # -c 新建,不覆盖旧的
update-initramfs -u -k all # 重建所有已安装内核
update-initramfs -d -k 6.8.0-111-generic # 删除某个内核的 initramfs
uname -r # 获取当前内核版本
update-initramfs -u -k $(uname -r) # 传入变量更新
退出并卸载,重启测试
bash
exit
sudo umount -R /mnt
reboot
小结:
。