HUANGWANG'S BLOG

记一次腾讯云实例迁移

迫于最近的一台Debian 9的实例即将过期,本着节约资金的原则,又开了一年的学生机。

原由

1核1G, 50G数据盘,50G系统盘,当初搭建环境的时候,也是考虑十分不足,为今天埋下了坑。因为Mysql上要存储大量的数据(高达30G),故将mysql所在的文件夹/usr放在了数据盘,并清空了系统盘上的/usr内的所有文件(掩面)。

行动

一开始迁移的时候是这么考虑的,将系统盘制作镜像,数据盘制作快照并新建硬盘,挂载在新的实例上。殊不知却忽视了制作系统镜像时的小提示

Linux实例制作自定义镜像请确认 /etc/fstab不包含数据盘配置,否则会导致使用该镜像创建的实例无法正常启动。如果有挂载数据盘, 需要注释或删掉/etc/fstab中自行配置的数据盘的相关配置。

用过aws之后,体验qcloud,不得不吐槽一番,其制作镜像的速度真慢。当然,我这种情况,就算注释掉了/etc/fstab也是没用的,因为系统盘的/usr被我清空了。所以才导致了一下的情况。

  • 重装系统过程中,一直提示重装系统,导致我边安装边吐槽良心云真垃圾。
  • 假的重装完毕后,采用ssh无法登入,一直提示time out

此时,我也大概了解到是因为/usr确实的缘故,但Linux技术实在比较菜,不知如何下手,当时就想将原实例系统盘扩容,再将数据盘内/usr的数据迁移至系统盘,这里不得不说,qcloud居然不支持直接对系统盘扩容,只能在重装系统的时候对系统盘扩容。考虑到风险,还是先备份了全部盘,并制作了镜像,开始尝试对原实例进行重装系统,此时,考虑到原实例会自动挂载数据盘,重装后应该也不会有问题吧,结果,问题依旧,原实例都无法启动操作了。至此,深感无奈,感觉自己没什么能做的了(当时还不知道使用VNC),是不是只能在新实例上挂载数据盘,手动cp了,系统盘快照不能制作新硬盘,其上的数据是不是没希望了,当时感觉好绝望。

没办法,只能发工单了,还好,工单解决还比较顺利,也让我了解到了VNC以及Linux的各种启动模式。还行,比较顺利地完成了对原实例扩容。

接下来就是将数据盘上的内容全部转移到系统盘上,数据盘上/usr是无法直接umount的,我也是一头雾水,当时,接触到了VNC,一直想在其上突破,只可惜以失败告终。好在得到了Monad大佬的帮助,瞬时茅塞顿开。

1
2
3
mkdir /tmp/root                # 新建一文件夹用来挂载系统盘
mount --bind / /tmp/root # 将系统盘挂载至上面新建的文件夹
rsync -av /usr /tmp/root/usr # 将数据盘上的数据拷贝至系统盘中的/usr文件夹

注释或删掉/etc/fstab中自行配置的数据盘的相关配置,再重启实例大概就解决了。