我目前有一个 proxmox 主机,该主机的磁盘出现故障,运行一个虚拟机,该虚拟机在使用 tmpfs 创建的 ram 磁盘中托管游戏服务器。不幸的是,我的备份脚本似乎已经好几天没有工作了,因此目前没有保存到磁盘的文件的最新副本,这些文件本来可以从 RAID 阵列中恢复。
客户机运行的是 Debian 10,整个系统似乎处于只读状态。此外,我无法通过 ssh(或 Web 界面)访问 proxmox 主机
大多数命令都会失败-bash: /usr/bin/(program): Input/output error
,但我仍然可以读取/写入 ramdisk 目录本身。我还可以与客户机建立新的 ssh 连接。
我尝试过的事情:
scp
(输入/输出错误)sftp
(暂停)nc
(输入/输出错误)- 任何http 静态服务器一行代码大列表(输入/输出错误)
有没有办法恢复 ramdisk 目录中的文件?
答案1
使用ssh
,cat
并echo
在远程 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
,,,等等。好消息是您有一个cat
BASHtar
提示符,其中内置了一些非常有用的东西。
如果我们假设您可以访问一个工作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
事情会变得棘手很多,但可能还是可行的。如果是这种情况,请编辑你的问题。
希望这会有所帮助并祝你好运!