LINUX.ORG.RU

Пропало 128 байт с файла, хочу понять что послужило причиной

 , , ,


2

5

Хочу разобраться. Возможно кто-то сталкивался с подобным и имеет объяснение случившийся ситуации. Конечно это бесполезная душниловка, но просто интересно разобраться...

Есть некая картинка 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 и прочие проверялки) чем заполнить все пустое пространство одним огромным файлом (параллельно такой же файл сгенерировать в компе) и потом скопировать с телефона в комп и сравнить побайтово (ну или не копировать а по хешсумам сравнить)

https://i.imgur.com/8619HII.jpg

★★★★★

Последнее исправление: bonta (всего исправлений: 2)

128 же байт нулевых на скрине, а не 127. Что, в принципе, и более логично.

Причин я, конечно, не знаю. Но более реалистичным кажется потеря данных именно во время передачи, а не на носителе. Почему ОС не узнала, что данные не пришли? Да фиг знает. Но если бы там где-то было FTP по пути, именно такой косяк было бы совсем в порядке вещей.

Вообще, чисто умозрительно, это можно объяснить кривой прошивкой флешки. Флешка поместила данные в какой-то кэш, отчиталась, что они записаны на носитель, а на деле ещё нет, а потом что-то произошло (нехватка питания, ещё что-нибудь, или вообще баг в прошивке), и данные эти потерялись.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 4)
Ответ на: комментарий от praseodim

Это была моя первая мысль, но там не хватает данных именно в начале файла, а не в конце. Подозрительно. Вроде ж должно более-менее последовательно как-то писаться.

CrX ★★★★★
()
Ответ на: комментарий от t184256

1.1 вообще-то

Учитывая сложную судьбу этого файла, с хрен знает какого андроида, на непонятную флешку, почему нет? USB HS до сих пор не везде доступно, в тех же GoWin

А тут ноунейм поделие

shalom_ ★★
()
Последнее исправление: shalom_ (всего исправлений: 2)

Не совсем понял, в какой момент возник usb-кабель? С андройд на флешку данные копировались путём подключения андройд к компьютеру, что-ли? Если «да», то по какому протоколу?

местами прям голые без изоляции.

Просто жилы из кабеля вылезли или на жилах изоляции нет? Коротнуть ведь может.

128 байт странный размер, это страница флеш памяти на уровне килобайтных флешек микроконтроллеров. В накопителях когда-то давно страница флеш памяти была 512 байт, а потом 2048 байт, а сейчас и больше.

Может, конечно, где-нибудь в глубине контроллера флеш памяти данные разбиваются на мелкие блоки для параллельного подсчёта контрльных сумм...

Вроде, на нижнем уровне USB есть повторная попытка обмена данными. Потом, если кабель плохой, под линуксом в dmesg будет много чего понаписано, связанного с попыткой продолжить обмен данными с устройством, не выкидывая ошибку в userspace.

Электромагнитная помеха вызовет напряжение на дата-линиях вне допустимого диапазона и будет сообщение наподобие:

usb usb5-port2: disabled by hub (EMI?), re-enabling...
но куда винда пишет подобные сообщения и пишет ли по умочанию не знаю.

mky ★★★★★
()

Наблюдаю такую же картину давно и на разных андроид устройствах, в каталогах где много (>100) файлов. Именно при хранении фото, то есть оно нормальное было и вдруг стало битое. Хз, грешил на просмотрщик фото.

Поэтому фотографии храню на жестких дисках.

shTigrits ★★★
()
Ответ на: комментарий от shalom_

да я же вроде бы писал что флешка новая, Кингстон ДатаТревэл (а может подумал но забыл написать, лень перечитывать свою портянку :))

Андроид смарт ему около 4х лет, какой Андроид на нём не помню, думаю не особо версия влияла, а вот подизноситься его накопитель вполне мог наверное.

Лично я до сих пор думаю на кабель. Но я удивлен тому что если дело в нарушении передачи по кабелю по протоколу MTP операционка (это бала Win10) никак не среагировала на невалидную передачу. Я правда не знаю про этот протокол ничего кроме расшифровки аббривиатуры, и может это протокол такой что в нём не ведется разбиение данных на фрагментики с проверкой корректности их доставки и повторным запросом если нарушение в фрагменте - вроде бы как раз актуально для MTP было бы ведь качество usb соединений по проводу не идеально, особенно в старых машинах где люфты появляются в usb коннекторах.

bonta ★★★★★
() автор топика
Последнее исправление: bonta (всего исправлений: 1)
Ответ на: комментарий от mky

Да,Андроид и флешка были в компе, и через комп из Андроида в фшелку, протокол MTP.

Просто жилы из кабеля вылезли или на жилах изоляции нет? Коротнуть ведь может.

Да надо новый купить, но лень. Местами наружу вылезли проволочки из которых состоит сам провод, немножко.

Но т.к. везде где замечено - они не соприкосаются с другими проводами эти вылезшие то я пока и лениво к вопросу отношусь.

Единственное что заметил - что у меня два телефона, один Honor, с которого и копировал файл (провод его родной кстати) и Pixel, и Гуглофон сначала норм по этому кабелю подключался а сейчас не видит его - не через комп линка нет, не через зарядку. А Хонор норм работает. Наверное ГуглоПиксель более критичен к физическим параметрам, ну и ему что-то не нравится в кабеле в котом местами нет экрана.

но куда винда пишет подобные сообщения и пишет ли по умочанию не знаю.

Да она пишет, я частенько видел про другое usb устройство сообщения о проблемах, но с тех пор логи уже потеряны, т.к. я настроил так чтобы они мало место занимали и поэтому перзаписались уже.

Вроде, на нижнем уровне USB есть повторная попытка обмена данными. Потом, если кабель плохой, под линуксом в dmesg будет много чего понаписано, связанного с попыткой продолжить обмен данными с устройством, не выкидывая ошибку в userspace.

Винда очень похоже действует, на примере с dvd заметил и на другом usb устройстве (авторегистратор), в юзерспейс ничего не выведится и вроде все норм, а в логах может быть всякое например что при чтении возникла ошибка и было инициировано повторное чтение или что какая-то ошибка на контроллере и его служебный адрес, если расшифровать адрес то как раз авторегистратор, но на уровне юзерспейса все ок.

bonta ★★★★★
() автор топика
Ответ на: комментарий от shTigrits

Я в первый раз такое из Андроида получил.

Поэтому фотографии храню на жестких дисках.

Я тоже и фотографии и прочее важное для себя храню на жестких дисках.

Система, программы и горячие данные конечно на ssd, но если это важное то обязательно будет перенесено на hdd.

Особенно учитывая что даже если ssd не системный и никто кроме тебя в него не пишет - то всеравно, учитывая trim страшно на нём хранить важное, потому что бывает всякое и можно случайно удалить полноценно (а не «в корзину») даже из Гуя где вроде бы на это дело защита стоит :)

bonta ★★★★★
() автор топика