Синхронизируйте ext SD с USB OTG **без** использования ПК

Сведения об устройстве

  • Moto X Play — Android 6.0.1, рут (бессистемный рут)

  • Samsung 64 Гб доб. SD

  • San Disk 128 ГБ USB — поставляется с FAT 32, переформатированной в exFAT, так как у меня есть папки> 4 ГБ на внешней SD

Вариант использования

Синхронизируйте все содержимое ext SD на USB (односторонняя синхронизация без удаления содержимого SD-карты) по еженедельному расписанию / по запросу, как инкрементное резервное копирование без использования ПК (у меня есть один, но причины нежелания его использовать не имеют значения)

Другие детали

  • USB-накопитель распознается устройством, правильно подключенным по стандарту OTG ( Настройки → Хранилище и USB )

  • Бизибокс установлен. Он поставлялся в комплекте с ROM Toolbox Pro. Я не использовал его напрямую. Если необходимо установить другой занятый ящик, это нормально, если он не конфликтует.

  • Точки крепления, как показано ниже

введите описание изображения здесь введите описание изображения здесь

Вещи пытались

  • Неудачный поиск приложения - мне не удалось найти приложение, которое может это сделать ( Folder Sync утверждает, что не видит USB)

  • Поиск альтернатив в гугле

  • Автоматизация MacroDroid не работает, так как приложение не видит USB (поднято на форуме приложения)

Вопрос: Как я могу это сделать? Я открыт для любых средств

Обратите внимание, что я намереваюсь разместить вознаграждение в размере 100 , любой ответ, который должен быть собран до того, как я опубликую награду, будет награжден аналогичным образом (я могу отложить публикацию награды, чтобы убедиться, что я получу решение)

Пожалуйста , избегайте решений, которые

  • не тестировались - они должны были быть протестированы на вашем устройстве и конфигурации USB, чтобы придать им достоверность

  • Задействовать ПК, загружать в облако, передавать на удаленный сервер и т. д.

  • Ссылки на утверждения из сомнительных источников, которые не могут быть проверены

  • Использование файловых менеджеров (у меня были смешанные результаты с ними, но это уже другой вопрос)

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

Я обсуждал эту потребность в чате, и некоторые потенциальные кандидаты на решение включали BusyBox rsyncи Tasker . Я ничего не знаю об этих средствах, поэтому , пожалуйста, предоставьте полную информацию . Будучи вопросом о щедрости (почти), я ожидаю, что смогу сразу же успешно реализовать его, не требуя разъяснений.

(Будучи корневым устройством с бессистемным корнем, решения с использованием root в порядке. Однако, если ОС должна быть изменена каким-либо образом, выделите, поскольку бессистемное не разрешает это, хотя есть обходной путь)

У меня мало времени, и мне нужно, чтобы это заработало как можно скорее.

Я посмотрю, смогу ли я поработать над чем-нибудь, когда смогу :)
Ах, достаточно честно :) Не проверял чат.

Ответы (2)

Как мы выяснили, решение, которое вы сейчас используете в чате, этот ответ должен соответствовать «тестируется», «не требует ПК или файлового менеджера» и «полагается на проверенные источники». Хотя тем временем был rsyncопубликован еще один ответ, вы также попросили меня представить наше решение — так что начнем:

Для rsyncэтого можно использовать команду. С учетом всех ваших требований (в том числе упомянутых позже в чате) командная строка будет выглядеть так:

rsync -a --delete /mnt/sdcard /mnt/usb

Пояснения к команде:

  • rsyncочевидно, это исполняемый файл/команда
  • -aозначает "архив", т.е. сохранить все атрибуты. Это включает в себя рекурсивное копирование содержимого (каталоги, подкаталоги, файлы), сохранение меток файлов и владельцев (для последнего обычно требуется root), сохранение разрешений и т. д. Подробности см. в разделе Что такое режим архива в rsync? на нашем дочернем сайте.
  • --deleteпозаботится об удалении файлов на цели (здесь: /mnt/usb), которые больше не доступны в источнике (здесь: /mnt/sdcard)
  • остальные параметры указывают источник для копирования ( /mnt/sdcard) и цель для копирования ( /mnt/usb). Обратите внимание, что мы указали оба как каталоги, поэтому все содержимое, включая скрытые файлы, также должно быть включено (последнее не было бы, если бы мы использовали маску типа /mnt/sdcard/*).
    Примечание: не забудьте указать здесь настоящие точки монтирования или, по крайней мере, настоящие каталоги (например, не /mnt/sdcardсимволическую ссылку, как в примере), или он может просто скопировать символическую ссылку и подумать, что это все, что вам нужно :)

Возможно, вы захотите сначала попробовать описанное выше на небольшом источнике, чтобы увидеть, как это работает.


Теперь, когда «как» раскрыто, остается вопрос: где находится rsync? Обычно он не предустановлен на устройстве, и большинство Busybox также не включают его. Когда-то в Playstore было приложение под названием rsync backup for Android , но его больше нет. Как указано в этой вики , вы можете напрямую загрузить rsyncдвоичный файл отсюда ¹, затем отправить его на свое устройство Android и установить. Предполагая, что вы нажали двоичный файл на /mnt/sdcard:

su
mount -o remount,rw /system
cd /system/xbin
cp /mnt/sdcard/rsync .
chmod 755 /system/xbin/rsync
chown root.shell /system/xbin/rsync
mount -o remount,ro /system

Вышеупомянутое должно быть сделано либо в терминальном приложении, либо через adb shell.

Это сделано и успешно протестировано из командной строки, но остается вопросом . Я знаю, что может выполнять команды оболочки от имени пользователя root (раньше это делалось с помощью префикса восклицательного знака, сегодня для этого может быть даже установлен флажок — я не проверял это некоторое время), но ваш Macrodroid может обеспечить и это. В качестве альтернативы вы можете сделать это способом Unix/Linux и использовать Cron, который предоставляется Busybox; подробнее см.: Как использовать crontab в Android?


Также см:


¹ Конечно, вы также можете попытаться найти оригинальное приложение на таких сайтах, как APKMirror или ApkPure, или загрузить приложение отсюда, но тогда вам нужно сначала установить это приложение, а затем взять двоичный файл из его каталога данных, /data/data/eu.kowalczuk.rsync4android/files/rsyncкоторый я нашел немного неудобно ;)

Спасибо, решение сработало для меня. Несколько моментов, которые могут помочь читателям: 1. Я пробовал со всеми версиями Busybox, которые хорошо оценены, и ни одна из них не имеет rsyncдоступной профессиональной версии ( я отправила разработчику письмо с просьбой добавить ее), так что ничего не остается . выбор, но другие средства (кстати, не удалось найти приложение на упомянутых известных сайтах) 2. Автоматизация выполнения команды по запросу / расписанию успешно. Инструкции здесь
3. TWRP может видеть резервную копию на USB, поэтому, по-видимому, она должна выполняться нормально 4. То же самое с TiBu, хотя для этого требуется небольшой обходной путь ( Расположение папки резервного копирования> Поставщик хранилища , нажмите на него и выберите параметры для вашей версии ОС) 5. Хотя вы не являетесь пользователем Windows, для полноты картины вы можете подумать о добавлении расширения для rsyncWindows, как вы сделали для Linux — я видел ссылки. Добавлю позже, если это может помочь читателям
@beeshyams ptspts.blogspot.com/2015/03/… содержит инструкции о том, где можно найти и вручную установить rsync для Android. Вам придется проявить немного творчества, так как вы не хотите использовать ПК. Я бы рекомендовал попробовать использовать webget и Root Explorer для загрузки, переименования, установки +x и перемещения двоичного файла.
@ChrisOlin: Спасибо, и я видел это раньше, но, не будучи знаком с Linux, сделал это неудобным способом загрузки приложения, извлечения rsyncи обмена им с Иззи, и он включил это в свой ответ. В примечаниях к сноскам. Этому можно научиться, но позже, когда время позволит.
Обновление: проверено TWRP, и он отлично восстанавливается из OTG. ТиБу сталкивается с проблемами. Скопированную папку на USB видит, но не может выбрать для восстановления. Однако, если я создаю новую папку резервного копирования на USB, она восстанавливается. В случае замены extSD, я полагаю , копирование резервной копии папки должно работать, поскольку все атрибуты и разрешения не повреждены.
@beeshyams Используете ли вы хранилище DocumentProvider? Если да, но он по-прежнему не работает, возможно, SELinux не позволяет Titanium Backup считывать носитель с флэш-накопителя.
@ChrisOlin: к сожалению, это не так. Только что перепроверил, это Permissive . Видел смешанные отчеты в сети, у одних работает, у других нет. Не уверен, почему
@ChrisOlin: Кроме того, как уже упоминалось, я могу создавать и создавать резервные копии из новой папки резервного копирования, поэтому доступ для чтения / записи не является проблемой.
Контексты SELinux настраиваются немного иначе, чем традиционные разрешения файлов Unix. Я столкнулся именно с этой проблемой: SELinux не позволяет Titanium Backup получить доступ к данным резервного копирования и вызывает точно такую ​​​​же проблему, которую вы описываете.

Будьте предупреждены. Я не собираюсь предоставлять вам полную информацию, главным образом потому, что то, о чем вы просите, настолько неконкретно и неприятно, что награда за этот вопрос не стоит того, чтобы тратить время на тестирование решения для вас, которое у меня нет возможности гарантия будет работать на вашем устройстве. Вы можете либо проигнорировать мой совет и страдать, либо обосновать любые трудности с помощью критического мышления и Google. Если вам не нравятся эти варианты, вы всегда можете купить iPhone. Они предназначены для людей, которым нужно что-то, что «просто работает». Если у вас нет времени на исследования или настройку решения, которое будет работать на вас, возможно, Android вам не подходит.

Есть множество способов добиться того, что вы пытаетесь сделать. Возможно, самый простой и надежный метод — использовать программное обеспечение, установленное на большинстве устройств Android по умолчанию, на чем я собираюсь сосредоточиться. Поскольку вы пытаетесь запустить что-то по обычному расписанию, я бы сказал, что лучшим решением будет использование cron. В связи с этим взгляните на эту ветку StackOverflow , поскольку она предназначена для запуска на Android. Кроме того, так что мы все на одной странице, cron — это планировщик заданий, доступный в большинстве (всех?) Unix-подобных операционных системах, включая Android. Поскольку вы не вдавались в подробности о том, когда именно вы хотите, чтобы эта работа запускалась еженедельно, я оставлю вам возможность настроить crontab (который хорошо задокументирован в Интернете ине сложно ).

Это позаботится о планировании всего, но следующим шагом будет выяснить, как вы хотите создать резервную копию всего, что является очень важным вопросом, о котором вы до боли не знали. Вы просто хотите скопировать новые/измененные данные с внешней SD-карты на флэш-накопитель или вам нужны полные резервные копии SD-карты, хранящиеся на флэш-накопителе по дате? Это вопросы, которые вы должны выяснить для себя, прежде чем обращаться в Интернет за советом.

Не зная, чего именно вы пытаетесь достичь, я предполагаю, что первый сценарий работает лучше всего. Поскольку вы копируете данные на уровне файла (в отличие от уровня блока), rsyncэто, вероятно, ваш лучший выбор. Он очень универсален и должен работать прямо из коробки без необходимости настройки. Он у вас уже должен быть доступен, а если нет, его легко получить через Busybox.

Предполагая, что точки монтирования остаются прежними, я бы использовал следующую команду: rsync -rlpt /mnt/media_rw/0000-0000 /mnt/media_rw/E82C-B290. Для вашего удобства я включил праймер по флагам, которые я использовал ниже:

-r, --recursive рекурсия по каталогам

-l, --links копировать симлинки как симлинки

-p, --perms сохранить разрешения

-t, --times сохранить время модификации

Есть еще -aфлаг (сокращение от archive mode ), но он делает кучу другой ненужной хрени в данной ситуации вроде синхронизации uid/gid. В большинстве сценариев резервного копирования использование -aимеет смысл, поскольку вы хотите сохранить право собственности, если вам придется восстанавливать из резервных копий. Однако внешнее хранилище SD использует файловую систему FAT, которая не поддерживает права доступа к файлам Unix. Хотя у файлов на вашей внешней SD-карте есть владелец/группа, они статически устанавливаются операционной системой. Если вы попытаетесь изменить их, я почти уверен, что вы получите сообщение об ошибке или произойдет сбой в фоновом режиме. Флаги, которые я использовал, делают этот процесс намного более эффективным, но если по какой-то причине вы хотите, чтобы rsync синхронизировал все эти дополнительные вещи, вместо этого используйте флаг режима архива.

Итак, теперь, когда у нас есть команда, которую нужно запустить, осталось только настроить crontab и заставить ее выполнять эту rsyncкоманду. Это не очень элегантное решение, но оно будет работать. Если вы хотите настроить какое-то ведение журнала ( Майк Рубель проделал большую работу, из которой вы могли бы черпать вдохновение ), вы можете написать сценарий оболочки, поместить его во внутреннюю память вашего телефона и заставить cron запускать сценарий оболочки вместо команда rsync.

Чтобы создать резервную копию всего вручную вне cron, вы можете запустить эту команду rsync с помощью ConnectBot или любого другого приложения, которое предоставляет вам доступ к оболочке. Если вы планируете делать это часто, возможно, будет быстрее поместить команду в файл (например backupsd, ) chmod +xи вставить ее в папку, которая также находится в системном пути (например, /system/bin). Таким образом, вы можете ввести backupsdвместо rsync -rlpt /mnt/media_rw/0000-0000 /mnt/media_rw/E82C-B290.

По сути, это было решение, которое я разработал с ОП в чате :) Только одно примечание: вместо -rlptпросто используйте -a(режим архива), что подразумевает все остальные переключатели :)
Я обратился к тому, почему я не использовал -aсразу после сводки флагов, которые я использовал, и оставил это на усмотрение ОП. Ясно, что великие умы мыслят одинаково.
Ах, извини, Крис, я пропустил эту часть. Но для меня синхронизация UID/GID является важной частью, так как право собственности важно, чтобы владельцы могли правильно с этим справиться. Думаю, вы играете на том факте, что, хотя это и правда, это не влияет на SDCard из-за FAT, с чем я согласен :) Возможно, вы хотели указать свои причины в своем посте :)
Ты делаешь доброе дело. Я не указал конкретно, почему это бессмысленно. Я отредактирую и уточню.
wtf с абзацем разглагольствовать в начале?