Файлы с именами, содержащими символы Юникода, повреждаются на SD-карте.

При установке моей SD-карты на мою галактику SIII файлы и папки на карте с символами, которые не входят в диапазон ASCII, повреждаются. Это происходит путем простого выбора «Отключить карту» в настройках хранилища и монтирования обратно. Нет необходимости физически извлекать карту и вставлять ее обратно. Выключение и повторное включение телефона также приводит к повреждению.

Папки при просмотре с помощью файлового менеджера на телефоне отображаются как файлы размера 0 с датой 31 декабря 1969 года (эпоха Linux), и в них нельзя перейти, чтобы увидеть их содержимое. Они отображаются как пустые папки. Файлы становятся нулевого размера с той же датой и не могут быть открыты или показаны в галерее, музыкальном проигрывателе и т. д. Они открываются как пустая папка. (См. изображение ниже)

Я использую стандартную версию Android 4.1.2.

Карта представляет собой карту micro sdxc SanDisk 64 ГБ (класс 10). Проблема возникла, когда карта была отформатирована на заводе (с exFAT), а также после форматирования в телефоне (настройки > память).

Примерами имен файлов, вызывающих повреждение папки, являются «Aṣa» или «דניאל». Не имеет значения, был ли файл скопирован на карту с помощью USB-переноса или путем извлечения карты и использования ридера на ПК с Windows, или если имя было изменено (с помощью телефона) после того, как файл был на карте.

Файлы с одинаковыми именами не портятся, если они находятся во внутренней памяти телефона, и я могу без проблем их использовать.

При извлечении карты и использовании ее на ПК с Windows 7 файлы видны. Но иногда затронутые папки дублируются. То есть дважды с одним и тем же именем оба. Проверка диска с помощью windows сообщает об ошибках и попытках их исправить. Но потом при вставлении карты обратно в телефон файлы опять портятся.

Как я могу предотвратить эту коррупцию?

Так файловый менеджер показывает поврежденный файл или папки

Обновление: с картой 2 ГБ, отформатированной в FAT32, файлы не были повреждены. Но после того, как я отформатировал его в exFAT, я смог воспроизвести повреждение файла. Я думаю, что могу исключить плохую SD-карту.

Подробнее, это отчет из Windows 7 после запуска checkdisk. Обратите внимание, что в каталоге TestFolder существовали 3 файла, которые были повреждены:

[Window Title]
Checking Disk Removable Disk (M:)

[Main Instruction]
Some problems were found and fixed

[Content]
Any files that were affected by these problems were moved to a folder named "Found" on the device or disk. Your device or disk is now ready to use.

If you removed the device or disk before all files were fully written to it, parts of some files might still be missing. If so, go back to the source and recopy those files to your device or disk.

[^] Hide details  [Close]

[Expanded Information]
Volume Serial Number is 6518-E54A
Windows is verifying files and folders...
Corruption was found while examining files in directory \TestFolder\ (0).
Corruption was found while examining files in directory \TestFolder\ (3).
Corruption was found while examining files in directory \TestFolder\ (6).
Corruption was found while examining files and directories.
File and folder verification is complete.
Windows has made corrections to the file system.

  62363648 KB total disk space.
  41656576 KB in 43 files.
       768 KB in 6 indexes.
       256 KB in use by the system.
  20706048 KB available on disk.

    131072 bytes in each allocation unit.
    487216 total allocation units on disk.
    161766 allocation units available on disk.

Папки не повреждаются, если они создаются на телефоне с еврейскими именами, а затем размонтируются и проверяются в Windows. Только после переустановки на телефоне.

ДОПОЛНИТЕЛЬНЫЕ ДАННЫЕ: это, я думаю, актуальная информация от adb logcat:

I//system/bin/fsck.exfat( 1897): fsck.exfat 1.1.0p2

I//system/bin/fsck.exfat( 1897): [fsck] Invalid dir entry: (92675,0)
I//system/bin/fsck.exfat( 1897): [fsck] Wrong dir entry name hash
I//system/bin/fsck.exfat( 1897): [fsck] Successfully recovered

I//system/bin/fsck.exfat( 1897): Filesystem was modified.
I/logwrapper( 1897): /system/bin/fsck.exfat terminated by exit(4)

W/Vold    ( 1897): exfat -> Filesystem modified - rechecking (pass 2)
E/Vold    ( 1897): MDM :: sdCardWriteAccessBlocked 0
D/Vold    ( 1897): Detected exFAT file system.

И при загрузке без проблемных имен файлов я вместо этого получаю симпатичный маленький

I//system/bin/fsck.exfat( 1897): No errors
I/Vold    ( 1897): exfat -> Filesystem check completed OK 

И adb shellя могу попытаться увидеть нарушителей спокойствия (после перемонтирования обратите внимание на 2 каталога с явно одинаковым именем, которое в консоли Windows, кажется, выводится как 2 символа на символ юникода):

shell@android:/storage/extSdCard/Test $ ls * -l
ls * -l
drwxrwxr-x system   media_rw          2013-02-18 18:39 אבג
אבג: No such file or directory
1|shell@android:/storage/extSdCard/Test $
На первый взгляд, я бы сказал, что это связано с используемыми несовместимыми наборами символов (UTF8 на стороне Android и любой кодировкой, специфичной для Windows на ПК), но имена файлов выглядят правильно написанными на вашем снимке экрана... Не-ASCII символы в именах файлов, похоже, в некоторых случаях доставляют много хлопот (это не первый случай, который я вижу на этой неделе ), поэтому я стараюсь избегать их, насколько это возможно. К счастью, все мои альбомы Ethnix используют строгие 7-битные символы ASCII в именах файлов :)
@izzy Одна вещь, которую мне придется обновить, заключается в том, что проблемы возникают, даже если карта никогда не используется в Windows. Файлы, созданные на телефоне, а затем переименованные в иврит, повреждаются при следующем подключении карты. Файлы во внутренней памяти в порядке.
Это на самом деле важный факт, чтобы включить! Таким образом, это влияет только на внешнюю SD-карту - внутренняя « sdcard » (такая есть у SGS3?) не имеет таких проблем, как и «память телефона» (если вы можете проверить)? В этом случае это выглядит как ошибка либо с [ex]FAT mount, либо fsckв сочетании с ней. Вопрос: Это происходит во время монтирования или при размонтировании (т.е. после размонтирования, извлечения карты и использования кард-ридера на вашем ПК, они уже зашифрованы)?
@Izzy Я добавил эту информацию. Повреждение происходит при монтировании, а не при размонтировании.
В StickMount (приложение для монтирования флешки) есть опция «использовать ввод-вывод UTF8, если поддерживается ядром». Будет ли это какой-то подсказкой?
@Narayanan, это действительно может быть подсказкой. Я не уверен, но я могу себе представить, что процесс монтирования пытается что-то автоматически обнаружить, терпит неудачу (здесь что-то ломается), но, в конце концов, монтирует это правильно (когда оно уже сломано). Так что, если бы можно было пропустить первый шаг (и правильно смонтировать его с самого начала), это могло бы решить проблему. Frozenkoi: Если у вас есть возможность получить logcat/ dmesgиз процесса запуска (например, adb logcatсразу после загрузки, когда соответствующие записи все еще кэшируются), это поможет!
@izzy Добавил информацию о lolcat. Выкладывание полного лога показалось излишним. И это начинает больше походить на отчет об ошибке. Я не смог найти, куда отправить Samsung эту информацию.
Вы имеете в виду logcat, а не Lolcat :) И из ваших записей я вижу, что был прав в своем первом предположении (несовместимые символы). Как туда попала та запись, которую вы процитировали lsв конце своего вопроса? Похоже, это один из нарушителей спокойствия. Как это имя должно было читаться изначально? PS: Это не "две директории с одинаковым именем", первая - это "обычный" вывод из ls, вторая повторяет его в сообщении об ошибке. Похоже, этот гойский андроид не особо любит иврит...
@Izzy (а) Я имел в виду lolcat(б) я создал папку с файловым менеджером, который поставляется с SIII, и назвал ее אבג. Потом перезагрузил телефон.
LOL действительно лолкот -- мило... Да, если это отчет об ошибке, то это может быть не то место. Если вы нашли решение/исправление, не забудьте сообщить нам об этом! Удачи, и חג פסח כשר
Размещено на сайте разработчиков Samsung: developer.samsung.com/forum/board/thread/…

Ответы (4)

Я обновил свой S3 с Android 4.1.2 (стандартная прошивка Samsung) до 4.3 пару дней назад. Проблема повторялась у меня постоянно в течение полутора лет, точно так же, как описано выше, в двух версиях 4.0.x (ICS), а также в Jelly Bean 4.1, но в 4.3, похоже, она была окончательно исправлена: После обновления я скопировал много файлов с именами на иврите Unicode на мою карту microSD, и они без проблем пережили многочисленные размонтирования/перемонтирования карты и перезагрузки телефона.

Между прочим, еще одна проблема, с которой я столкнулся, заключалась в том, что автоматическое повторное сканирование медиа-папок на карте (выполняемое системным приложением Android «Media Storage»), которое происходит каждый раз, когда карта вставляется или телефон отключается от USB, занимало много времени. очень долго (иногда часы). Это, в свою очередь, вызвало проблему с синхронизацией моей большой музыкальной библиотеки между моим Mac и телефоном с помощью утилиты iSyncr. Эта проблема также полностью исчезла, и я подозреваю, что медиа-сканер Android плохо справлялся с поврежденными файлами.

Дополнительные сведения: Телефон: GT-I9300 Международная версия, без рута, на официальной израильской прошивке Samsung без марочных прав. Карта: SanDisk 64GB Class 10 (такая же, как IIUC оригинального аскера), отформатированная в exFAT на Mac. Я даже не стал переформатировать после обновления 4.3 — я просто установил карту на Mac, чтобы стереть все существующие поврежденные файлы нулевой длины, которые, как уже отмечалось, не могут быть удалены различными файловыми утилитами Android.

Приятно слышать. Я все еще жду, когда обновление будет доступно для моего оператора.
Обновление было доступно пару дней назад для оператора, к которому привязан мой телефон, то есть заблокирован. Пока удалось сохранить мои файлы.

Я испытал то же самое с моей 32-гигабайтной картой Sandisk Micro SD класса 10, используемой в Galaxy Tab 2. SD-карта является подлинной, поэтому я знаю, что это не проблема.

Тем не менее, я обнаружил, что это работает для меня.

  1. Отформатируйте карту на своем ПК или Mac в файловую систему NTFS.
  2. Загрузите apk-приложение Paragon NTFS / HFS для Android-устройства
  3. Без ЛЮБОГО приложения NTFS для Android андроид НЕ распознает вставленный формат SD-карты, поскольку Android распознает только файловую систему FAT.
  4. Вставьте карту Micro SD в устройство и перезагрузите устройство (если значок карты отображается на панели уведомлений внизу справа, игнорируйте)
  5. Перейдите и откройте на Android Paragon NTFS / HFS tool apk и проверьте диск / формат с помощью приложения для Android.
  6. Снова перезагрузите устройство, вставив SD-карту, оставьте карту вставленной и подключите Android-устройство к ПК, теперь внешний диск должен быть отформатирован в NTFS.

Карта должна АВТОМАТИЧЕСКИ МОНТИРОВАТЬСЯ через приложение Paragon NTFS при включении устройства.

Я испробовал все возможные способы, чтобы иметь SD-карту в FAT 32, но это просто не работает, имена папок меняются, файлы исчезают.

Согласно сайту Samsung , это была ошибка, которая теперь исправлена ​​​​и должна быть выпущена в следующем обновлении прошивки (каким бы оно ни было).

У вас нет другого выхода, кроме как купить еще один. Пожалуйста. ;)