Сведения об устройстве
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 в порядке. Однако, если ОС должна быть изменена каким-либо образом, выделите, поскольку бессистемное не разрешает это, хотя есть обходной путь)
У меня мало времени, и мне нужно, чтобы это заработало как можно скорее.
Как мы выяснили, решение, которое вы сейчас используете в чате, этот ответ должен соответствовать «тестируется», «не требует ПК или файлового менеджера» и «полагается на проверенные источники». Хотя тем временем был 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
который я нашел немного неудобно ;)
rsync
доступной профессиональной версии ( я отправила разработчику письмо с просьбой добавить ее), так что ничего не остается . выбор, но другие средства (кстати, не удалось найти приложение на упомянутых известных сайтах) 2. Автоматизация выполнения команды по запросу / расписанию успешно. Инструкции здесьrsync
Windows, как вы сделали для Linux — я видел ссылки. Добавлю позже, если это может помочь читателямrsync
и обмена им с Иззи, и он включил это в свой ответ. В примечаниях к сноскам. Этому можно научиться, но позже, когда время позволит.Будьте предупреждены. Я не собираюсь предоставлять вам полную информацию, главным образом потому, что то, о чем вы просите, настолько неконкретно и неприятно, что награда за этот вопрос не стоит того, чтобы тратить время на тестирование решения для вас, которое у меня нет возможности гарантия будет работать на вашем устройстве. Вы можете либо проигнорировать мой совет и страдать, либо обосновать любые трудности с помощью критического мышления и 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
сразу после сводки флагов, которые я использовал, и оставил это на усмотрение ОП. Ясно, что великие умы мыслят одинаково.
Дэн Браун
Дэн Браун