硬盘故障后从 ramdisk 恢复数据

硬盘故障后从 ramdisk 恢复数据

我目前有一个 proxmox 主机,该主机的磁盘出现故障,运行一个虚拟机,该虚拟机在使用 tmpfs 创建的 ram 磁盘中托管游戏服务器。不幸的是,我的备份脚本似乎已经好几天没有工作了,因此目前没有保存到磁盘的文件的最新副本,这些文件本来可以从 RAID 阵列中恢复。

客户机运行的是 Debian 10,整个系统似乎处于只读状态。此外,我无法通过 ssh(或 Web 界面)访问 proxmox 主机

大多数命令都会失败-bash: /usr/bin/(program): Input/output error,但我仍然可以读取/写入 ramdisk 目录本身。我还可以与客户机建立新的 ssh 连接。

我尝试过的事情:

有没有办法恢复 ramdisk 目录中的文件?

答案1

使用sshcatecho在远程 Linux 机器上,您可以发送/接收文件。

获取文件(从 ramdisk 到远程):

ssh username@ramdisk-ip "cat path/to/remote/file.7z" > copy_of_file.7z

传输文件(从远程到 ramdisk):

cat localFile| ssh username@ramdisk-ip "cat > /path/to/destination/file"

我可以使用这些命令将 7zip 的二进制文件发送到 ramdisk,从而创建包含所有游戏文件的档案。

从这里我能够使用 fetch 命令将档案复制到远程机器。

答案2

很遗憾听到您的服务器出现问题。您说大多数命令(例如 netcat 和 ssh)都会因输入/输出错误而失败,但您没有提到哪些命令可能有用工作,例如cp,,,等等。好消息是您有一个catBASHtar提示符,其中内置了一些非常有用的东西。

如果我们假设您可以访问一个工作tar命令并且可以在其他服务器上设置 netcat 监听器,那么您可以简单地运行以下命令:

$ tar cvf - /my/ramdisk/directory > /dev/tcp/<some.other.server>/<port>

其中<some.other.server>是运行 netcat 侦听器的服务器的 IP 地址,<port>是其侦听的端口。在另一台服务器上,您可以运行类似以下命令:

$ netcat -l -p <port> > backup.tar

这是因为 Debian 上的 BASH 使用“/dev/tcp”语法内置了类似 netcat 的功能。

如果tar不起作用,但是cat您可以在单个文件的基础上做类似的事情:

$ cat /my/ramdisk/directory/some/file > /dev/tcp/<some.other.server>/<port> 

另外,如果你有,cat你可以下载一个静态链接版本 busybox 到另一台服务器,并使用 netcat 将其发送到您有问题的 VM。在 Debian 上,可以在“busybox-static”包中找到静态链接的 busybox。在那台服务器上,您可以运行如下程序:

$ netcat -l -p <port> < /bin/busybox

然后在虚拟机上运行如下命令:

$ cat /dev/tcp/<some.other.server>/<port> > /my/ramdisk/directory/busybox
$ chmod +x /my/ramdisk/directory/busybox
$ /my/ramdisk/directory/busybox tar ...

如果你没有,cat事情会变得棘手很多,但可能还是可行的。如果是这种情况,请编辑你的问题。

希望这会有所帮助并祝你好运!

相关内容