4 votos

Sincronización de SD externa a USB OTG **sin** usar un PC

Detalles del dispositivo

  • Moto X Play - Android 6.0.1, Rooted (Systemless Root)

  • Samsung 64 GB ext SD

  • San Disk 128 GB USB - vino con FAT 32 reformateado a exFAT ya que tengo carpetas > 4 GB en la SD externa

Caso práctico

Sincronización todo el contenido de la SD externa al USB (sincronización en un solo sentido sin borrar el contenido de la tarjeta SD) en horario semanal / bajo demanda , como copia de seguridad incremental sin usar un PC ( tengo uno pero las razones para no querer usarlo no son relevantes)

Otros datos

  • Unidad USB reconocida por el dispositivo conectado correctamente por el estándar OTG ( Ajustes → Almacenamiento y USB )

  • Busybox instalado . Vino incluido con ROM Toolbox Pro. No lo he utilizado directamente. Si se va a instalar otra caja ocupada, está bien mientras no choque

  • Los puntos de montaje son los siguientes

enter image description here enter image description here

Cosas probadas

  • Búsqueda infructuosa de aplicaciones: no he podido encontrar una aplicación que pueda hacer esto ( Sincronización de carpetas afirma pero no puede ver el USB)

  • Buscar alternativas en Google

  • La automatización de MacroDroid falla, ya que la aplicación no puede ver el USB (planteado esto en el foro de la aplicación)

Pregunta: ¿Cómo puedo hacerlo? Estoy abierto a cualquier medio

Tenga en cuenta que tengo la intención de colocar un recompensa de 100 Cualquier respuesta que satisfaga las necesidades antes de que yo publique la recompensa se otorgará de forma similar (puedo retrasar la publicación de la recompensa para asegurarme de que obtengo una solución)

Por favor, evitar soluciones que

  • no han sido probados - deberían haber sido probados en su dispositivo y configuración USB para darle credibilidad

  • Implicar al PC, subir a la nube, transferir al servidor remoto, etc.

  • Referencias a afirmaciones de fuentes dudosas que no pueden ser verificadas

  • Utilización de gestores de archivos (tuve resultados mixtos con ellos, pero eso es para otra pregunta)

El objetivo de lo anterior no es disuadir las soluciones, sino desalentar los intentos frívolos. Si se necesita claridad, por favor, pregunte

He discutido esta necesidad en el chat y algunos candidatos potenciales para la solución incluyen BusyBox, rsync y Tasker . Lo sé. nada de estos medios para que Por favor, proporcione detalles completos . Al tratarse de una pregunta de recompensa (casi), espero poder aplicarla directamente con éxito sin necesidad de buscar aclaraciones.

( Al ser un dispositivo rooteado con Root sin sistema, las soluciones con Root están bien. Sin embargo, si el sistema operativo debe ser modificado de alguna manera, por favor, resalte como systemless no lo permite, aunque hay una solución)

No tengo tiempo y necesito que esto funcione lo antes posible.

0 votos

Veré si puedo trabajar en algo cuando pueda :)

0 votos

Ah, es justo :) No había revisado el chat.

3voto

Izzy Puntos 45544

Como hemos averiguado la solución que ahora utiliza en el chat, esta respuesta debería cumplir con "estar probada", "no implicar un PC o un gestor de archivos" y "basarse en fuentes verificadas". Aunque mientras tanto había otra rsync respuesta publicada, me has pedido que presente también nuestra solución, así que allá vamos:

El rsync se puede utilizar para lograrlo. Teniendo en cuenta todos tus requisitos (incluidos los mencionados más adelante en el chat), la línea de comandos tendría el siguiente aspecto:

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

Explicaciones sobre el comando:

  • rsync obviamente es el ejecutable/comando
  • -a significa "archivar", es decir, conservar todos los atributos. Esto incluye copiar recursivamente los contenidos (directorios, subdirectorios, archivos), mantener las marcas de archivo y la propiedad (esta última suele requerir Root), conservar los permisos, etc. Para más detalles, consulte ¿Qué es el modo de archivo en rsync? en nuestro sitio web.
  • --delete se encarga de eliminar los archivos en el objetivo (aquí: /mnt/usb ) que no están/ya no están disponibles en la fuente (aquí: /mnt/sdcard )
  • Los parámetros restantes especifican la fuente de la que se va a copiar ( /mnt/sdcard ) y el objetivo a copiar ( /mnt/usb ). Tenga en cuenta que hemos especificado ambos como directorios, por lo que todo el contenido, también los archivos ocultos, deberían incluirse también (estos últimos no lo harían si hubiéramos utilizado una máscara como /mnt/sdcard/* ).
    Nota: asegúrese de especificar los puntos de montaje reales o al menos los directorios reales aquí (por ejemplo, no el /mnt/sdcard como en el ejemplo), o puede que simplemente copie el enlace simbólico y piense que eso es todo lo que querías :)

Tal vez desee probar lo anterior en una fuente pequeña para ver cómo funciona.


Ahora que el "cómo" está cubierto, queda la pregunta: ¿Dónde está rsync ? Normalmente no viene preinstalado en el dispositivo, y la mayoría de los Busybox parecen no incluirlo tampoco. Una vez hubo una aplicación en Playstore llamada Copia de seguridad rsync para Android pero ya no está ahí. Como esta wiki señala, se puede descargar directamente el rsync binario de aquí ¹, luego pásalo a tu dispositivo Android, e instálalo. Asumiendo que has 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 esto, y probado con éxito desde un prompt de shell, queda la cuestión de automatización . Sé que tasker puede ejecutar comandos de la shell como Root (en el pasado esto se hacía simplemente anteponiendo un signo de exclamación, hoy en día incluso podría haber una casilla de verificación para ello - no lo comprobé durante un tiempo), pero su 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 más detalles, por favor vea: ¿Cómo utilizar crontab en Android?


Vea también:


¹ Por supuesto, también puedes intentar encontrar la aplicación original en sitios como APKMirror o ApkPure, o descargar la aplicación <a href="http://download.dlapk.org/?apkid=eu.kowalczuk.rsync4android&amp;ver=2.0.2&amp;server=seigio" rel="nofollow noreferrer">desde aquí </a>- pero primero había que instalar esa aplicación, y después coger el binario de su directorio de datos <code>/data/data/eu.kowalczuk.rsync4android/files/rsync</code> - lo que me parece un poco incómodo ;)

0 votos

Gracias, la solución me ha funcionado bien. Un par de puntos que pueden ayudar a los lectores : 1. He probado con todas las versiones de Busybox, que están bien valoradas y ninguna tiene rsync disponible la versión pro de este (le envié un correo al desarrollador pidiéndole que lo agregara), así que no queda más remedio que otros medios (por cierto, no pude encontrar la aplicación en los sitios reputados mencionados) 2. Automatizar la ejecución del comando a la carta / programado con éxito. Instrucciones aquí

0 votos

3. TWRP pudo ver la copia de seguridad en USB , por lo que presumiblemente debe ejecutar bien 4. Lo mismo con TiBu , aunque esto requiere un poco de trabajo ( Ubicación de la carpeta de copia de seguridad > Proveedor de almacenamiento (haga clic en él y elija las opciones según la versión de su sistema operativo) 5. Aunque no sea un usuario de Windows, en aras de la exhaustividad, puede considerar añadir la extensión de rsync en Windows también, como lo hizo para Linux- sí vi referencias. Añadiré más tarde si puede ayudar a los lectores

0 votos

@beeshyams ptspts.blogspot.com/2015/03/ tiene instrucciones sobre dónde encontrar e instalar manualmente rsync para Android. Tendrás que ser un poco creativo ya que no quieres usar un PC. Yo recomendaría tratar de usar webget y Root Explorer para descargar, renombrar, establecer +x, y mover el binario.

0voto

Taylor Puntos 228

Estén prevenidos. No voy a darte detalles completos, principalmente porque lo que pides es tan poco específico y odioso que la recompensa de esta pregunta no vale la pena gastar el tiempo en probar una solución para ti que no tengo forma de garantizar que funcione en tu dispositivo. Puedes ignorar mis consejos y sufrir o razonar cualquier dificultad mediante el razonamiento crítico y Google. Si no te gustan estas opciones, siempre puedes ir a comprar un iPhone. Están diseñados para gente que quiere algo que "simplemente funcione". Si no puedes dedicar tiempo a investigar o ajustar una solución para que funcione para ti, puede que Android no sea para ti.

Hay varias formas de lograr lo que se pretende. Podría decirse que el método más fácil y fiable es utilizar el software que se encuentra en la mayoría de los dispositivos Android por defecto, que es en lo que me voy a centrar. Dado que usted está tratando de ejecutar algo en un horario regular, yo diría que la mejor solución sería utilizar 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 tipo Unix, lo que incluye a Android. Como no has entrado en detalles sobre cuándo quieres que este trabajo se inicie semanalmente, te dejaré que configures el crontab (que está bien documentado en Internet y no es difícil ).

Esto se encargará de programar todo, pero el siguiente paso es averiguar cómo quieres hacer una copia de seguridad de todo, que es una cuestión muy importante que no tenías muy clara. ¿Quieres simplemente copiar los datos nuevos/modificados de la tarjeta SD externa a la unidad flash o quieres copias de seguridad completas de la tarjeta SD almacenadas por fecha en la unidad flash? Estas son preguntas que debes resolver por ti mismo antes de pedir consejo a Internet.

Sin saber qué es exactamente lo que estás tratando de lograr aquí, voy a asumir que el primer escenario funciona mejor. Ya que estás copiando datos a nivel de archivo (en lugar de a nivel de bloque), rsync es probablemente su mejor opción aquí. Es muy versátil y debería funcionar nada más sacarlo de la caja sin necesidad de configurarlo. Ya deberías tenerlo disponible y si no lo tienes, se puede obtener fácilmente a través de Busybox.

Asumiendo que los puntos de montaje se mantienen igual, 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 un manual sobre las banderas que utilicé a continuación:

-r, --recursive recurre a los directorios

-l, --links copiar enlaces simbólicos como enlaces simbólicos

-p, --perms conserva los permisos

-t, --times conserva los tiempos de modificación

También está el -a (abreviatura de modo de archivo ), pero hace un montón de otra mierda innecesaria en esta situación como la sincronización de uid/gid. En la mayoría de los escenarios de copia de seguridad, el uso de -a tendría sentido, ya que querría preservar la propiedad si tiene que restaurar a partir de sus copias de seguridad. Sin embargo, el almacenamiento externo en SD utiliza FAT para su sistema de archivos, que no admite los permisos de archivos de Unix. Si bien los archivos de la tarjeta SD externa tienen un propietario/grupo establecido, el sistema operativo los establece estáticamente. Si intentas cambiarlos, estoy bastante seguro de que obtendrás un error o fallará silenciosamente en el fondo. 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 extra, utiliza la bandera de modo de archivo en su lugar.

Así que, ahora que tenemos el comando que necesitas ejecutar, sólo es cuestión de configurar el crontab y hacer que lo ejecute rsync comando. Esta no es una solución muy elegante, pero funcionará. Si quieres configurar algún tipo de registro ( Mike Rubel ha realizado muchos trabajos en los que podría inspirarse ), puedes escribir un shell script, ponerlo en el almacenamiento interno de tu teléfono, y hacer que cron ejecute el shell script en lugar del 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 te dé acceso al shell. Si piensas hacerlo a menudo, puede ser más rápido poner el comando en un archivo (por ejemplo backupsd ), chmod +x y lo pones en una carpeta que también esté en la ruta del sistema (como /system/bin). De esta manera, puedes escribir backupsd en lugar de rsync -rlpt /mnt/media_rw/0000-0000 /mnt/media_rw/E82C-B290 .

0 votos

Esa fue básicamente la solución que elaboré con el OP en el chat :) Sólo una nota al margen: en lugar de -rlpt simplemente utilice -a (modo de archivo), que implica todos los demás interruptores :)

0 votos

Me dirigí a la razón por la que no utilicé -a inmediatamente después del resumen de las banderas que utilicé y lo dejé para que el OP decidiera. Está claro que las grandes mentes piensan igual.

0 votos

Ah, lo siento Chris, me perdí esa parte. Pero para mí, la sincronización de UID/GID es una parte esencial, ya que la propiedad es relevante para que los propietarios puedan tratarla correctamente. Supongo que juegas con el hecho de que aunque sea cierto, eso no afecta a la SDCard debido a la FAT, con lo que estoy de acuerdo :) Sin embargo, podrías haber querido señalar tus razones en tu post :)

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X