Во-первых, признание: нет, я не делал резервных копий, которые должен был иметь.
Во-вторых, ситуация:
У меня Dell XPS 9550 с твердотельным диском под управлением Fedora 25 .
Я работал над файлом и попытался сохранить его, когда мне сказали, что я пытаюсь сохранить его в файловой системе только для чтения . Оказывается, моя файловая система теперь доступна только для чтения, и везде возникают ошибки ввода-вывода .
Мне удалось сохранить некоторые файлы, отправив их по электронной почте через открытый веб-браузер, но это не помогло, и я не могу перезапустить его. Но у меня все еще есть интересующие файлы, открытые в редакторе. Кажется, я нигде не могу сохранить файлы, но могу скопировать их содержимое. Если бы я только мог найти способ удалить содержимое файла, я бы сэкономил себе месяцы работы.
Но есть некоторые ужасные ограничения. Я попытался вставить USB-накопитель, но ни одно из устройств не представляет его, и mount
команда умирает с ошибкой сегмента. Я могу попробовать ssh к другому компьютеру, но я получаю «ошибку шины», и она умирает. ping
, dmesg
, ifconfig
Ни одна из этих работ. Но у меня есть vim
и less
и ls
и может порождать новые bash
экземпляры.
Нет lynx
, нет firefox
, нет google-chrome
. Там нет DVD-привода.
Похоже, мой SSD умер. Или, может быть, вся материнская плата. У меня в архиве есть ценные документы, у меня есть IP-адрес и сетевое соединение, я могу выполнить несколько случайных команд и еще 3500 на пути, который я могу попробовать.
cat
и gcc
похоже на работу. Я могу писать в файлы в / tmp. У меня есть работающий ipython
экземпляр, который все еще работает.
Итак ... то, что я пробовал до сих пор, провалилось. Но я чувствую, что есть еще тысяча возможностей. Что я не рассматриваю? Как я мог получить эти файлы с моего умирающего компьютера?
Должен быть способ.
ОБНОВЛЕНИЕ : Новые вещи:
- Я потерял сетевое соединение из-за собственной глупости.
- Я написал скрипт на Python для замены
cp
иcp -r
- Если я не найду способ создать
/dev
запись для SD-карты или USB-накопителей, то мои лучшие ставки для вывода данных - это экран и, возможно, динамики / аудиокабель. - Я пишу сценарий, чтобы попытаться прочитать файлы и вывести, какие из них доступны для чтения.
Предложения по-прежнему очень приветствуются!
ОБНОВЛЕНИЕ 2 : более новые вещи:
- На умирающем компьютере я написал скрипт на Python, который будет поочередно читать файл и пытаться передать эти биты, мигая экраном одного цвета или другого. Сейчас он пытается создать двухбитный код, где красный, зеленый, синий и белый представляют двухбитную пару. Однако это не очень хорошо работает, поэтому я мог бы просто переключиться на два цвета и делать по одному.
- На другом моем ноутбуке (старом надежном Thinkpad, который я отказался от этой горячей новой XPS) я написал скрипт, который читает данные с веб-камеры с помощью библиотеки OpenCV Python. Идея состоит в том, чтобы он декодировал коды, отправленные другим компьютером. Проблема в том, что частота кадров с камеры составляет примерно 15 кадров в секунду, что означает, что если бы у меня была идеальная, безошибочная передача, моя максимальная скорость передачи данных была бы 30 бит в секунду, то есть 225 байтов в секунду. Это 324 КБ в день.
- На умирающем XPS я могу
tar
упаковать нужные файлы в один архив, который составляет 1,7 МБ. К сожалению,gzip
,bzip2
,xz
,lzop
и независимо от сжатия утилиты недоступны. НО используяzlib
модуль Python, я могу сжать этот файл до 820 КБ. Учитывая этот размер, я мог бы, вероятно, отправить эту вещь через пару дней. - Поскольку этот метод передачи, вероятно, будет очень подвержен ошибкам, я собираюсь реализовать коды Хемминга на XPS, чтобы добавить некоторую коррекцию ошибок при передаче данных.
- Скорее всего, будут осложнения, потому что это то, что происходит, но, по крайней мере, кажется возможным выполнимо получить эти данные!
- Так как это все еще довольно неудачный способ отправки данных, я больше посмотрел на USB-драйверы для последовательного порта. Модули Я пытался загрузить (
usb-serial-simple
,usb-debug
,safe-serial
) дают I / O ошибки. Я не думаю, что он встроен в ядро, потому что там нет устройств / dev / ttyUSB *.
Спасибо за все предложения на данный момент - я знаю, что это даже не вполне определенный вопрос, так как вы, ребята, заранее не знаете, какие программы / файлы можно читать или нет. Все еще открыт для лучших предложений, чем этот видео подход!
ОБНОВЛЕНИЕ 3 : Новые вещи
- У меня есть веб-камера PS3 Eye, и после отключения ее автоматического усиления и экспонирования я успешно считываю данные с XPS, хотя и с ошибкой в 1 байт в секунду. Это большой успех - первые данные отфильтрованы! Но скорость слишком медленная, чтобы вывести мои 820 КБ в любое разумное время, и уровень ошибок слишком высок.
- Проблема в том, что запись в терминал происходит слишком медленно. Обновления экрана не похожи на мгновенные, спасибо (я думаю) медлительности
urxvt
эмулятора терминала, к которому у меня есть доступ. - Я обнаружил, что у меня есть доступ к компилятору Rust на XPS. Я переписал скрипт передачи, используя Rust, чтобы посмотреть, улучшит ли это скорость обновления терминала, но это не помогло.
- Поскольку я вряд ли смогу увеличить частоту кадров, мне придется постараться увеличить объем данных, получаемых за кадр. Мой текущий подход выглядит примерно так:
Правая половина все еще является тактовым сигналом, который мигает, чтобы отметить появление новых кадров. Но теперь слева - это сетка, где каждая ячейка помечена красным квадратом в углу, а затем зеленая ячейка справа и вниз от красного квадрата мигает и выключается, чтобы указать немного. Красные квадраты должны позволить принимающему компьютеру откалибровать расположение ячеек. У меня пока нет данных, но я над этим работаю.
- Кто-то предложил мне заняться написанием QR-кодов вместо этих специальных цветовых схем. Я тоже собираюсь разобраться в этом и, возможно, реализовать это вместо этого сеточного подхода. Исправление ошибок было бы хорошим преимуществом, а также возможность использовать стандартные библиотеки для декодирования.
- Я узнал, что у меня есть доступ к libasound (звуковая библиотека ALSA), но не к заголовочным файлам, связанным с ним (
alsa/asoundlib.h
или чем-то еще). Если кто-то знает, как использовать разделяемую библиотеку без заголовков, или может помочь мне написать только правильный заголовок, позволяющий мне выводить аудио, тогда у меня может быть аудио-способ вывода файлов. - С другой стороны, если кто-то может помочь мне манипулировать USB-устройствами без доступа к libusb, то, возможно, я мог бы что-то с этим сделать?
Двигаться вперед!
ОБНОВЛЕНИЕ 4 : аудио выход произведен!
Пользователь Francesco Noferi проделал большую работу, помогая мне использовать библиотеку ALSA, упомянутую в предыдущем обновлении. У компилятора C была проблема, но с помощью компилятора Rust я смог использовать FFI для прямого вызова libasound
. Теперь я проиграл кучу своих данных через аудио, и это звучит как музыка для моих ушей! Все еще нужно установить реальный канал связи, но я чувствую себя очень обнадеживающим. На данный момент моя работа в основном заключается в реализации модема, так что, если у кого-то есть какие-либо рекомендации относительно хороших способов сделать это, я весь слух. В идеале модуляцию, которую легко реализовать вручную, и демодуляцию, для которой есть существующая библиотека, которую я могу использовать. Так как это может идти напрямую через аудиокабель, а не через телефонную сеть, теоретически мы можем сделать намного лучше, чем 56 кбит / с или любой другой стандарт, но на практике кто знает, что мы получим.
Спасибо всем, кто следит за этим здесь и на / r / techsupportmacgyver, а также на / r / rust, которые внесли множество отличных предложений. Собираюсь внедрить этот «модем» в ближайшее время, а затем я закончу это эпилогом. Я думаю, что я мог бы разместить свой код где-нибудь, чтобы другие отчаянные люди могли использовать его в будущем - может быть, даже хранилище странных инструментов эксфильтрации, которые легко набрать в умирающую машину вручную? Посмотрим что получится.
ОБНОВЛЕНИЕ 5 : Мне потребовалось много времени на борьбу с ALSA и моим дешевым USB-устройством захвата звука StarTech (без встроенной линии на принимающем ноутбуке), и многие фальстарты пытались свернуть мой собственный протокол передачи, но, наконец, по совету Мои друзья-радиолюбители Ham Я реализовал линейный протокол RTTY со скоростью 150 бод, что на практике дает примерно 10 байтов в секунду. Это не супер быстро, но это довольно надежно. И я почти закончил передачу своего файла 820 КБ, проверенного с помощью контрольных сумм CRC32 (используя функциональность crc32 из Pythonzlib
модуль, к которому у меня есть доступ). Итак, я объявляю победу и хочу еще раз поблагодарить! Я потрачу еще немного времени на поиск дополнительных файлов, которые можно будет прочитать и которые я могу передать, но основа на месте. Было весело работать со всеми вами!
ЗАКЛЮЧИТЕЛЬНОЕ ОБНОВЛЕНИЕ :
На умирающей машине:
$ 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
и начните скачивать все, что можете.