惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cisco Talos Blog
Cisco Talos Blog
K
Kaspersky official blog
T
The Exploit Database - CXSecurity.com
NISL@THU
NISL@THU
AWS News Blog
AWS News Blog
V2EX - 技术
V2EX - 技术
Google DeepMind News
Google DeepMind News
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
Security @ Cisco Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Recent Commits to openclaw:main
Recent Commits to openclaw:main
J
Java Code Geeks
Microsoft Azure Blog
Microsoft Azure Blog
Attack and Defense Labs
Attack and Defense Labs
Jina AI
Jina AI
The Last Watchdog
The Last Watchdog
W
WeLiveSecurity
H
Help Net Security
V
Visual Studio Blog
宝玉的分享
宝玉的分享
C
Cybersecurity and Infrastructure Security Agency CISA
T
Threat Research - Cisco Blogs
IT之家
IT之家
Hugging Face - Blog
Hugging Face - Blog
Latest news
Latest news
T
Tor Project blog
I
Intezer
美团技术团队
GbyAI
GbyAI
T
Tailwind CSS Blog
Last Week in AI
Last Week in AI
博客园 - 三生石上(FineUI控件)
Google DeepMind News
Google DeepMind News
Scott Helme
Scott Helme
Y
Y Combinator Blog
博客园 - 司徒正美
T
Tenable Blog
O
OpenAI News
N
News and Events Feed by Topic
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
V
Vulnerabilities – Threatpost
P
Palo Alto Networks Blog
博客园 - 聂微东
酷 壳 – CoolShell
酷 壳 – CoolShell
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Threatpost
Google Online Security Blog
Google Online Security Blog
Apple Machine Learning Research
Apple Machine Learning Research
云风的 BLOG
云风的 BLOG
Help Net Security
Help Net Security

Lss233's.Blog()

10 分钟快速入门垃圾回收机制 2022: 艰难,但充满希望 MiniDB 开发手札2 - 网络通信: PostgreSQL 服务端实现 MiniDB 开发手札1 - 概览 HELLO: 2022 OpenVINO + YoloV5 目标视觉炼丹流程简述 使用 Tinc 组建虚拟内网,并接入 DN42 TOJ 1175 - 线段树模板题 HDU 1671 - Phone List HDU 1257 - 统计难题 于是乎,我就这样活过了2020:这是一篇年末总结 这个Lss233一事无成却敢写年末总结:2019,再见啦。 新技能学习:教你如何阅读Java字节码 让我们用PGP进行安全地交流吧!
噩梦24小时:记一次服务器迁移与宕机过程
Lss233 · 2019-02-09 · via Lss233's.Blog()

有句俗语叫:If it ain't broke, don't fix it. 今天真是见识到了。

0x0000 起因

在昨天(2月8日) 17时,本人收到了Cloudcone发来的春节优惠邮件。

在一番激烈的思想斗争下,下单了一个看上去更便宜的套餐。打算把服务器迁移过去。

0x0001 噩梦

几分钟后,服务器创建完毕。

发现控制面板居然没有像搬瓦工那样方便的服务器迁移菜单,自己又懒得手动迁移,于是就发了份工单给客服询问有没有什么办法。

17:30

技术人员小哥开始帮我迁移数据。

他的操作非常简单粗暴,直接把旧服务器的硬盘挂载到新服务器上,再把新服务器的硬盘挂载到旧服务器上。

听起来是没什么问题,那位小哥也没继续回复我。

然而他没有料到,两台服务器的IP地址是静态设置的,写死在`/etc/networks/interfaces`里,这位小哥没有给我改过来,这导致两台服务器都不能访问网络。

无奈之下,我只好回复他,请他帮忙修改地址,顺便帮我调整好硬盘大小。

次日0:00

距离我的回复已经过去3个小时,

那位技术人员小哥没有回复

见鬼了,怎么办?!

我打开面板,看见有一个开启IPv6的选项。 开启IPv6应该会重新配置网络,说不定能把IP问题修好呢?

抱着侥幸的心理,我点了。服务器重新启动。

几分钟后,成功了。服务器可以上网了!

然而,咱又遇到了新的问题。这个服务器的IP地址比较特殊,它在国内访问会显示连接超时,而在其他地方却没有问题。很明显,这个服务器的IP被[数据删除]了。

0:30

我还没有睡。在百度上稍微搜索了一下,得到两种解决方法:

  1. 删除服务器,重新购买。
  2. 发工单申请更换IP,但需要$2。

由于之前的技术小哥帮我把硬盘挂载在了新服务器上,如果直接删除,那么数据也肯定跟着一起没掉了,所以排除方法1。

我创建了一个Urgent工单,申请更换IP,。

几分钟后

很快,就有一个工程师回复我了。他是这样说的:Your request is sent to our network team, please allow some time while they get it processed for you.

我的内心:诶,不错啊这服务态度。

抱着侥幸的心理,我在这个工单里问能不能帮我把硬盘大小的问题也给处理了。

我刚刚回复完。刷新了一下浏览器,就看见另外一个工程师回复我:Your request is sent to our dev-ops team, please allow some time while they get it processed for you.

我:???

完了。这俩人是机器人没跑了。

看自己的账户,$2也没有扣掉。先睡觉吧,说不定明天早上就好了呢。

睡之前回复了一句:Thank you, please be quick. My service have been shutdown for over 8 hours, my users are complaining, please understand.

10:00

我大概是这个时候醒的。登录网站看看情况解决了没有。

最早帮我迁移的小哥还是没有回复我。第二个工单在我回复没多久之后就回复了一句:你可以在我们dev-ops回复之前照常使用你的服务器。

照常个鬼啊,根本用不了啊。这都什么鬼回复模板。

11:00

不等了,估计他们是打算直接把我凉着了。

现在我有两台服务器:

  1. 本来就有的一台 chocolate,挂载硬盘30GB,无法访问网络。
  2. 前面下单的一台 darksky,挂载硬盘25GB,可以访问网络。

想了一个简单的思路:

  1. 重新安装chocolate上的系统,腾出空间。
  2. 使用 ssh 和 dd 把 darksky上的硬盘复制到 chocolate 上。
  3. 删除 darksky。
  4. 重新下单一台服务器。
  5. 把在chocolate上的数据迁移到新下单的服务器上。

看上去挺简单的,就像写程序的时候交换两个变量一样。

11:18

下单了新的服务器,系统安装好之后惊呆了,IP地址和之前的居然是一样的。

删除,重新下单。

又是一样的。

看来他们还是按顺序提供分配IP的,也就是说,必须要有一个倒霉鬼下单得到那个IP之后,我下单才会得到新的IP。

这大中午的,谁会买啊。

11:22

我想到了一个绝妙的好主意。

先下单一个价格最低的服务器,它会分配到那个不能用的IP。再下单我想要的服务器,这样就可以啦!

0x0002 第二个噩梦

复制数据很简单是吧?我一开始也是这样想的。

在百度上搜索了一下,原来有种东西叫 SSHFS。 它可以通过SSH协议把远程的服务器挂载到本地上。

于是我的做法是:把硬盘镜像mount到chocolate/mnt上,再通过SSHFS把chocolate/mnt 挂载到新服务器的 /mnt上。

11:52

重启新服务器,发现使用旧的用户名和密码可以登陆。

太棒了!

诡异的事情来了,登陆成功之后,还没有看见bash,就重新退回到登陆界面了。现在想想,应该是某个支持库没有复制过来,导致bash无法启动。

看来SSHFS这条道不行,重新安装。 对了,新的服务器叫vanilla。

很久以前曾经用tar配合netcat迁移过数据。通过管道,分别在发送端和接收端执行:

# 接收端
netcat -l -p 7000 | tar x
# 发送端
tar cf - * | netcat 接收服务器 7000

试试吧。

14:46

我把MobaXterm自带的小游戏玩了个遍。终于知道为什么一个好好的终端软件带这么多游戏干什么了。

我重试了好几次,每次都是执行到一半,ssh断开连接,Vanilla整个系统无法响应。

看来这个方法也是不行了。应该是因为在覆盖的某个重要lib文件的时候整个系统崩溃。

这个服务商提供的服务器都是KVM,可以访问Recovery模式,看来只能用这种方法了。

Recovery模式和Windows的PE系统差不多,是挂载到内存上的系统。因此我们怎么修改硬盘都和它没有关系。

16:00

Recovery的系统可真是简洁。没有apt,也没有gcc。这意味着我用不了SSHFS这种方法了。

不过ssh和scp倒是能用。我挂载了本地硬盘,使用scp把远程上的服务器复制到本地。

问题#1

SCP复制的时候进度一直是0%,而且最后的文件大小居然超过了25GB!

一看才发现,整个程序卡在复制虚拟设备 /dev/core 上。

问题#2

历尽千辛万苦终于复制完数据,回到面板把Recovery模式关闭。这个按钮点了半天没有反应。他们面板的开发人员怕不是写了个假的按钮吧。

好在本人对Html和JavaScript也略知一二,打开F12看了一下,是一个表单。手动执行一下submit();完事。

16:15

成功进入系统了,但是发现好像少了很多东西,和没有复制几乎没区别。

什么玩意啊。

无奈,还是只能走SSHFS的方法。

0x0003 重新上线

功夫不负有心人,在走了N次弯路之后,服务器终于恢复正常了。

16:25

在复制lib文件夹的时候。第一次把文件复制错了位置。从 /mnt/usr/lib 复制到了 /usr/lib/里。第二次执行到一半,发现在覆盖 libglib的时候,SSHFS废了。

庆幸自己第一次复制错了没有删除,为了安全起见我在VNC下完成了覆盖。

18:09

MySQL不知道因为什么原因无法启动,日志报错Could notcreate unix socket lock file /var/run/mysqld/mysql.sock.lock。

在尝试了各种方法之后,发现把socket的路径指向 /tmp 里面就可以了。

/tmp/var/run 都挂载在tmpfs下。我在复制的时候没有注意,覆盖了 /var/run

也就是说,重启可以解决问题。

18:11

网站成功上线!

截止至网站上线,两个工单还是没有人回复,之前换IP的申请也没有扣款。

虽然网上很多人表示Cloudcone的工单都是秒回,但这次的事件真的让我担心日后的使用。

就这样吧。

2019-2-9 20:34:19