ubuntu22.04系统/分区迁移


说明:

  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

小结:

  。