По поводу режима USB Mass Storage, неизвестно куда «исчезнувшего» из Android Ice Cream Sandwich, в интернете нынче бушует много страстей. Высказались все, и знающие, но редко высказывающися, и незнающие, зато всегда имеющие мнение. Страсти бушуют настолько нешуточные, что мне даже пришлось «вернуться» с блоггерской пенсии, зайти в ЖЖ и написать несколько строк.
Если по-быстрому и по сути:
— USB Mass Storage mode — это режим подключения SD карточки в телефоне, когда телефон превращается в card reader для SD карточки.
— USB Mass Storage mode требует наличия в телефоне отдельной SD карточки, заменяемой или встроенной. То есть зависит он от конретной кофигурации «железа» в телефоне.
— Из Android 4.x ICS поддержка USB Mass Storage никуда не делась — достаточно поставить ICS на Nexus S, и вы увидите, что он там есть и прекрасно работает.
— USB Mass Storage не поддерживается на Galaxy Nexus, опять-таки из-за кофигурации «железа» последнего. Кто-то просто перепутал железо с софтом, а народ это подхватил.
How To Fix A USB Mass Storage Device Problem [Tutorial]
— Преживающим за будущие телефоны: не переживайте. Производители телефонов прекрасно знают, что на многих рынках наличие SD card в телефоне важно для покупателей, и во многие модели будет включена поддержка заменяемой внешней SD карточки, зачастую вместе со встренной «внутренней» SD карточкой.
Начнем издалека. С кофигурацией хард драйвов при сборке домашнего компьютера сталкивались все гики. Кто-то покупает один большой и разбивает его на несколько разделов, кто-то покупает небольшой SSD для установки на него системы и большой внутренний SATA для хранения файлов, кто-то докупает еще и внешний USB для хранения/переноса фильмов, фотографий и музыки.
Надо прикидывать, какого размера покупать диски, какой скорости, с каким интерфейсом подключения, какой фирмой произведенные, и т.п. Знакомая ситуация? Так вот с аналогичной ситуацией сталкиваются и производители телефонов при проектировании и производстве очередной модели.
Что нужно хранить на телефоне? Да практически то же самое:
1. Системные файлы (ОС)
2. Установленные программы и их файлы
3. Файлы пользователя
Допустим, вам надо сделать так, чтобы разные типы данных хранились на разных дисках: C, D и Е, соответственно. Про подобную разбивку и ее достоинства я писал разньше. Напомню, что подобное разделение дает некую «гибкость», в том числе и на десктопе. Например, надо переустановить систему — форматируем С, а наши данные на D и Е остаются. Тогда речь шла в основном про C и D. А теперь поговорим про Е.
Е — это где вы и ваши программы хранят свои данные, особенно если эти данные занимают много места. Вы обычно кладете туда свой медиа контент (фильмы, музыку, фото), камера туда пишет новые фотографии и видео, GPS навигаторы загружают туда свои гигабайтные карты, и т.п. В Андроиде — это ваша SD карточка. Исторически так сложилось, что «внутренняя» флеш-память для C и D была дорогая, и если нужно было хранить что-то обьемное, это нужно было делать на внешней дешевой microSD, то есть диске Е. Дополнительной радостью от этого было то, что пользователь получал возможность регулировать размер «диска Е», а также использовать microSD для обмена данными с другими устройствами, с целью чего она форматировалась под файловую систему VFAT, понятную всем. Примерно так, как если бы диск Е у вас был внешним USB хардом, и вы бы его подключили к другому компьютеру чтобы «скинуть фильмы».
How to configure USB Storage (or FTP) on Huawei Routers | Talkin’ Tech Stuff
Продолжая аналогию microSD с USB внешним хардом, скажем, что процесс подключения его к другому устройсву (компьютеру, медиа плееру, и т.п.) требовал его полного отключения от вашего смартфона. Нельзя же USB хард воткнуть сразу в два устройства. Вот и при включении USB Mass Storage Mode контроллер чтения/записи SD карты полностью переключался на USB.
В результате телефон доступа к SD карте больше не имел, а контроллер ее выступал в роли USB ридера. Как и в случае с любым ридером, компьютер работал с SD картой напрямую. То есть если бы она была отформатирована под файловую систему, неизвестную ОС, стоящей на компьютере, ОС вам просто сказала бы, что целостность SD карты нарушена, и ее надо бы отформатировать. Так работает любой ридер, он не понимает файловой структуры на накопителе, он просто дает доступ к «блокам» (кластерам) на нем, остальное должна «понять» ОС.
Производители экспериментируют много. В каких-то телефонах ставят быстрый дорогой маленький С, менее быстрый, более дешевый, и больший по размеру D, и дают пользователю самому выбрать Е (Galaxy S), в каких-то C и D «живут» на одном «физическом харде», а Е по-прежему живет на microSD. А в каких-то (таблетки, Galaxy Nexus) — все живет как логические разделы на одном большом чипе.
А бывают, что производители ставят и внутренний логический Е, а пользователю дают возможность воткнуть еще и диск F — внешнюю microSD (Samsung Vibrant). Выбор конфигурации обусловлен многими факторами. Факторы разные, в зависимости от компании. Например, в устройствах от Эппла все будет жить на одном внутреннем дорогом чипе.
У других конфигурация будет обуславливаться в основном ценой комплектующих, пожеланиями операторов и рынком сбыта. Андроид (благодаря использованию ядра Линукс), спокойно поддерживает любую кофигурацию.
А теперь давайте перейдем на терминологию Линукса, где все устройства (логические диски, дисководы, CD-ROMы и т.п.) являются директориями, и назовем вещи своими именами. С станет /system, D — /data, E — /sdcard. На таблетках (кстати, почему весь сыр-бор не подняли тогда?
Куда смотрели критики Андроида?) и на Galaxy Nexus /sdcard — это всего лишь директория /data/media, подмаунченная через FUSE. (О, FUSE — это прекрасная вещь, о ней в другой раз, для совсем безнадежных гиков). Выражаясь нормальным языком, можно сказать, что /sdcard стал таким хитрым линком на /data/media. То есть диск Е стал линком на директорию на диске D. Таким образом, пользовательские программы и пользовательский же медиа контент делят общее пространство на диске. И не получается, что места для музыки осталось еще много, но вам нужно место для очередной программки, но вот его уже не осталось. Прямо как на айФоне.
Почему нельзя включить USB Mass Storage Mode для подобной конфигурации? А именно потому, что надо подключать весь «логический диск» сразу. А он у вас ненастоящий, так как он специально сделан так, чтобы он был варьируемого размера.
А чтобы иметь возможность подключать, нужно знать какой кусок чипа отведен под нужный логический диск, то есть фиксировать его размер, чего не хочется делать. «А почему тогда не весь чип» простите вы, «подключите весь чип, а я уж там сам разберусь». Хорошо, подключим весь чип. А у вас там не только и /data и /system, а еще вполне вероятно, что boot, recovery, bootloader — довольно сложная система из нескольких разделов (логических дисков), из которых несколько — в мало кому понятной файловой системе ext4. И если все это дело подключить к компьютеру как внешний USB накопитель, любой компьютер предложит вам это безобразие отформатировать. Думаю, что обьяснять не надо, что бывает, когда на вашем компьютере вдруг оказывается отформатированным диск С.
В качестве замены нам предлагается протокол MTP (Media Transfer Protocol), при использовании которого ваш компьютер видит телефон как MP3 плеер. В Windows такой протокол понимает Windows Media Player (да и сам Windows понимает, начиная с Vista), позволяя переливать на телефон медиа контент из вашей медиатеки (из того же Media Player). Решение менее демократичное, чем USB Mass Storage, но более демократичное, чем тот же iTunes. Решение спорное и не всем понравится, но давайте учтем следующее:
— Galaxy Nexus, хоть и является флагманским устройством для Android Ice Cream Sandwich, создан для демонстрации не всех возможностей ОС, а лишь их части. И ни в коем случае возможности ОС не ограничены возможностями данного телефона.
— Nexus устройства являются некой «игровой площадкой» Гугла, платформой для тестирования новых возможностей и идей. Вполне вероятно, что какие-то из них куда-то пойдут, а какие-то — нет. Но опробовать их по любому надо.
— Nexus устройства другим производителям не указ. Гугл не накладывает ограничений на конфиграцию телефонов. Даже если Андроид не поддерживает какое-то определенное «железо», производителю ничего не стоит добавит поддержку самому — исходники-то открыты, и это делалось не раз. Так что даже если поддержка USB Mass Storage вдруг пропала бы из ICS по воле Гугла, ее быстро добавили бы обратно (это несложно, поверьте мне).
— Телефоны на ICS со сьемными SD card и USB Mass Storage будут. Для рынков, где 3G связь медленна или имеет плохое покрытие (например, Индия), наличие в телефоне SD card — один из основных факторов при покупке. И, поверьте мне, производители телефонов прекрасно это знают. И знают, что это востребовано не только в Индии.
— Если вы настоящий гик, вы всегда найдете способ перебросить любые (не только медиа) файлы на телефон. Подсказка: adb push file /sdcard/
P.S. Любителям конспирологических теорий: а как вам идея, что Гугл избрала такую конфигурацию, чтобы избежать использования VFAT (обязательный при использовании SD card), опасаясь судебного иска от Майкрософта на основе патента 17-летней давности на использование длинных имен файлов в файловой системе FAT?
Источник: alt-mob-reviews.livejournal.com
Монтирование внутренней памяти Android как Mass Storage и восстановление данных
Восстановление данных, удаленных фото и видео, документов и других элементов из внутренней памяти современных Android телефонов и планшетов стало сложной задачей, поскольку внутреннее хранилище подключается по протоколу MTP, а не Mass Storage (как флешка) и привычные программы для восстановления данных не могут найти и восстановить файлы в этом режиме.
Существующие популярные программы для восстановления данных на Android (см. Восстановление данных на Android) пробуют обойти это: в автоматическом режиме получить root-доступ (либо предоставляя сделать это пользователю), а затем — прямой доступ к хранилищу устройства, но это работает не для всех устройств.
Однако, существует способ вручную смонтировать (подключить) внутреннее хранилище Android как флешку (Mass Storage Device) с помощью команд ADB, а затем использовать любую программу восстановления данных, работающую с файловой системой ext4, использующуюся на этом хранилище, например, PhotoRec или R-Studio. О подключении внутреннего хранилища в режиме Mass Storage и последующем восстановлении данных из внутренней памяти Android, в том числе после сброса на заводские настройки (хард ресета) и пойдет речь в данной инструкции.
Предупреждение: описываемый способ не для начинающих. Если вы относите себя к ним, то какие-то пункты могут оказаться непонятными, а результат действий не обязательно будет ожидаемым (теоретически, можно сделать хуже). Используйте изложенное только под свою ответственность и с готовностью к тому, что что-то пойдёт не так, а ваше Android устройство больше не включится (но, если всё делать, понимая процесс и без ошибок, этого произойти не должно).
Подготовка к подключению внутреннего хранилища
Все действия, описанные ниже можно выполнить в Windows, Mac OS и Linux. В моем случае использовалась Windows 10 с установленной в ней подсистемой Windows для Linux и Ubuntu Shell из магазина приложений. Установка компонентов Linux не обязательна, все действия можно провести и в командной строке (и отличаться они не будут), но я предпочел этот вариант, так как при использовании ADB Shell в командной строке возникли проблемы с отображением спецсимволов, не влияющие на работу способа, но представляющие неудобства.
Прежде чем начать подключение внутренней памяти Android как флешки в Windows выполните следующие шаги:
- Скачайте и распакуйте Android SDK Platform Tools в папку на вашем компьютере. Загрузка доступна на официальном сайте https://developer.android.com/studio/releases/platform-tools.html
- Откройте параметры системных переменных среды (например, начав в поиске Windows вводить «переменных», а затем в открывшемся окне свойств системы нажав «Переменные среды». Второй способ: открыть Панель управления — Система — Дополнительные параметры системы — «Переменные среды» на вкладке «Дополнительно»).
Если вы проделываете указанные действия в Linux или MacOS, то поищите в Интернете, как в этих ОС добавить папку с Android Platform Tools в PATH.
Подключение внутренней памяти Android как Mass Storage Device
Теперь приступаем к основной части этого руководства — непосредственно подключение внутренней памяти Android как флешки к компьютеру.
- Перезагрузите ваш телефон или планшет в режиме Recovery. Обычно для этого нужно выключить телефон, затем зажать и удерживать кнопку питания и «громкость вниз» в течение некоторого времени (5-6) секунд, а после появления экрана fastboot выбрать Recovery Mode с помощью кнопок громкости и загрузиться в него, подтвердив выбор коротким нажатием кнопки питания. Для некоторых устройств способ может отличаться, но легко находится в Интернете по запросу: «модель_устройства recovery mode»
- Подключите устройство к компьютеру по USB и подождите некоторое время, пока оно не будет настроено. Если по окончании настройки в диспетчере устройств Windows устройство будет отображаться с ошибкой, найдите и установите ADB Driver именно для вашей модели устройства.
Запустите Ubuntu Shell (в моем примере используется именно оболочка Ubuntu под Windows 10), командную строку или терминал Mac и введите adb.exe devices (Примечание: из-под Ubuntu в Windows 10 я использую adb для Windows. Можно было бы установить adb для Linux, но тогда бы он не «видел» подключенных устройств — ограничение функций подсистемы Windows для Linux).
В ADB Shell по порядку выполняем следующие команды.
mount | grep /data
В результате получаем имя устройства block, которое будет использовать далее (не теряем его из виду, запоминаем).
Следующей командной размонтируем раздел data на телефоне, чтобы иметь возможность подключить его как Mass Storage.
Далее находит индекс LUN нужного раздела, соответствующего Mass Storage Device
find /sys -name lun*
Будет отображено несколько строк, нас интересуют те, которые имеют в пути f_mass_storage, но пока мы не знаем, какая именно (обычно, заканчивающиеся на просто lun или lun0)
В следующей команде используем имя устройства из первого шага и один из путей с f_mass_storage (один из них соответствует внутренней памяти). Если будет введен неверный, вы получите сообщение об ошибке, тогда пробуем следующий.
echo /dev/block/mmcblk0p42 > /sys/devices/virtual/android_usb/android0/f_mass_storage/lun/file
Следующий шаг — создаем скрипт, подключающий внутреннее хранилище к основной системе (всё, что ниже — одна длинная строка).
echo «echo 0 > /sys/devices/virtual/android_usb/android0/enable echo «mass_storage,adb» > /sys/devices/virtual/android_usb/android0/functions echo 1 > /sys/devices/virtual/android_usb/android0/enable» > enable_mass_storage_android.sh
В этот момент сессия ADB Shell будет закрыта, а к системе будет подключен новый диск («флешка»), представляющий собой внутреннюю память Android.
При этом, в случае Windows вас могут попросить отформатировать накопитель — не делайте этого (просто Windows не умеет работать с файловой системой ext3/4, но многие программы для восстановления данных умеют).
Восстановление данных из подключенного внутреннего хранилища Android
Теперь, когда внутренняя память подключена как обычный накопитель, мы можем использовать любую программу для восстановления данных, которая умеет работать с разделами Linux, например, бесплатную PhotoRec (доступную для всех распространенных ОС) или платную R-Studio.
Я пробую выполнить действия с PhotoRec:
- Скачиваем и распаковываем PhotoRec с официального сайта https://www.cgsecurity.org/wiki/TestDisk_Download
- Запускаем программу, для Windows и запуска программы в графическом режиме запустите файл qphotorec_win.exe (подробнее: восстановление данных в PhotoRec).
- В главном окне программы вверху выбираем устройство Linux (тот новый диск, который мы подключили). Ниже указываем папку для восстановления данных, а также выбираем тип файловой системы ext2/ext3/ext Если вам требуются файлы лишь определенного типа, рекомендую указать их вручную (кнопка «Форматы файлов»), так процесс пойдет быстрее.
В моем эксперименте из 30 удаленных из внутренней памяти фотографий в идеальном состоянии было восстановлено 10 (лучше, чем ничего), для остальных — только миниатюры, также были найдены скриншоты png, сделанные ещё до хард-ресета. R-Studio показала примерно тот же результат.
Но, так или иначе, это не проблема способа, который работает, а проблема эффективности восстановления данных как таковой в некоторых сценариях. Так же отмечу, что DiskDigger Photo Recovery (в режиме глубокого сканирования с root) и Wondershare Dr. Fone for Android показали сильно худший результат на том же устройстве. Конечно, вы можете попробовать и любые другие средства, позволяющие восстанавливать файлы с разделов с файловой системой Linux.
По окончании процесса восстановления, извлеките подключенное USB устройство (используя соответствующие способы вашей операционной системы).
Затем можно просто перезагрузить телефон, выбрав соответствующий пункт в меню рекавери.
Источник: spravkapc.ru
Переключение режима USB модема из Mаss Storage в GSM modem в Linux
Переключаем USB 3G модем из режима накопителя в режим GSM modem на Raspbery Pi 3 Model B+.
Теория
Обычно USB модемы имеют 2 режима инициализации в OS — Mass Storage (виртуальный накопитель с драйверами) и GSM модем. Нам нужно указать OS правило — при инициализации, переключать USB модем с определенным VendorId:ProductId в режим GSM modem.
Установка usb-modeswitch
Для одних USB модемов достаточно просто установить утилиту usb-modeswitch и usb-modeswitch-data, которая содержит правила и конфиги переключения режимов для большинства USB устройств. Примечательно, что в OS Raspbian Stretch эта утилита уже установлена.
sudo apt install usb-modeswitch usb-modeswitch-data
После установки usb-modeswitch и подключения USB модема, он может определиться правильно — как GSM modem:
dmesg -T | grep ttyUSB
[2018-05-25 02:42:14] usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB0 [2018-05-25 02:42:14] usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB1 [2018-05-25 02:42:14] usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB2 [2018-05-25 02:42:22] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB3 [2018-05-25 02:42:22] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB4 [2018-05-25 02:42:22] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB5
Также будут доступны по 3 интерфейса /dev/ttyUSB* на каждый модем:
ls -la /dev/ttyUSB*
crw-rw—- 1 root dialout 188, 0 май 25 02:45 /dev/ttyUSB0 crw-rw—- 1 root dialout 188, 1 май 25 02:42 /dev/ttyUSB1 crw-rw—- 1 root dialout 188, 2 май 25 14:48 /dev/ttyUSB2 crw-rw—- 1 root dialout 188, 3 май 25 13:56 /dev/ttyUSB3 crw-rw—- 1 root dialout 188, 4 май 25 02:42 /dev/ttyUSB4 crw-rw—- 1 root dialout 188, 5 май 25 14:48 /dev/ttyUSB5
Но, попадаются модемы с номерами vendor ID и product ID, для которых нужно прописывать правила переключения режима из Mass Storage в GSM modem.
dmesg -T | grep -Pi ‘huawei|ttyUSB’
[2018-05-25 02:42:23] scsi 1:0:0:0: Direct-Access HUAWEI MMC Storage 2.31 PQ: 0 ANSI: 2 [2018-05-25 02:42:23] scsi 0:0:0:0: CD-ROM HUAWEI Mass Storage 2.31 PQ: 0 ANSI: 2 [2018-05-25 13:22:13] scsi 2:0:0:0: Direct-Access HUAWEI TF CARD Storage 2.31 PQ: 0 ANSI: 2
Настройка usb-modeswitch
Внимание!
Если совсем ничего не получается, попробуйте очистить логи, перезагрузить сервер и пролистать все новые логи:
sudo rm /var/log/usb_modeswitch_* cat /var/log/usb_modeswitch_*
Параметры запуска usb-modeswitch
Переключение режима работы модема можно запускать вручную.
Примеры запуска утилиты для ручного переключения режима USB девайса:
sudo usb_modeswitch -v 12d1 -p 1003 -V 12d1 -P 1003 -H sudo usb_modeswitch -v 12d1 -p 1003 -V 12d1 -P 1003 -d sudo usb_modeswitch -v 12d1 -p 1003 -V 12d1 -P 1001 -HR -M «55534243123456780000000000000011062000000100000000000000000000»
sudo usb_modeswitch -v 0x12d1 -p 0x1003 -V 0x12d1 -P 0x1001 -J sudo usb_modeswitch -v 12d1 -p 1003 -V 12d1 -P 1001 -M 55534243123456780000000000000011060000000000000000000000000000
#: Error: can’t use storage command in MessageContent with interface 0; interface class is 255, expected 8. Abort
sudo usb_modeswitch -v 0x12d1 -p 0x1003 -V 0x12d1 -P 0x1003 —target-class 0xff -c ./setup/vendors/configs/12d1:1003 sudo usb_modeswitch -v 12d1 -p 1003 -V 12d1 -P 1003 —target-class 0xff -J #: No devices in default mode found. Nothing to do.
sudo usb_modeswitch -v 12d1 -p 1003 -H #: Send old Huawei control message .
-v ID Искать девайс с указанным VendorId -p ID Искать девайс с указанным ProductId -V ID Переключить девайс в заданный VendorId -P ID Переключить девайс в заданный ProductId -c FILE Указать файл конфигурации с настройками переключения девайса и режима —target-class 0xff ?? -M Передача какой-то управляющей команды, значение — константа (не разобрался с этим) -H Режим Huawei -J Режим Huawei new -R Перезагрузить USB устройство -d Отключить накопитель (Mass Storage)
Файлы конфигурации usb-modeswitch
Основной файл конфигурации (активация утилиты, логирование):
sudo leafpad /etc/usb_modeswitch.conf
Примечание
Каталог /etc/usb_modeswitch.d теперь используется для дополнительных файлов конфигурации.
Примеры конфигурации: http://www.draisberghof.de/usb_modeswitch/device_reference.txt
Архив /usr/share/usb_modeswitch/configPack.tar.gz не распакован! Так должно быть?
cp /usr/share/usb_modeswitch/configPack.tar.gz /home/pi/robot/setup/modems-mode-configs cd /home/pi/robot/setup/modems-mode-configs sudo tar -xzf configPack.tar.gz
Правила переключения из пакета usb-modeswitch-data
Каталог c правилами подключения девайсов (файлы .rules), с помощью которых можно переключить режим USB устройства при его инициализации:
/lib/udev/rules.d/ # системные правила /etc/udev/rules.d/ # пользовательские правила
Дефолтные правила переключения режима USB модемов находятся здесь:
cat /lib/udev/rules.d/40-usb_modeswitch.rules
Добавить собственное правило для переключения режима USB модема:
sudo leafpad /etc/udev/rules.d/40-huawei.rules
ATTR==»12d1″, ATTR==»1003″, RUN+=»usb_modeswitch ‘/%k'» ACTION==»add», SUBSYSTEM==»usb», ATTRS==»12d1″, ATTRS==»1003″, RUN+=»/usr/sbin/usb_modeswitch -v 12d1 -p 1003 -J»
Драйвер
Загрузить другой драйвер и отключить накопитель (как с этим работать?):
# Загрузить драйвер модема и detach накопитель sudo modprobe usbserial vendor=0x12d1 product=0x1003 sudo usb_modeswitch -v 0x12d1 -p 0x1003 -d #: OK, driver detached
Источник: onedev.net