Иногда моя SD-карта «повреждается», что приводит к множеству ошибок чтения/записи. Обычно подключение SD-карты к Windows 7 и выбор параметра «Проверка ошибок» (щелкните правой кнопкой мыши диск > Инструменты > Проверка ошибок) позволяет обнаружить повреждение и исправить его.
Как проверить SD-карты на наличие ошибок привода и исправить их изнутри самого андроида ?
Я также хотел бы упомянуть, что я использую root-права на froyo с установленным busybox.
Вы можете исправить это с помощью рута и эмулятора терминала (например, эмулятора терминала 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
это средство проверки файловой системы для extFS. Так что, если у него другое имя, это скорее fsck.fat
или fsck_msdos
(последнее - реальный пример из старого ПЗУ 2.2 моего Moto).unknown option -- C
но попытался запустить его только с fsck.exfat /dev/block/vold/179:9
. Работал как шарм!umount
, вы должны быть пользователем root?/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
работал или нет?touch /forcefsck
будет работать только на устройстве со сценарием инициализации, который проверяет наличие /forcefsck
файла. Я не знаю ни одного Android-устройства с таким сценарием инициализации. Таким образом, хотя ваш метод, вероятно, будет работать на устройствах Debian, Ubuntu и Mint, я очень сомневаюсь, что он будет работать на любом устройстве Android. Если кто-нибудь когда-нибудь найдет хотя бы одно устройство Android со сценарием инициализации, который проверяет /forcefsck
, пожалуйста, дайте мне знать! Просто ответьте на этот комментарий.
Кодирование