Detalles del dispositivo
Moto X Play - Android 6.0.1, rooteado (raíz sin sistema)
SD externa Samsung de 64 GB
San Disk 128 GB USB : se envió con FAT 32 reformateado a exFAT ya que tengo carpetas> 4 GB en SD externa
Caso de uso
Sincronice todo el contenido de la tarjeta SD externa a USB (sincronización unidireccional sin eliminar el contenido de la tarjeta SD) en un horario semanal/bajo demanda, como copia de seguridad incremental sin usar una PC (tengo una, pero las razones para no querer usarla no son relevantes)
Otros detalles
Unidad USB reconocida por el dispositivo correctamente conectado por OTG estándar ( Configuración → Almacenamiento y USB )
Busybox instalado. Venía incluido con ROM Toolbox Pro. No lo he usado directamente. Si se va a instalar otra caja ocupada, está bien siempre que no entre en conflicto
Puntos de montaje como se muestra a continuación
Cosas probadas
Búsqueda de aplicación fallida: no pude encontrar una aplicación que pueda hacer esto ( Folder Sync afirma pero no puede ver el USB)
Googleando alternativas
La automatización de MacroDroid falla, ya que la aplicación no puede ver el USB (se planteó esto en el foro de la aplicación)
Pregunta: ¿Cómo puedo hacer esto? estoy abierto a cualquier medio
Tenga en cuenta que tengo la intención de colocar una recompensa de 100 , cualquier respuesta que satisfaga las necesidades antes de publicar la recompensa se otorgará de manera similar (puede retrasar la publicación de la recompensa para asegurarme de obtener una solución)
Evite las soluciones que
no están probados; debería haberse probado en su dispositivo y en la configuración USB para darle credibilidad
Involucrar PC, subir a la nube, transferir a un servidor remoto, etc.
Referencias a afirmaciones de fuentes dudosas que no se pueden verificar
Involucrar el uso de administradores de archivos (obtuve resultados mixtos con estos, pero eso es para otra pregunta)
El objetivo de lo anterior no es disuadir soluciones sino desalentar intentos frívolos. Si necesita claridad, por favor pregunte
Discutí esta necesidad en el chat y algunos candidatos potenciales para la solución incluyeron BusyBox rsync
y Tasker . No sé nada de estos medios, así que proporcione detalles completos . Al ser una pregunta generosa (casi), espero poder implementarla de inmediato con éxito sin buscar aclaraciones.
(Al ser un dispositivo rooteado con root sin sistema, las soluciones que usan root están bien. Sin embargo, si se va a modificar el sistema operativo de alguna manera, resalte que systemless no lo permite, aunque hay una solución)
Estoy corto de tiempo y necesito hacer que esto funcione lo antes posible
Como descubrimos la solución que ahora usa en el chat, esta respuesta debe cumplir con "ser probado", "no involucrar una PC o administrador de archivos" y "confiar en fuentes verificadas". Aunque mientras tanto se rsync
publicó otra respuesta, también me pidió que presentara nuestra solución, así que aquí vamos:
El rsync
comando se puede usar para lograr eso. Teniendo en cuenta todos sus requisitos (incluidos los que se mencionan más adelante en el chat), la línea de comando se vería así:
rsync -a --delete /mnt/sdcard /mnt/usb
Explicaciones sobre el comando:
rsync
obviamente es el ejecutable/comando-a
significa "archivo", es decir, mantener todos los atributos. Esto incluye la copia recursiva de contenidos (directorios, subdirectorios, archivos), el mantenimiento de sellos de archivos y la propiedad (este último generalmente requiere root), la conservación de permisos, etc. Para obtener más información, consulte ¿Qué es el modo de archivo en rsync? en nuestro sitio hermano.--delete
se encarga de eliminar archivos en el destino (aquí: /mnt/usb
) que no están o ya no están disponibles en el origen (aquí: /mnt/sdcard
)/mnt/sdcard
) y el destino al que copiar ( /mnt/usb
). Tenga en cuenta que especificamos ambos como directorios, por lo que todo el contenido, también los archivos ocultos, también deben incluirse (este último no lo haría si hubiéramos usado una máscara como /mnt/sdcard/*
). /mnt/sdcard
enlace simbólico como en el ejemplo), o podría simplemente copiar el enlace simbólico y pensar que eso es todo lo que quería :)Es posible que desee probar primero lo anterior en una fuente pequeña para ver cómo funciona.
Ahora que se cubre el "cómo", queda la pregunta: ¿Dónde está rsync
? Por lo general, no viene preinstalado en el dispositivo, y la mayoría de Busyboxes tampoco lo incluyen. Hubo una vez una aplicación en Playstore llamada rsync backup para Android , pero ya no está. Como señala este wiki , puede descargar directamente el rsync
binario desde aquí ¹, luego enviarlo a su dispositivo Android e instalarlo. Suponiendo que haya empujado el binario a /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
Lo anterior debe hacerse en una aplicación de terminal o a través de adb shell
.
Hecho y probado con éxito desde un indicador de shell, sigue siendo la cuestión de la automatización . Sé que tasker puede ejecutar comandos de shell como root (en el pasado, esto se hacía simplemente prefijándolos con un signo de exclamación, hoy en día incluso podría haber una casilla de verificación para ello, no lo verifiqué por un tiempo), pero tu Macrodroid podría proporcionar eso también. Alternativamente, puede hacerlo a la manera de Unix/Linux y utilizar Cron, que es proporcionado por Busybox; para obtener más información, consulte: ¿Cómo usar crontab en Android?
Ver también:
¹ Por supuesto, también puede intentar encontrar la aplicación original en sitios como APKMirror o ApkPure, o descargar la aplicación desde aquí , pero primero tenía que instalar esa aplicación y luego tomar el binario de su directorio de datos /data/data/eu.kowalczuk.rsync4android/files/rsync
, que encuentro un un poco inconveniente ;)
rsync
disponible la versión pro de este (le envié un correo al desarrollador solicitándole que lo agregue), por lo que deja sin elección, pero otros medios (por cierto, no pude encontrar la aplicación en los sitios de renombre mencionados) 2. Automatización de la ejecución del comando a pedido / programación exitosa. Instrucciones aquírsync
Windows, como lo hizo con Linux. Vi referencias. Agregaré más más adelante si puede ayudar a los lectores.rsync
y compartirla con Izzy y él la incluyó en su respuesta. En notas al pie. Hacerlo se puede aprender, pero en un momento posterior, cuando el tiempo lo permita.Estar prevenido. No voy a brindarle detalles completos, principalmente porque lo que está solicitando es tan inespecífico y desagradable que la generosidad de esta pregunta no vale la pena gastar el tiempo para probar una solución para usted que no tengo forma de la garantía funcionará en su dispositivo. Puede ignorar mi consejo y sufrir o razonar cualquier dificultad a través del razonamiento crítico y Google. Si no te gustan estas opciones, siempre puedes ir a comprar un iPhone. Están diseñados para personas que quieren algo que "simplemente funcione". Si no puede dedicar tiempo a investigar o modificar una solución para que funcione para usted, es posible que Android no sea para usted.
Hay una variedad de maneras de lograr lo que está tratando de hacer. Podría decirse que el método más fácil y confiable es usar el software que se encuentra en la mayoría de los dispositivos Android de forma predeterminada, que es en lo que me enfocaré. Dado que está tratando de ejecutar algo en un horario regular, diría que la mejor solución sería usar cron
. En ese sentido, eche un vistazo a este hilo de StackOverflow , ya que es específico para ejecutarlo en Android. Además, para que todos estemos en la misma página, cron es un programador de trabajos disponible en la mayoría (¿todos?) de los sistemas operativos similares a Unix, que incluye Android. Dado que no entró en detalles sobre cuándo exactamente desea que este trabajo comience semanalmente, le dejaré que configure el crontab (que está bien documentado en Internet yno es difícil ).
Esto se encargará de programar todo, pero el siguiente paso es averiguar cómo desea hacer una copia de seguridad de todo, que es una pregunta muy importante que no tenía muy clara. ¿Simplemente desea copiar datos nuevos/modificados en la tarjeta SD externa a la unidad flash o desea copias de seguridad completas de la tarjeta SD almacenada por fecha en la unidad flash? Estas son preguntas que debe resolver por sí mismo antes de pedir consejo a Internet.
Sin saber exactamente qué está tratando de lograr aquí, asumiré que el primer escenario funciona mejor. Dado que está copiando datos de nivel de archivo (opuesto al nivel de bloque), rsync
es probablemente su mejor opción aquí. Es muy versátil y debería funcionar directamente sin necesidad de configurarlo. Ya deberías tenerlo disponible y si no lo tienes, se obtiene fácilmente a través de Busybox.
Suponiendo que los puntos de montaje permanezcan iguales, el comando que usaría para lograr esto sería: rsync -rlpt /mnt/media_rw/0000-0000 /mnt/media_rw/E82C-B290
. Para su comodidad, he incluido una introducción a las banderas que utilicé a continuación:
-r, --recursive recurse a directorios
-l, --links copia enlaces simbólicos como enlaces simbólicos
-p, --perms conserva los permisos
-t, --times conserva los tiempos de modificación
También está la -a
bandera (abreviatura de modo de archivo ), pero hace un montón de otras cosas innecesarias en esta situación, como sincronizar uid/gid. En la mayoría de los escenarios de copia de seguridad, el uso -a
tendría sentido ya que desearía conservar la propiedad si tiene que restaurar desde sus copias de seguridad. Sin embargo, el almacenamiento SD externo usa FAT para su sistema de archivos, que no es compatible con los permisos de archivos de Unix. Si bien los archivos en su tarjeta SD externa tienen un conjunto de propietario/grupo, el sistema operativo los configura de forma estática. Si intenta cambiarlos, estoy bastante seguro de que obtendrá un error o fallará silenciosamente en segundo plano. Las banderas que utilicé hacen que este proceso sea mucho más eficiente, pero si por alguna razón quieres que rsync sincronice todas esas cosas adicionales, usa la bandera del modo de archivo en su lugar.
Entonces, ahora que tenemos el comando que necesita ejecutar, solo es cuestión de configurar el crontab y hacer que ejecute ese rsync
comando. Esta no es una solución muy elegante, pero funcionará. Si quisiera configurar algún tipo de registro ( Mike Rubel ha hecho mucho trabajo en el que podría inspirarse ), podría escribir un script de shell, ponerlo en el almacenamiento interno de su teléfono y hacer que cron ejecute el script de shell en lugar de el rsync
comando
Para hacer una copia de seguridad de todo manualmente fuera de cron, puede ejecutar ese comando rsync usando ConnectBot o cualquier otra aplicación que le brinde acceso de shell. Si planea hacerlo con frecuencia, podría ser más rápido colocar el comando en un archivo (p. ej backupsd
.), chmod +x
y colocarlo en una carpeta que también esté en la ruta del sistema (como /system/bin). De esta manera, puede escribir backupsd
en lugar de rsync -rlpt /mnt/media_rw/0000-0000 /mnt/media_rw/E82C-B290
.
-rlpt
, simplemente use -a
(modo de archivo), eso implica todos los demás interruptores :)-a
usé inmediatamente después del resumen de las banderas que usé y dejé que el OP decidiera. Claramente, las grandes mentes piensan igual.
Dan Brown
Dan Brown