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

42

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

Есть ли какой-либо инструмент или приложение для проверки SD-карт на наличие ошибок диска и исправления того же самого внутри самого андроида ?

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

Ирфан
источник
Вы пробовали с терминальным приложением делать suи запускать /system/bin/fsck.exfat?
Иззи
@ Иззи дает мнеNo such file or directory
Ирфан
Проверьте разные места, может быть, /system/xbinвместо этого? Попробуйте cdвойти в каталог и ls fsc*проверить, что доступно. Должно быть где-то :)
Иззи
1
В точку. Busybox старается быть максимально стройным. Попробуй тётю гугл с "man mount", отлично работает :) И посмотри мой ответ ниже. Если что-то неясно, прокомментируйте там (или увидите меня в чате - хотя я не буду там доступен в течение следующих нескольких часов, есть еще другие знающие участники, которые могут помочь вам :)
Иззи
2
Если у вас постоянно появляются ошибки на вашей SD-карте, вы должны убедиться, что она действительно имеет заявленную емкость, используя H2testw (ссылка только на немецком языке, программное обеспечение на немецком и английском языках. Я считаю, что это официальная страница, несмотря на появление противоположного). Плохие SD-карты будут автоматически повреждены.
Код Блинг

Ответы:

17

Это можно исправить с помощью root и эмулятора терминала (например, Android Terminal Emulator (или, альтернативно, с помощью 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. Если это не сработает, обратитесь к связанной странице справочника за дополнительными опциями.

Иззи
источник
4
Вы также можете сохранить свои cdшаги, если хотите, используя ls /system/bin/fsc*и ls /system/xbin/fsc*из любого текущего рабочего каталога. Вы даже можете объединить два в одну команду с ls /system/xbin/fsc* /system/bin/fsc*.
eldarerathis
1
Нет, я не путаю вещи, но я не знал, что этот вопрос на самом деле о SD-карте. Так что да, я действительно перепутал некоторые вещи. Строго говоря, вы можете отформатировать вашу SD-карту как ext, так что это может относиться к людям, которые это делают.
Ли Райан
1
Дело принято. Хотя «средний пользователь» (или тот, кто «сомневается») может лучше придерживаться FAT, по крайней мере, для обеспечения совместимости. По крайней мере, до тех пор, пока ExtFS не будет поддерживаться на большинстве ОС легко и по умолчанию без дополнительных драйверов (думаю, что Windows, как обычно, здесь и останется ловушкой).
Иззи
1
Спасибо за этот ответ, я думаю, что это то, что мне нужно. Я получил сообщение об ошибке umount, вы должны быть пользователем root?
Органический мрамор
1
@OrganicMarble да, конечно - для всех вышеперечисленных команд, или вы не получаете доступ к устройствам (все, начиная с /dev) таким образом.
Иззи
3

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

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
младший
источник
Спасибо за публикацию этого ответа, он мне очень помог. Из принятого ответа я не знал, как исправить файловую систему vfat. Upvoted.
Органический мрамор
2

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

Код Блинг
источник
Спасибо за ответ на этот давно забытый ответ. Вероятно, должен быть комментарий, но у меня, вероятно, не было репутации для этого в то время. Я оставлю это здесь, пока за комментарий не проголосуют, и он станет видимым.
Код Блинг
Я проголосовал за ваш комментарий.
незабываемый
@unforgettableid Спасибо, просто хочу убедиться, что все знают об этом риске. Это действительно отстой, чтобы потерять данные.
Код Блинг
Хорошо, теперь, когда за комментарий проголосовали, вы можете удалить этот ответ. :)
незабываемый
@unforgettableid пока оставит оба, для наглядности
Code Bling
0

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

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

su
touch /forcefsck

Затем перезагрузите компьютер.

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

источник: http://forum.xda-developers.com/showpost.php?p=57027579&postcount=20

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