You need to enable JavaScript to run this app.
导航

迁移CentOS/RHEL 7所在的系统盘至更小的云盘

最近更新时间2023.12.26 10:46:41

首次发布时间2022.04.08 16:34:38

本文将介绍将根卷迁移到更小的云盘以节省磁盘空间。

实验名称

迁移CentOS/RHEL 7所在系统盘至更小的云盘

实验介绍

此操作有风险,建议先对实例创建自定义镜像,保存原始数据
本期实验练习介绍如何把一个根卷迁移到一个更小的云盘上以节省磁盘空间,并导入为镜像。在开始实验前需要先进行如下准备工作:

  • TOS对象存储中创建存储桶 创建方法
  • 准备Access Key和Access Key Secret 创建方法
  • 初始根卷大小为100G的ECS云服务器
  • 用来存储数据的云盘

关于实验

预计部署时间:60分钟
级别:中级
相关产品:ECS云虚拟机
受众:通用

准备工作

1. 在TOS对象存储控制台创建一个存储桶

alt
alt

2. 在云服务器控制台创建一个操作系统为CentOS 7.9,系统盘为100G,一个数据盘为40G,一个数据盘为50G的云服务器

alt

3. 通过控制台远程连接登陆实例,并开始迁移工作

alt

迁移开始

1. 执行fdisk /dev/vdb 创建分区

[root@i-7gr9y1grlnhir5dnwztk /]$ fdisk /dev/vdb 
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x25213bde 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):n    <----- 创建分区
Partition type:
  p  primary (0 primary, 0 extended, 4 free)
  e  extended
Select (default p): p    <----- 分区类型为primary
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):   <---- 设置大小,均为默认值
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 40 GiB

命令(输入 m 获取帮助):w <----- 写入磁盘
The partition table has been altered!

2. 执行以下命令格式化文件系统为ext4

[root@i-7gr9y1grlnhir5dnwztk /]$ mkfs.ext4 /dev/vdb1

3. 修改文件系统UUID和/dev/vda1相同

[root@i-7gr9y1grlnhir5dnwztk ~]$ blkid
/dev/vda1: UUID="223be8ec-241a-4abb-b290-44560b1bc3e5" TYPE="ext4" 
/dev/vdb1: UUID="9d23014a-9c2f-4fb0-b1af-f071086f07b8" TYPE="ext4" 

[root@i-7gr9y1grlnhir5dnwztk ~]# tune2fs -U 223be8ec-241a-4abb-b290-44560b1bc3e5 /dev/vdb1 

4. 挂载/dev/vdb1 至/mnt目录

mount /dev/vdb1 /mnt

5. 创建所需的文件夹

mkdir /mnt/proc
mkdir /mnt/sys
mkdir /mnt/dev

6. 挂载以下目录

mount -o bind /proc/ /mnt/proc/
mount -o bind /sys /mnt/sys/
mount -o bind /dev/ /mnt/dev/

7. 复制文件, 目前只包含了默认目录,如果您还有其他目录请使用相同的命令进行复制即可

cp -arf /boot/ /mnt/
cp -arf /etc /mnt/
cp -arf /home /mnt/
cp -arf /media /opt /root /srv /tmp /usr /var /mnt

cd /mnt    // 注意一定要进入/mnt目录后再执行以下命令
ln -s usr/bin bin
ln -s usr/lib lib
ln -s usr/lib64 lib64
ln -s usr/sbin sbin

8. 使用chroot /mnt跳转到新的操作系统

9. 执行grub2-install /dev/vdb 创建GRUB, 注意这里是/dev/vdb, 不是/dev/vdb1

10. 删除掉当前系统中cloud-init配置

rm -rf /var/lib/cloud/

11. 退出chroot模式

exit

12. 卸载/mnt/proc, /mnt/sys/, /mnt/dev,并重新安装filesystem软件包,恢复一些文件夹的权限

umount /mnt/proc
umount /mnt/sys
umount /mnt/dev


yum reinstall filesystem --installroot=/mnt

13. 为大小为50G的磁盘格式化文件系统

mkfs.ext4 /dev/vdc

14. 创建挂载点/mnt1, 并把/dev/vdb 的数据dd到/mnt1, 注意这里要把整个设备dd到/mnt1中

mkdir /mnt1
mount /dev/vdb /mnt1
dd if=/dev/vdb of=/mnt1/disk.img

15. 登录火山引擎访问控制服务生成一对AccessKey和AccessKey Secret

16. 安装aws cli访问TOS对象存储

pip3 install awscli

17. 配置AccessKey和AccessKey Secret

# aws configure
AWS Access Key ID [None]: AKLTZDA1NzI1YTg0NzFiNGU2MWIzZTNiZTBlZTQ2xxx
AWS Secret Access Key [None]: Wm1ObE5EaGhNak0xT0Raa05ESTFOV0U1T1daaU9Exxxx
Default region name [None]: cn-beijing
Default output format [None]: json

18. 创建存储桶, 修改bucket-name为对应的存储桶名称。

# aws s3 mb s3://bucket-name --endpoint-url https://tos-s3-cn-beijing.ivolces.com
make_bucket: bucket-name

19. 上传disk.img至存储桶

aws s3 cp /mnt1/disk.img s3://bucket-name/disk.img --endpoint-url https://tos-s3-cn-beijing.ivolces.com

20. 上传完成后,通过控制台修改文件权限为公共读

alt

21. 点击详情,获取TOS地址

alt

22. 登录镜像控制台,点击导入镜像,输入获取的镜像地址,选择正确的操作系统版本,并点击确定,开始镜像导入

资源释放

1. 删除实验使用的ECS云服务器

2. 云盘默认不会随实例删除,登陆云盘控制台删除相关云盘

3. 登陆镜像控制台,删除导入的镜像