Проверить и исправить ошибки SD-карты в самом Android?

Иногда моя SD-карта «повреждается», что приводит к множеству ошибок чтения/записи. Обычно подключение SD-карты к Windows 7 и выбор параметра «Проверка ошибок» (щелкните правой кнопкой мыши диск > Инструменты > Проверка ошибок) позволяет обнаружить повреждение и исправить его.

Как проверить SD-карты на наличие ошибок привода и исправить их изнутри самого андроида ?

Я также хотел бы упомянуть, что я использую root-права на froyo с установленным busybox.

Если у вас постоянно возникают ошибки на вашей SD-карте, вы должны убедиться, что она действительно имеет заявленную емкость, используя H2testw (ссылка только на немецком языке, программное обеспечение на немецком и английском языках. Я считаю, что это официальный дом, несмотря на то, что кажется обратное). Плохие SD-карты будут автоматически повреждены.

Ответы (5)

Вы можете исправить это с помощью рута и эмулятора терминала (например, эмулятора терминала Android (или, альтернативно, с помощью adb shell). Бинарный файл для выполнения этой работы называется fsckи обычно находится в любом /system/xbinили /system/bin. Иногда вам нужен специальный вариант этого , который может, например, вызываться fsck.exfatили т. п. Итак, сначала давайте убедимся, что мы нашли правильный двоичный файл:

cd /system/xbin
ls fsc*

Если не найдено, повторить с /system/bin. Я предполагаю, что здесь он был найден в первую очередь и просто вызван fsck(соответственно отрегулируйте следующее, если это не так).

Как fsckследует из «ядра Linux», мы можем обратиться к его справочной странице для синтаксиса. Хотя некоторые параметры могут не работать на Android, самые основные должны работать. Подробнее см. связанную справочную страницу (или запустите виртуальную машину Linux и используйте ее man fsck, если эта страница исчезнет) — здесь я буду придерживаться основ:

Сначала нам нужно найти устройство, к которому привязана ваша SD-карта. Если он смонтирован, mountнам поможет команда:

mount

Вот и все: проверьте вывод и посмотрите, где находится ваша SD-карта. Обычно это что-то с использованием vold, но оно отличается для разных устройств. Вывод может включать что-то вроде /dev/block/vold/179:17 on /mnt/storage/sdcard-- в этом случае первая часть моей цитаты -- это наше устройство. Для того, чтобы починить «накопитель», его нужно сначала размонтировать. Это можно сделать через меню настроек, либо, так как мы просто в терминале, введя

umount /dev/block/vold/179:17

Теперь можно переходить к ремонту. Основной синтаксис:

fsck [options] [-t fstype] <filesystem> [fsoptions]

Итак, мы сначала попробуем самый простой подход и надеемся fsck, что со всем разберемся сами:

fsck -C -r /dev/block/vold/179:17

Что в основном означает: показывать прогресс (-C) и всегда просить пользователя исправить (-r) любые ошибки в /dev/block/vold/179:17. Если это не сработает, проверьте дополнительные параметры на связанной справочной странице.

Вы также можете сохранить cdшаги, если хотите, используя ls /system/bin/fsc*и ls /system/xbin/fsc*из любого вашего текущего рабочего каталога. Вы даже можете объединить их в одну команду с помощью ls /system/xbin/fsc* /system/bin/fsc*.
в некоторых системах команда также может называться e2fsck, например, в моем стандартном австралийском Galaxy Nexus.
@LieRyan Уверен, что ничего не путаешь? e2fsckэто средство проверки файловой системы для extFS. Так что, если у него другое имя, это скорее fsck.fatили fsck_msdos(последнее - реальный пример из старого ПЗУ 2.2 моего Moto).
Нет, я ничего не путаю, я не знал, что этот вопрос на самом деле касается SD-карты. Так что да, я действительно перепутал некоторые вещи. Строго говоря, вы также можете отформатировать свою SD-карту как ext, так что это может относиться к людям, которые это делают.
Дело принято. Хотя «среднему пользователю» (или тому, кто «сомневается») лучше придерживаться FAT, по крайней мере, для совместимости. По крайней мере, до тех пор, пока ExtFS не будет поддерживаться в большинстве ОС легко и по умолчанию без дополнительных драйверов (думаю, Windows, как обычно, останется здесь подводным камнем).
Я только получил, unknown option -- Cно попытался запустить его только с fsck.exfat /dev/block/vold/179:9. Работал как шарм!
Спасибо за этот ответ, я думаю, что это то, что мне нужно. Я получил ошибку на umount, вы должны быть пользователем root?
@OrganicMarble да, конечно - для всех вышеперечисленных команд, иначе вы не получите таким образом доступ к устройствам (всем, что начинается с /dev).
Спасибо! Я был смущен рутом на ПК и на планшете (я пытался сделать adb shell su). Этот ответ и ответ о fsck_msdos помогли мне исправить мой планшет.

В то время как другие ответы верны (по крайней мере, частично), просто добавьте некоторые дополнительные примечания. В последних версиях Android вам не нужно запускать проверку файловой системы вручную, поскольку voldона выполняется автоматически. См. раздел Когда следует запускать проверку целостности моей съемной карты MicroSD?

Если вы хотите сделать это вручную, вам потребуется рутированное устройство, потому что невозможно получить доступ к блочным устройствам на нерутированных устройствах. Также вам необходимо размонтировать файловую систему перед проверкой на наличие ошибок. Поскольку внешняя SD-карта Android 6 монтируется в , /mnt/media_rw/[UUID]а затем эмулируется в /mnt/runtime/[VIEW]/[UUID]. Затем VIEW привязывается к /storage/[UUID]. См. подробности в разделе Как сохранить файлы на внешнюю SD-карту? .

После полного отключения SD-карты запустите соответствующий fsck.*двоичный файл на блочном устройстве. Обычно initперечисляет блочное устройство SD-карты как /dev/block/mmcblk1p*( p*обозначает номер раздела, обычно это только 1), а voldсоздает другой узел устройства в /dev/block/vold/[MAJOR:MINOR]. Вам нужно найти правильное блочное устройство (можно также проверить mount | grep /mnt/media_rwперед размонтированием файловой системы).

Для семейства файловых систем FAT[N] вы можете использовать fsck_msdos(или fsck.fat), а fsck.exfatдля exFAT. Если они не собраны с вашим ПЗУ (exFAT до недавнего времени был закрытым исходным кодом, поэтому могли возникнуть проблемы с лицензией), вы можете использовать внешние двоичные файлы. Или соберите исходный код ( dosfstools или exfat ).

Чтобы запустить проверку файловой системы:

~# fsck.exfat /dev/block/mmcblk1p1

спасибо за это, это спасает мой день :)

root@android:/ # mount | grep -i sdcard
/dev/block/nandk /mnt/sdcard vfat rw,relatime,fmask=0000,dmask=0000,allow_utime=0022,codepage=cp437,iocharset=ascii,shortname=mixed,errors=remount-ro 0 0

root@android:/ # /system/bin/fsck_msdos -y /dev/block/nandk

Я нашел на рынке приложение под названием AParted , которое может «восстанавливать некоторые поврежденные SD-карты и сканировать плохие блоки» и т. Д.

Если я не ошибаюсь, вы можете заставить Android проверять как внутреннее, так и внешнее хранилище при перезагрузке, выполнив следующие действия в зависимости от вашего ПЗУ.

запустите терминальное приложение и введите

su
touch /forcefsck

Затем перезагрузитесь.

Если ваш телефон не рутирован, это определенно не удастся.

Источник: Форумы XDA - [Q]Как выполнить fsck /data или /system?

Что вы подразумеваете под «в зависимости от вашего ПЗУ»?
Этот трюк может работать не на всех телефонах. разные телефоны могут ничего не делать. Также ваш телефон должен быть рутирован.
После перезагрузки, как я могу узнать, действительно ли я fsckработал или нет?
Я не уверен, что у android есть /var/log/fsck, который вы можете проверить, но вы можете догадаться, что он работает, если загрузка занимает немного больше времени, чем обычно
-1. Я проголосовал за ваш пост. И вот почему: я потратил больше времени на изучение этого вопроса. Предлагаемая вами методика, вероятно, на 100% ошибочна. Это может обмануть читателей, заставив их думать, что это помогает, но на самом деле эта техника ничего не делает.
touch /forcefsckбудет работать только на устройстве со сценарием инициализации, который проверяет наличие /forcefsckфайла. Я не знаю ни одного Android-устройства с таким сценарием инициализации. Таким образом, хотя ваш метод, вероятно, будет работать на устройствах Debian, Ubuntu и Mint, я очень сомневаюсь, что он будет работать на любом устройстве Android. Если кто-нибудь когда-нибудь найдет хотя бы одно устройство Android со сценарием инициализации, который проверяет /forcefsck, пожалуйста, дайте мне знать! Просто ответьте на этот комментарий.