运行环境
- CentOS/RHEL 7
问题描述
如何迁移CentOS 7至更小的云盘
解决方案
- 对当前实例创建镜像进行数据备份,备份方法
- 卸载掉当前实例其他数据盘,防止误操作导致数据盘数据丢失
- 分别挂载一个20G和25G的云盘至此实例
- 执行
fdisk /dev/vdx
创建分区
[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 类型,大小设为 20 GiB
命令(输入 m 获取帮助):w <----- 写入磁盘
The partition table has been altered!
- 执行以下命令格式化文件系统为ext4
[root@i-7gr9y1grlnhir5dnwztk /]$ mkfs.ext4 /dev/vdx1
- 修改文件系统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
- 挂载/dev/vdx1 至/mnt目录
mount /dev/vdx1 /mnt
- 创建所需的文件夹
mkdir /mnt/proc
mkdir /mnt/sys
mkdir /mnt/dev
- 挂载需要的目录
mount -o bind /proc/ /mnt/proc/
mount -o bind /sys /mnt/sys/
mount -o bind /dev/ /mnt/dev/
- 复制文件, 目前只包含了默认目录,如果您还有其他目录请使用相同的命令进行复制即可
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
- 使用
chroot /mnt
跳转到新的操作系统 - 执行
grub2-install /dev/vdx
创建GRUB, 注意这里是/dev/vdx, 不是/dev/vdx1 - 删除掉当前系统中cloud-init配置
rm -rf /var/lib/cloud/
- 退出chroot模式
exit
- 卸载/mnt/proc, /mnt/sys/, /mnt/dev,并重新安装filesystem软件包,恢复一些文件夹的权限
umount /mnt/proc
umount /mnt/sys
umount /mnt/dev
yum reinstall filesystem --installroot=/mnt
- 为大小为25G的磁盘格式化文件系统
mkfs.ext4 /dev/vdx
- 创建挂载点/mnt1, 并把/dev/vdx 的数据dd到/mnt1, 注意这里要把整个设备dd到/mnt1中
mkdir /mnt1
mount /dev/vdx /mnt1
dd if=/dev/vdx of=/mnt1/disk.img
- 登录火山引擎访问控制服务生成一对AccessKey和AccessKey Secret
- 安装aws cli访问TOS对象存储
pip3 install awscli
- 配置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
- 创建存储桶, 修改bucket-name为对应的存储桶名称。
# aws s3 mb s3://bucket-name --endpoint-url https://tos-s3-cn-beijing.ivolces.com
make_bucket: terry-upload
- 上传disk.img至存储桶
aws s3 cp /mnt1/disk.img s3://bucket-name/disk.img --endpoint-url https://tos-s3-cn-beijing.ivolces.com
- 上传完成后,通过控制台修改文件权限为公共读
- 点击详情,获取TOS地址
- 登录镜像控制台,点击导入镜像,输入获取的镜像地址,选择正确的操作系统版本,并点击确定,开始镜像导入
如果您有其他问题,欢迎您联系火山引擎技术支持服务