По-перше, зізнання: ні, я не робив резервні копії, які мав би бути.
По-друге, ситуація:
У мене Dell XPS 9550 з твердотільним диском під управлінням Fedora 25 .
Я працював над файлом і намагався зберегти його, коли мені сказали, що я намагаюся зберегти у файловій системі лише для читання . Виявляється, моя файлова система доступна лише для читання, і всюди є помилки вводу / виводу .
Мені вдалося зберегти деякі файли, надіславши їх електронною поштою через відкритий веб-браузер, але це вийшло з ладу, і я не можу його перезапустити. Але в мене все ще відкриті цікаві файли в редакторі. Я не можу зберігати файли ніде, але можу скопіювати їх вміст. Якби тільки я міг знайти спосіб ексфільтрувати вміст файлу, я міг би заощадити собі місяці роботи.
Але є деякі жахливі обмеження. Я намагався вставити USB-накопичувач, але не з'являється жоден пристрій, який би його представляв, і mount
команда вмирає з segfault. Я можу спробувати перенести 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 байт в секунду. Це 324k на день.
- На вмираючому 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. Я переписав сценарій передачі за допомогою Руста, щоб побачити, чи поліпшить це швидкість оновлення терміналу, але це не допомогло.
- Оскільки я навряд чи зможу збільшити частоту кадрів, мені доведеться спробувати збільшити кількість даних, отриманих за кадр. Мій сучасний підхід виглядає приблизно так:
У правій половині все ще є тактовий сигнал, який блимає та вимикається, щоб позначити прихід нових кадрів. Але ліворуч - це сітка, де кожна клітинка позначена червоним квадратом у куті, а потім зеленою коміркою праворуч і вниз від червоного квадрата миготить і вимикається, щоб трохи вказати. Червоні квадрати повинні дозволяти комп’ютеру, що приймає, калібрувати, де розташовані комірки. У мене ще немає даних, але я над цим працюю.
- Хтось запропонував мені розглянути можливість написання QR-кодів замість цих спеціальних кольорових моделей. Я також розберуся на це, і, можливо, це здійсню замість цього сіткового підходу. Виправлення помилок було б приємним виграшем, а також можливістю використовувати стандартні бібліотеки для декодування.
- Я дізнався, що у мене є доступ до libasound (звукової бібліотеки ALSA), але не до файлів заголовків, пов'язаних з ним (
alsa/asoundlib.h
або будь-якого іншого). Якщо хтось знає, як використовувати спільну бібліотеку без заголовків, або може допомогти мені написати лише правильний заголовок, щоб я міг виробляти аудіо вихід, тоді я міг би мати аудіо-спосіб виведення файлів. - Крім того, якщо хтось міг би допомогти мені маніпулювати USB-пристроями без доступу до libusb, то, можливо, я міг би щось із цим зробити?
Рухатися вперед!
ОНОВЛЕННЯ 4 : аудіо вихід!
Користувач Франческо Нофері зробив велику роботу, допомагаючи мені використовувати бібліотеку ALSA, згадану в попередньому оновлення. У компілятора C була проблема, але за допомогою компілятора Rust я міг використовувати FFI для прямого виклику libasound
. Зараз я зіграв купу моїх даних через аудіо, і це звучить як музика на мої вуха! Ще потрібно встановити справжній канал зв'язку, але я дуже сподіваюся. На даний момент моя робота полягає в тому, щоб впровадити модем, тож якщо хтось має вказівки щодо хороших способів зробити це, я все чую. В ідеалі модуляцію, яку легко здійснити вручну та демодуляцію, для якої я можу використовувати наявну бібліотеку. Оскільки це може теоретично переходити безпосередньо через аудіокабель, а не через телефонну мережу ми можемо зробити набагато краще, ніж 56 кбіт / с або будь-який стандарт, який повернувся в той день, але на практиці хто знає, що ми отримаємо.
Дякуємо всім, хто дотримується тут та за адресою / r / techsupportmacgyver та at / r / rstst, сприяючи безлічі чудових пропозицій. Я скоро буду реалізовувати цей "модем", і тоді я закінчу це епілогом. Я думаю, що я можу поставити свій код десь для інших відчайдушних людей, щоб скористатися в майбутньому --- можливо, навіть сховище дивних інструментів ексфільтрації, які легко ввести в машину, що вмирає, вручну? Ми побачимо, що станеться.
ОНОВЛЕННЯ 5 : Мені знадобилося багато часу боротьби з ALSA та моїм дешевим пристроєм захоплення аудіо USB StarTech (на вбудованому ноутбуці немає вбудованої лінії), і багато хто помилково починає пробувати власний протокол передачі, але нарешті під пораду деяких Мої друзі-ентузіасти із радіоелектронних радіостанцій я реалізував протокол лінії RTTY, що працює зі швидкістю 150 бод, що на практиці дає мені приблизно 10 байт в секунду. Це не надто швидко, але досить надійно. І я майже завершив передачу файлу 820 КБ, перевіреного за допомогою контрольних сум CRC32 (використовуючи функцію crc32 з Python'szlib
модуль, до якого я маю доступ). Тож я оголошую перемогу і хочу ще раз подякувати! Я витрачу трохи більше часу на пошук подальших файлів, які можна прочитати і які я можу перенести, але фундамент на місці. З усіма вами було весело працювати!
FINAL UPDATE :
На машині, що вмирає:
$ 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
і почніть завантажувати все, що можна.