Пропало 128 байт с файла, хочу понять что послужило причиной
Хочу разобраться. Возможно кто-то сталкивался с подобным и имеет объяснение случившийся ситуации. Конечно это бесполезная душниловка, но просто интересно разобраться...
Есть некая картинка jpg, которая претерпела 4 переноса с носителя на носитель
1. С Андроида (увы методом перемещения а не копирования, т.к. если бы оригинал остался на Андроиде было бы проще судить о природе события) переместилась на usb flash (новый, почти не пользованный)
2. С usb flash на usb hdd.
3. C usb hdd на другой usb hdd.
4. И наконец с usb-hdd на внутренний ssd (тоже весьма новый, с почти неиспользованным ресурсом).
Смотрю на скопированные фотки и вижу что одна фотка стала битой.
У меня была резервная копия с внутреннего hdd...
Изначально я думал что проблема в каком-нибудь бите, что мол что-то на nand чипе флешки или Андроида покоцалось, ну думал так исключительно из-за того что картинка в принципе почти не потеряла первичный вид, лишь немного стала как-будто бы с применением полупрозрачного зеленого фильтра (см ссылку).
Бинарное сравнение файлов показало что есть различия непрерывно идущие с 163840 байта по 163968, всего различие растянулось на 128 байт (а не один бит как я думал).
Неправильные байты целиком нулевые. Т.е. выглядит это даже не как искажение информации в физической единице хранения - «перевернутые биты» (т.е. те самые проблемы с RAM, могут проявлять себя на noECC модулях https://blog.robertelder.org/importance-of-ecc-memory/)), а как потеря последовательности бит.
Я производил тщательные проверки накопителей (всех кроме Андроидского, т.к. не знаю как это делать в смартфоне безрутовом) - с ними всё впорядке, внешние hdd, внутренний ssd согласно smart не имеют событий переназначений, как комплектные утилиты (речь о Винде, поэтому chkdsk /f/r), так и сторонние HD Sentinel, HDDScan, не обнаруживают проблем с устройствами, ровно как и с флешкой, в ней хоть и нет smart но все тесты проходит на отлично.
Итого с одной стороны то что все нули - очень хочется описать событие как то что на одном из устройств случился плохой сектор и был заменен на резервный (а он типа с завода не содержит записей, поэтому нули), но на всех перечисленных устройствах размер сектора минимум 512 (на внешних дисках возможно даже 4096), а в нулях только 128 байтов, да и в smart нет событий не только переназначений, но даже таких как #196, #197, #199, т.е даже намека на плохие сектора и плохой линк интерфейса нет.
Тогда остаётся думать что проблема могла быть или на nand Андроида или в момент передчи файлов с Андроида в комп. К слову кабель был весьма повидавший виды, местами у него не только слез экранирующий слой, но даже некоторые проводочки (именно проводочки а не экранирование) местами прям голые без изоляции.
Конечно весьма вероятно что проблема была в кабеле таком, но я его пользую очень давно, и с виду от него и хорошая зарядка от компа в телефон и формально видимых проблем с передачей информации нет.
И на мой субьективный вид если бы была какая-то серьезная проблема в момент передчи - например из-за отсуствия экрана пошли помехи мешающие передавать данные, то я конечно не видел исходников и не представляю физический процесс всех этих электрополей, но кажется что операционка должна была или 1) следуя протоколу передачи данных понять что произошел сбой и остановить копирование. 2) ну или хотя бы должны были прийти искаженные данные а не идеальные нули без хотя бы одного единичного бита во всех 127 байтах.
получается самым вероятным является то что проблема в накопителе Андроида?
Кстати подскажите есть ли какие-то тулзы, которые можно запускать на не рутированном устройстве, чтобы проверять «поверхность» «диска». Теоритически обычный пользователь имеет доступ к физическим секторам nand чипа, т.к. это «внешняя память» в терминологии Андроид, которую можно читать. Но конечно резонный вопрос имеет ли обычный пользователь права на низкоуровневое чтение, в том числе пустых секторов, в обход файловой системы, скорее всего не имеет.
В общем если заняться не чем, как и мне на момент написание этой портянки, то веллкам.
На всякий случай срезюмирую вопросы:
1. На что больше похожа природа потери данных - на внутренние проблемы какого-то из устройств (например флешки, там же нет smart и журнал проблем не ведется)
2. Может быть похоже на проблему с usb-кабелем? Но имеет ли возможность операционка (не важно какая) программно понять что сейчас какие-то аномалии и следует как минимум сообщить об этом (а лучше произвести новые попытки, ну типа как в сетевом протоколе TCP)
3. Есть ли возможность на нерутированном устройстве Андроид проверять жизнеспособность секторов nand накопителя, к которым, по крайней мере через слой файловой системы у пользователя доступ есть. Ну конечно речь про какой-то более адекватный способ (с множественным чтением каждого сектора, и замером времени отклика, как это делает hddsentinel и прочие проверялки) чем заполнить все пустое пространство одним огромным файлом (параллельно такой же файл сгенерировать в компе) и потом скопировать с телефона в комп и сравнить побайтово (ну или не копировать а по хешсумам сравнить)