Во-первых, признание: нет, я не делал резервных копий, которые должен был иметь.
Во-вторых, ситуация:
У меня 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
и начните скачивать все, что можете.Ответы:
Вот пример программы libasound с достаточным количеством определений, чтобы получить основной 2-канальный вывод wav 44.1k без заголовков.
РЕДАКТИРОВАТЬ: Я на самом деле не уверен, будет ли прямой дамп данных, как wav будет работать, так как шум при записи может легко повредить его, но вы, вероятно, можете сделать что-то вроде синусоидальной волны битов на высокой частоте, что является более надежным
РЕДАКТИРОВАТЬ 2: если aplay присутствует и работает, вы также можете использовать это и просто написать программу, которая выводит необработанный звук и транслирует его в aplay или все, что может воспроизводить аудио
EDIT3: изменил его, чтобы вообще не использовать заголовки
если -lasound не компилируется, добавьте -L / путь / где / libasound / находится / расположен
источник
gcc
дал мне «Ошибка шины» (которая возникает с некоторыми программами, но на самом деле не понимаю.) К счастью, у меня есть работающий компилятор Rust, поэтому, используя возможность RFI FFI, я реализовал ваш код выше, используя Rust. Он компилируется и работает, но я до сих пор ничего не слышу. Но я не совсем уверен, если громкость увеличена --- это может быть отключено. Но я не могу запустить alsamixer / xfce4-mixer для проверки. Я пытаюсь использовать alsalib напрямую, чтобы убедиться, что громкость повышена. Большое вам спасибо за ваши усилия в этом!Работает ли ваш HDMI или любой другой порт дисплея? Если это так, вы можете использовать устройство захвата экрана, чтобы записать его как видео и обрабатывать позже. Таким образом, не ограничиваясь частотой кадров вашей веб-камеры.
источник
Как насчет того, чтобы вы закодировали свои данные в шестнадцатеричном формате и выводили их на страницу за страницей в терминал?
Вы можете добавить префикс со смещением в двоичном файле, чтобы вы могли легко восстановить страницу (для ручной коррекции?)
Затем на другом компьютере используйте программное обеспечение OCR для сканирования страниц.
Терминал 80x25 будет выдавать 1000 байт на страницу (минус место для префикса). Таким образом, примерно на 1000 страницах вы можете получить свои данные. Даже на одной странице в секунду это меньше 20 минут.
Шестнадцатеричное кодирование легко написать, а также предоставляет необработанную форму исправления ошибок (всего 16 допустимых символов).
источник
Вы можете настроить сетевое соединение? ssh может быть слишком много, но если вы можете использовать netcat на 2 компьютерах, вы сможете передавать данные. один в режиме отправки, другой в режиме прослушивания. Если все, что вам нужно сделать, это перенести текст, то это может быть решением.
редактировать: не важно, просто прочитайте, что вы потеряли сетевое соединение, а также ..
источник
nc
не имеет никаких зависимостей, кроме функционирующего сетевого стека, который имел OP, пока он не взорвал его. Это резко снижает вероятность того, что исполняемый файл не запустится. Если кто-то столкнется с подобной проблемой, это определенно полезное решение.Вы можете отправлять сообщения по электронной почте из командной строки, включая отправку файлов.
Что-то вроде:
должно сработать.
Некоторые дополнительные примеры: http://www.binarytides.com/linux-mail-command-examples/
источник
mail
это не относится к (по сути случайному) набору программ, которые я могу запустить. Плюс я потерял соединение с сетью :-(cat
это файлы и фотографии с мобильного телефона.Может ли Python получить доступ к вашему порту аудиовыхода? Вы можете попробовать перенести данные с помощью этого - посмотрите на то или другое .
источник
ossaudiodev
в вашей установке Python нет библиотеки? Это должен быть стандартный модуль в Linux и FreeBSD, если я правильно прочитал документацию.import ossaudiodev
работал в моей Ubuntu из коробки.cat
- привязать файл к/dev/snd/pcm...
устройству.cat
Ing/dev/random
во все из них , но безрезультатно.Вы можете удалить SSD с вашего компьютера и
dd
/photorec
/ etc на другом рабочем компьютере.Вот руководство по обслуживанию Dell для 9550 - см. Раздел «Извлечение твердотельного накопителя». После извлечения диска вы можете получить внешний USB-корпус M.2 и подключить диск к другой машине, чтобы восстановить ваши данные.
источник
Длинный выстрел, но в некоторых дистрибутивах встроены радиопротоколы. Один из распространенных - это fldigi. Попробуй какой флдиги.
Если у вас есть то или другое, они преобразуют текст в аудио, как правило, используя некоторые варианты фазовой манипуляции. Выходной сигнал поступает на ваши колонки / наушники, и он принимается стабильным компьютером в той же комнате, и записывается на его микрофон. (Это устраняет радиолюбители, которые передают и принимают аудио по радиоволнам).
источник
Подход QR-кодов может быть хорошим. Вы можете разместить на экране как можно больше и обновить их, как только ваш терминал позволит вам. Затем запишите экран XPS с помощью камеры (в отличие от веб-камеры) и просто расшифруйте сохраненное видео. Может быть полезно использовать даже замедленную съемку.
источник
Отличное шоу :) У меня есть 1 предложение: вы также можете читать данные с экрана, используя фотодиод, подключенный к звуковой карте другого компьютера.
источник