首先,要供认:不,我没有进行应有的备份。
二,情况:
我有一台运行固态硬盘Fedora 25的Dell XPS 9550 。
当我被告知我试图保存到只读文件系统时,我正在处理文件并尝试保存它。原来我的文件系统现在是只读的,到处都是I / O错误。
我可以通过打开的网络浏览器将文件发送给自己来保存一些文件,但是该文件崩溃了,因此我无法重新启动它。但是我仍然在编辑器中打开了感兴趣的文件。我似乎无法将文件保存在任何地方,但可以复制它们的内容。只要我能找到一种方法来提取文件内容,就可以节省数月的工作。
但是有一些可怕的局限性。我试图插入USB驱动器,但是似乎没有设备可以代表它,并且该mount
命令以段错误终止。我可以尝试通过ssh切换到另一台计算机,但是出现“总线错误”并且死了。ping
,dmesg
,ifconfig
,所有这些工作。但是我确实有vim
and less
和ls
and可以生成新bash
实例。
没有lynx
,没有firefox
,没有google-chrome
。没有DVD驱动器。
基本上看来我的SSD已经死了。也许是整个主板。我的内存中仍然有很有价值的文档,我有IP地址和网络连接,我可以运行一些随机命令,并且可以尝试的路径上还有3500个。
cat
并且gcc
似乎起作用。我可以写入/ tmp中的文件。我有一个正在运行的ipython
实例似乎仍然可以正常工作。
所以...到目前为止我尝试过的都失败了。但是我觉得仍然有上千种可能性。我没有考虑什么?我怎么可能从快死了的计算机上删除这些文件?
一定有办法。
更新:新东西:
- 由于自己的愚蠢,我失去了网络连接。
- 我写了一个Python脚本来替换
cp
和cp -r
- 除非我找到某种方法来创建
/dev
SD卡或USB驱动器的条目,否则获取数据的最佳选择似乎是屏幕,可能还有扬声器/音频电缆。 - 我正在编写一个脚本以尝试读取文件并输出可读的文件。
建议还是很欢迎的!
更新2:较新的东西:
- 在垂死的计算机上,我编写了一个Python脚本,该脚本将一点一点地读取文件,并尝试通过以一种颜色或另一种颜色闪烁屏幕来传达这些位。现在,它正在尝试编写一个两位代码,其中红色,绿色,蓝色和白色都代表两位。不过,这种方法效果不佳,因此我可能只切换为两种颜色,一次只做一次。
- 在我的另一台笔记本电脑上(我为这个热门的新XPS放弃了可信赖的旧Thinkpad),我编写了一个脚本,该脚本使用OpenCV Python库从网络摄像头读取。想法是让它解码另一台计算机发送的代码。麻烦的是,来自摄像机的帧速率约为每秒15帧,这意味着如果我进行完美无误的传输,则我的最大数据速率将为每秒30位,即每秒225字节。每天324k。
- 在快要死的XPS上,我可以
tar
将所需的文件打包到一个单独的档案中,该档案为1.7 MB。不幸的是,gzip
,bzip2
,xz
,lzop
和任何压缩实用程序不可用。但是使用Python的zlib
模块,我可以将此文件压缩到820KB。在这种大小的情况下,我可能会在几天内将其发送出去。 - 因为这种传输方法很容易出错,所以我将在XPS上实现汉明码,以便在传输数据时添加一些错误校正。
- 可能会发生并发症,因为这就是发生的情况,但是至少可以肯定地看出这些数据的可行性!
- 由于这仍然是发送数据的麻烦方式,因此我对USB串行驱动程序进行了更多研究。我试图要装载的模块(
usb-serial-simple
,usb-debug
,safe-serial
)给I / O错误。我也不认为它是内置在内核中的,因为不存在/ dev / ttyUSB *设备。
到目前为止,感谢大家的建议-我知道这甚至不是一个明确的问题,因为你们事先不知道可以读取或不读取哪些程序/文件。仍然比这种视频方法更好的建议!
更新3:最新资料
- 我有一个PS3 Eye网络摄像头,在禁用了它的自动增益和曝光功能之后,尽管每秒错误1字节,但仍成功地从XPS读取数据。这是一个巨大的成功-首次泄漏了数据!但是速度太慢,无法在任何合理的时间内取出我的820KB,错误率也太高。
- 问题在于,写入终端的速度太慢。屏幕更新与即时更新完全不同,(我认为)要感谢
urxvt
我可以访问的终端仿真器的运行速度。 - 我发现可以访问XPS上的Rust编译器。我使用Rust重新编写了传输脚本,以查看这是否可以提高终端刷新速度,但是并没有帮助。
- 因为我不太可能提高帧速率,所以我不得不尝试增加每帧获取的数据量。我当前的方法如下所示:
右半部分仍然是时钟信号,不断闪烁以指示新帧的到来。但是,现在左侧是一个网格,其中每个单元格的角落都用一个红色正方形标记,然后从红色正方形开始向右和向下闪烁的绿色单元格会不断闪烁,以指示一点。红色方块应使接收方计算机校准单元的位置。到目前为止,我还没有任何数据,但这就是我正在研究的内容。
- 有人建议我考虑编写QR码,而不是这些临时的颜色模式。我也将对此进行研究,也许可以实现它而不是这种网格方法。纠错将是一个不错的选择,并且能够使用标准库进行解码。
- 我了解到我可以访问libasound(ALSA声音库),但不能访问与其关联的头文件(
alsa/asoundlib.h
或其他文件)。如果有人知道如何在不使用标题的情况下使用共享库,或者可以帮助我编写正确的标题以使我产生音频输出,那么我可以采用基于音频的方式来取出文件。 - 或者,如果有人可以在没有访问libusb的情况下帮助我操纵USB设备,那么也许我可以做些什么?
向前进!
更新4:产生音频输出!
用户Francesco Noferi做得很出色,帮助我利用了先前更新中提到的ALSA库。C编译器有问题,但是使用Rust编译器,我可以使用FFI直接调用libasound
。现在,我已经通过音频播放了很多数据,听起来像是音乐!仍然需要建立一个真实的沟通渠道,但是我感到非常有希望。在这一点上,我的工作基本上是实施调制解调器,因此,如果有人对如何执行此操作有任何指导,那我将不胜感激。理想的调制方式是易于手工实现和解调,而我可以使用现有的库。由于这可以直接通过音频电缆而不是通过电话网络进行传输,因此从理论上讲 我们可以做的比56kbps更好,或者比今天的标准要好得多,但实际上,谁知道我们会得到什么。
感谢这里和/ r / techsupportmacgyver和/ r / rust的每个人都提出了许多出色的建议。即将实施此“调制解调器”,然后我将以结尾词结尾。我想我可能会将我的代码放在将来供其他绝望的人使用的地方-甚至可能是一个易于手动输入到即将死机的奇怪的渗透工具的存储库?我们将看看会发生什么。
更新5:我花了很长时间与ALSA和我便宜的StarTech USB音频捕获设备(接收笔记本电脑中没有内置线)进行搏斗,许多错误的尝试开始尝试使用我自己的传输协议,但最终还是得到了一些建议我的业余无线电爱好者朋友实现了以150波特运行的 RTTY线路协议,实际上,该协议每秒可以提供大约10个字节。它不是超级快,但是相当可靠。我几乎完成了传输820KB文件的操作,并使用CRC32校验和(使用了Python的crc32功能进行了验证)zlib
模块,我可以访问)。因此,我宣布胜利,并再次感谢我!我将花费更多时间来查找更多可读且可以传输的文件,但是基础已经就位。与大家一起工作很有趣!
最后更新:
在染色机上:
$ tar cf ./files
$ ./checksum.py ./files.tar 9999999
Part 1 checksum: -1459633665
$ ./zlib_compress.py ./files.tar
$ ./checksum.py ./files.tar.z 9999999
Part 1 checksum: -378365928
$ ./transmit_rust/target/debug/transmit ./files.tar.z
Transmitting files.tar.gz over audio using RTTY
Period size: 2048
Sample rate: 44100
Samples per bit: 294
Sending start signal.
Transmitting data.
nread: 2048
nread: 2048
...
nread: 2048
nread: 208
Transmission complete. Sending hold signal.
在救援机器上:
$ minimodem --rx -8 --rx-one -R 44100 -S 915 -M 1085 --startbits 3
--stopbits 2 --alsa=1 150 -q > ./files.tar.z
$ ./checksum.py ./files.tar.z
Part 1 checksum: -378365928
$ ./zlib_decompress.py ./files.tar.z
$ ./checksum.py ./files.tar
Part 1 checksum: -1459633665
:-)
python -m SimpleHTTPServer
。现在,您是通过共享文件的HTTP服务器在端口8000。在同一网络中的其他设备上打开浏览器,然后键入以下内容: http://<IP address>:8000
并开始下载所有内容。