Подтвердить что ты не робот

Каковы возможные причины повреждения двоичных файлов на устройствах Android

Недавно я изучаю причины повреждения двоичного файла. У нас есть приложение для Android, родная часть может читать/записывать двоичный файл на SD-карте. Иногда двоичный файл развращается по неизвестным причинам. Мы собрали некоторые из этих файлов у разных пользователей и нашли интересные факты.

Одним из основных видов коррупции является то, что первые 4096 байт двоичного файла стираются. Когда я hexdump эти файлы, первые 4096 байт - все нули. Не более 4096 или менее 4096, но точно 4096 байт. Я думаю, что это не совпадение. Я знаю, что 4096 байт - это один размер страницы. Но, не имея опыта, я не могу понять причину, и что еще более важно, я не знаю, как избежать таких вещей для других пользователей/устройств.

Кроме того, в середине некоторых двоичных файлов есть также некоторые непрерывные сегменты нулей, которых он не должен быть. Если это не ошибка наших программ, есть ли какие-либо возможные причины, которые могут иметь отношение к ядру платформы/устройства, или что-нибудь еще, подобное устройству, внезапно вышло из строя?

Я надеюсь, что любой, кто испытал подобные ситуации, может дать мне подсказку/советы/решения и т.д. Это действительно сильно смутило меня.

Большое спасибо ~

4b9b3361

Ответ 1

У меня есть некоторый опыт работы с некоторыми встроенными приложениями, которые повреждают двоичные файлы. Прежде всего, дважды проверьте обработку файлов (особенно в многопоточных средах), я могу представить, что вы сделали это тщательно. Затем попробуйте синхронизировать все записи. Ядро linux не записывает, поскольку вы командуете своему приложению для записи, но буферизуете данные перед тем, как погрузить на диск.

http://linux.die.net/man/2/sync

Надеюсь, это поможет.

Ответ 2

проверьте свою обработку файлов, что обычно является проблемой в моем опыте

Ответ 3

Сломанные файлы или даже поврежденная файловая система странно вызваны файлами 4096 байт.

Это повреждение связано с размером кластера для файловой системы ext4, равной размеру страницы.

В настоящий момент размер блока по умолчанию составляет 4KiB, что является обычно поддерживаемым размером страницы на большинстве совместимых с MMU аппаратных средств. Это удачно, поскольку код ext4 не готов обрабатывать случай, когда размер блока превышает размер страницы.

PS

Я беру ext4, поскольку это файловая система по умолчанию для ОС на базе Linux (включая, помимо прочего, Android)

Теперь о причинах, по которым файл 4KiB может быть опасным, причины просты для понимания:

  • Неверная обработка файлов: неправильная процедура создания, чтения, редактирования или удаления файлов может повредить файлы и сломать их, возможно, рядом с полной файловой системой. Эти "неправильные процедуры" включают поведение и несчастные случаи, не связанные с человеком. (PS: это не ограничивается файлами 4KiB)
  • Неправильная обработка данных низкого уровня: не общий случай, тем не менее, это возможно. Это происходит, когда ядро ​​или пользователь пытаются отредактировать файловую систему на низком уровне. (Вам нужно будет продолжить изучение этого дела, поскольку оно должно быть написано в слишком длинной статье!)
  • Есть еще много странных способов получить данные сломанной, я стараюсь держать краткими. Другие причины зависят от многих факторов, поэтому я упомянул о наиболее распространенных причинах этой проблемы на устройстве Android.

Вы можете продолжать читать больше здесь:

  • Ext4 Disk Layout: все, что исследователь должен знать о Ext4
  • Файловая система Exfat: ознакомьтесь с Exfat! Другая широко используемая файловая система (даже с Android), которая, как известно, слишком уязвима!
  • ...