LINUX.ORG.RU

определить уровень износа (wear level) карты памяти телефона

 ,


0

3

добрый вечер

имеется телефон sm-a500f (android 5.0.2; kernel 3.10.x). Пару дней назад с внутренней карты памяти стали исчезать файлы. Дамп я уже снял, файлы восстановил, но самый главный вопрос остался - а сколько той карточке осталось жить? В гугле нашёл, что можно посмотреть значение регистра ext_csd, но здесь меня ждал сюрприз - ядро слишком старое и полей life_time и pre_eol_info там просто нету.

Возникла идея попробовать пробросить карточку на хостовую систему (xubuntu 22.10 kernel 5.19.0-x), нашёл даже рецепт под это дело

выполнить на стороне телефона  
cd /sys/class/android_usb/android0
echo -n 0 > enable # вот здесь сразу выкидывает
echo -n '/dev/block/mmcblk0' > f_mass_storage/lun/file
echo -n 'mass_storage' > functions
echo -n <VID> > idVendor
echo -n <PID> > idProduct
echo -n 1 > enable

Воспользоваться я им не смог - потому что на втором шагу меня сразу же выкинуло из шелла (по очевидной причине)

Итак, вопрос такой, может быть кому-то удавалось пробросить карточку в похожем случае без кардридера/программатора/паяльника/стенда диагностики?

итог:  
проброс карточки ничего не даёт  
парсинг содержимого служебной структуры в моём случае тоже ничего не даёт
★★★

Последнее исправление: d00fy (всего исправлений: 1)

Возникла идея попробовать пробросить карточку на хостовую систему (xubuntu 22.10 kernel 5.19.0-x), нашёл даже рецепт под это дело

Картовод стоит $1.

на втором шагу меня сразу же выкинуло из шелла (по очевидной причине)

Ну так напиши то же самое, но пальцами на экране телефона.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

более знающие люди говорят, что с кардридером не всё так просто -> Вопрос как флешку определенную dev/sd* переподключить на dev/mmcblk* Более того, карточку с андроидом вроде бы нельзя достать из телефона этой серии

«напиши то же самое, но пальцами на экране телефона»
хорошая идея, можешь порекомендовать какой-нибудь нормальный *.apk для этого?

ещё момент, чтобы заиметь netcat на мобильнике, я установил busybox.apk. Сейчас посмотрел, он помимо netcat устанавливает ещё и ash , но вряд ли его можно как-то пальцами запустить

d00fy ★★★
() автор топика
Последнее исправление: d00fy (всего исправлений: 2)
Ответ на: комментарий от d00fy

можешь порекомендовать какой-нибудь нормальный *.apk для этого?

Терминал встроен в твой телефон и так, посмотри в developer settings.

Есть termux, но там своего наворочено, я бы не стал.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

я уже установил целых два - in.ac.dducollegedu.shell_3.apk и jackpal.androidterm_70.apk

ни один из них не реагирует на ввод команды su (ash из busybox’a - тоже)
запуск из adb shell хостовой системы типа
# monkey -p in.ac.dducollegedu.shell -v 1
тоже рута не даёт

d00fy ★★★
() автор топика
Последнее исправление: d00fy (всего исправлений: 4)
Ответ на: комментарий от t184256

так, рута получил
спасибо за подсказку с запуском терминала на телефоне

а пока подожду ответов от iliyap и Dark_SavanT , а то может я вообще не в ту сторону копаю

d00fy ★★★
() автор топика

Итак, вопрос такой, может быть кому-то удавалось пробросить карточку в похожем случае без кардридера/программатора/паяльника/стенда диагностики?

Лет 5 назад я проделывал фокус с uboot - там доступен инструмент dd и можно монтировать sd карту. Правда, доступ к uboot я получал через последовательный порт, который производитель вывел как 2 пина на плате. Припаялся через ftdi232 и вперед.

aiqu6Ait ★★★★
()

попробовал более простой кейс - пробросить partition, а не карточку целиком

cd /sys/class/android_usb/android0
echo -n 0 > enable
echo -n '/dev/block/bootdevice/by-name/userdata' > f_mass_storage/lun/file
echo -n 'mass_storage,adb' > functions
echo -n <VID> > idVendor
echo -n <PID> > idProduct
echo -n 1 > enable

в итоге получаю пачку ошибок в dmesg (https://pastebin.com/P1P7Y0Us), появляется устройство 11:0 /dev/sr0 и размером оно 2.2G, если верить lsblk
само собой, примонтировать его не удаётся
похоже, что пробрасывать карточку целиком смысла пока нету

d00fy ★★★
() автор топика

upd: попробовал пробросить пользовательскую карточку (mmcblk1), есть тут на боковинке телефона разъём для неё
итог - в dmesg ошибок меньше, появляется два устройства (8:16 /dev/sdb и 11:0 /dev/sr0), но сделать с ними тоже ничего нельзя

итого: метод, описанный в стартовом сообщении, бесполезен.

Нужно получить устройство с MAJ=179
для работы mmc-utils MAJ=8 или MAJ=11 не подходят совсем

d00fy ★★★
() автор топика

Кастуй нормально, чтоб каст видели.

По теме мне сказать нечего, я с emmc дел почти не имел. Судя по тому, что тушке почти 10 лет, я б сказал что стюардесса уже нехорошо попахивает и её имеет смысл прикопать.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от Dark_SavanT

мне показалось, что кастуют друг друга люди, которые либо знакомы вживую, либо помогают друг другу на форуме

ps. я вообще тему правильно развернул/озаглавил? Или может быть какие-то неудобные подробности нужно было удалить?

d00fy ★★★
() автор топика
Ответ на: комментарий от d00fy

Каст делается на любого юзера если ты считаешь что это по его части. С чего ты решил, что я смогу тебе в этом помочь - отдельный вопрос, но да ладно, я с эмбедом копаюсь, в принципе релевантно.

Формат лоркод или markdown - уже смотри в документации как.

По топику особых вопросов нет. Разве что ты сначала написал про карту памяти, не сразу было понятно, что ты про впаянный emmc.

Dark_SavanT ★★★★★
()
Последнее исправление: Dark_SavanT (всего исправлений: 2)

Оставьте эти игры, чипы сдыхают не по высчитанному износу, а по своим внутренним соображениям. Может проработать вот так с периодической потерей файлов еще какое-то неопределенное время, а может в любой момент перейти в состояние «пациент скорее мертв». Уровень износа вам никакой полезной информации не даст, эта цифра если и имеется, то для внутренней оптимизации процессов перезаписи контроллером

vaddd ★☆
()
Ответ на: комментарий от vaddd

я это понимаю
но меня уже разбирает спортивный интерес - там 0х9 (карточка при смерти) или там 0х3 (карточке ещё жить и жить, и просто нужно ремонтировать её ФС, - вроде бы андроид предоставляет какой-то fsck для этого)

d00fy ★★★
() автор топика
Ответ на: комментарий от d00fy

Ну ладно, попробуем ;)

Проброс тебе ничего не даст, он пробрасывает как mass_storage, а не как mmc.

Я бы скорее попробовал бы сдампить «сырое» значение ext_csd, вроде было там где-то в sysfs. И декодировать уже руками.

ncrmnt ★★★★★
()
Ответ на: комментарий от ncrmnt

«попробовал бы сдампить»
именно это я и сделал перед тем, как создать тему на форуме

ядро версии 3.10 не заполняет нужные поля в соответсвующей структуре (говоря проще, у меня просто нули там, где должны быть цифры)
более того, на этот телефон можно установить android 6.0.1 , но там тоже ядро 3.10.х

ради интереса взял другой телефон, более новый, там ядро 4.4.х и полей там намного больше (23 против 16), в том числе и нужное мне поле есть

d00fy ★★★
() автор топика
Ответ на: комментарий от d00fy

Я не уверен, что дело именно в ядре. Если ядро отдает структуру «сырую», то просто копирует данные полученные в буфер с карты без преобразований. Может оказаться легко, что эту структуру не отдает сама китайская карточка.

ncrmnt ★★★★★
()
Последнее исправление: ncrmnt (всего исправлений: 1)
Ответ на: комментарий от ncrmnt

«структуру не отдает сама китайская карточка»
скорее всего так и есть

если вдруг кто-то будет читать эту тему, то
вот скрипт для разбора ext_csd https://gist.github.com/kylemanna/5692543
а вот исходник в ядре, который описывает struct mmc_ext_csd
https://github.com/torvalds/linux/blob/v6.2/include/linux/mmc/card.h

спасибо вам за внимание/помощь
тему помечу решённой, мусолить тут уже больше нечего

d00fy ★★★
() автор топика