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

推荐订阅源

腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - Franky
博客园_首页
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
IT之家
IT之家
The Cloudflare Blog
V
Visual Studio Blog
罗磊的独立博客
T
Tailwind CSS Blog
S
SegmentFault 最新的问题
Hugging Face - Blog
Hugging Face - Blog
V
V2EX
阮一峰的网络日志
阮一峰的网络日志
D
Docker
Last Week in AI
Last Week in AI
B
Blog RSS Feed
C
Check Point Blog
J
Java Code Geeks
The GitHub Blog
The GitHub Blog
有赞技术团队
有赞技术团队
博客园 - 聂微东
MongoDB | Blog
MongoDB | Blog
雷峰网
雷峰网

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派
当云服务器崩溃时,我是如何救援重要数据的 - 少数派
2024-07-02 · via 少数派

周五的时候我的服务器突然内核报错,连不上 ssh 也 无法重启。经过了迂回的各种抢救方案,终于救回了一千多张图床的的图片,心有余悸,记录一下救援过程,顺便折腾了一套新的图床方案。

服务器救援

这台服务器大约已经稳定运行了一年半,运行了我许多重要服务,还有我博客图床的一千多张无备份的图片通过 Docker Volume 持久化在主机上。

服务器宕机

其实我至今仍不知道出了什么问题,早上刚好需要更新服务器上的我运行的 RSSHub 实例的镜像版本,于是想着干脆把所有服务都更新到最新吧,于是一通 docker pulldocker-compose 重启操作,前面的都没什么问题,直到最后一个服务突然启动容器失败,报了一个类似 not enough space 的错误,我心想着可能是下载的镜像太多了导致磁盘满了,于是又一通 docker image prune --alldocker volume prunedocker system prune 操作,释放出了接近 10G 的空间,重试,依然不行。

作为一个有且仅有一点服务器运维经验的开发来说,我第一反应想到的就是重启,未曾想,这才是一天噩梦的开始。

DpEIbC2WUo9XGgx4PoLcEaLinGf

没想到重启后我的 Uptime Kuma 提醒我所有服务都下线了,也无法再通过 ssh 连上机子了。

KCyibCBPTogkAYxCuXOcjUEEnIg

于是赶紧登录到服务器的线上控制台,发现内核报错,无法启动,强制重启也依然不生效,并且赶紧求援我的 DevOps 朋友们。

拯救数据

STRRL 说应该 rootfs 出现了问题,不过鉴于我的服务器云厂商并没有提供什么高级启动等额外的功能,这条路堵住了。但想到我有一年半毫无备份的图床数据在上面,依然不甘心,于是开始想办法抢救数据。

Rj41b42odoBQ5PxQbcbcuytQnTf

研究了一下服务器的控制台,发现它提供一个大约每周一次的备份,并且可以一键将备份转为快照,最近的一次在 6 月 22 日,还好。我首先想到的是直接通过快照恢复机器,如果是我今天的操作导致了什么配置问题,那理应一周前的快照是能正常启动的,于是满怀信心地等待了十几分钟的快照恢复,结果报了同样的错误。依然不死心,把 6 月 15 的备份也恢复了一下,还是不行。

这下意识到了事情的严重性,甚至做好了数据全部丢失的最坏打算,同时开始检索类似情况,最后发现服务器的快照镜像是可以下载的。

于是先下载了快照镜像,得到了一个 .disk 文件,这个文件应该是一个专属格式,可以通过 Virtual Box 的命令行工具 vboxmanage convertfromraw 来进行格式转换,但官网下载后发现并不支持 M 芯片的 Mac,于是又在之前的老 19 款 Intel Mac 上安装并且执行转换,得到了一个 .vmdk 文件。

转换完成后将这个 .vmdk 作为一个磁盘挂载到 Virtual Box CentOS 虚拟机上,发现依然报同样的错误。

GjSFb2nmyoyVbgxMEK4cd9t7noe

于是另辟蹊径,发现 7-Zip 软件支持常见虚拟机格式的解压,但客户端只有 Windows 版本。

HIZGbOm1FoJLjqx17chcQcuOnke

虽然按理说可以在 macOS 上使用命令行版本 p7zip 来执行,但我解压时会报错,所以又堵住了一条路,想了个曲线救国的方式,通过虚拟机下载了一个 Win11,下载了 7-Zip 软件直接解压成功了。

问题又来了,解压得到的是 1.img2.img 这样格式的 Linux 磁盘镜像文件,macOS 上无法加载,又用 fuse 折腾了一下,还是无法加载。

A4VxboRf7o3SXExEJuTca6BgnQd

期间倒也是有好消息,在全网搜罗的时候发现了一个数据恢复软件 UFS Explorer,尝试了一下可以正常加载,只是超过 768k 的文件则需要付费,当然没打算,看到文件确实是可以识读之后心里就安心了许多,至少数据还在,剩下都是技术问题了。

STRRL 告诉我 OrbStack 可以启动一个 Linux Machine,然后可以把这个 img 作为一个 Linux 磁盘挂载上去。

sudo losetup -fP 1.img
mkdir /mnt/bwg

sudo mount /dev/loop0 /mnt/bwg

通过以上命令成功把我的 img 磁盘镜像挂载到了 OrbStack 的 Ununtu 机器上。

Q1Ygb0O9FoDsv5xOSeLc36oVnxb

当我看到我的图片出现在命令行输出结果时,感动得都快流泪了 😭。

tar -czvf cheverto_chevereto_images.tar.gz cheverto_chevereto_images/

rsync -acvP ./cheverto_chevereto_images.tar.gz pseudoyu@[yu-mac-studio]:~/Downloads/
HQscbjZ6LolKM0xrOqecqQIznpd

紧接着赶紧打个 tar 包,然后通过 rsync 传到了我本地的 Mac 上,本机解压后,终于看到了我所有的图片。

迁移图床系统至 r2

但由于这一次的遭遇,不再信任服务器单机部署的图床稳定性了,花了半天折腾了一套新的免费图床系统 —— 「从零开始搭建你的免费图床系统 (Cloudflare R2 + WebP Cloud + PicGo)」。

UoHHb8TBAoMmIux9zbqcBK6tnh9

至于现有的数据传到 r2,我则是使用了 rclone 来进行上传,彻底完成迁移,大功告成!

总结

经过这么一次,我也开始重新考虑了服务部署、数据安全等问题,准备还是将一些重要的数据上云而不再依赖单机,也继续把一些服务迁移到 fly.io、Zeabur 等 serverless 平台。

> 下载少数派 客户端、关注 少数派小红书,感受精彩数字生活 🍃

> 实用、好用的 正版软件,少数派为你呈现 🚀