¿Hay alguna manera de sincronizar de forma segura los directorios entre la tarjeta sd en Android que no tiene root y el PC con Ubuntu?
Con seguridad \= utilizando una conexión segura entre los dispositivos (por ejemplo, utilizando ssh).
Fuera de línea \= sin acceso a Internet, pero el PC y el smartphone están conectados a través de la LAN.
Sincronizar directorios \= un proceso que transfiere datos entre el smartphone y el PC de manera que al final del proceso, ambos dispositivos contengan exactamente los mismos datos en los directorios seleccionados (preferiblemente, pero no necesariamente, excluyendo los archivos filtrados). El proceso es capaz de detectar los datos eliminados, por lo que no copia el archivo que estaba originalmente en ambos dispositivos y que posteriormente fue eliminado en uno de ellos.
Mis sistemas
- Android 6.0.1 (no rooteado)
- Xubuntu 18.04 64 bit PC
Lo que ya he probado/comprobado (sin éxito)
Unison
- https://play.google.com/store/apps/details?id=net.danielroggen.unison
- Problema: requiere un dispositivo rooteado.
Unison para Android
- https://play.google.com/store/apps/details?id=com.nerdysoftware.unison
- No es seguro - de la descripción de la aplicación: "No es necesario el acceso SSH - los clientes se conectan directamente a través de un socket. Debido a que los clientes de Unison se conectan a su dispositivo a través de una conexión de socket directa en lugar de a través de SSH, el servidor sólo debe ejecutarse cuando su dispositivo Android está conectado a una red de confianza, como un WiFi doméstico. Ejecutar el servidor en otras redes podría exponer los archivos de tu dispositivo a personas no confiables."
- También parece utilizar una versión antigua de Unison (esta aplicación requiere exactamente las mismas versiones en el servidor y el cliente para permitir la transferencia de datos).
Rsync
- https://play.google.com/store/apps/details?id=net.letscorp.rsyncwrapper
- No está designado para la sincronización bidireccional .
SSHDroid
- https://play.google.com/store/apps/details?id=berserker.Android.apps.sshdroid
- Para usar SSH con otro software (ver abajo)
- No se puede escribir/modificar la tarjeta SD usando la conexión ssh. Fui a la configuración -> Aplicaciones -> SSHDroid -> Permisos: el almacenamiento está habilitado. Allí abrí el menú contextual -> todos los permisos: lectura de la tarjeta SD disponible. Modificación/borrado de datos en la tarjeta SD disponible. Es decir, he comprobado que la aplicación tiene permiso para modificar la tarjeta SD: lo tiene.
SSHFS con SSHHelper
- https://play.google.com/store/apps/details?id=com.arachnoid.sshelper
- El mismo problema que SSHDroid. He comprobado los permisos.
SSHFS con SimpleSSHD
- https://play.google.com/store/apps/details?id=org.galexander.sshd
- El mismo problema que SSHDroid. He comprobado los permisos.
Lo que ya he probado (con éxito mixto/parcial)
Combinación: Unison (en PC) + algún servidor SSH (Android) + SSHFS (en PC)
- En caso de que pueda encontrar un servidor SSH que funcione; use SSHFS para montar el dispositivo Android remoto localmente y luego use Unison para la sincronización.
- Resultados:
- Cuando el SSH es realmente rw, entonces funciona, pero es tan lento que es poco práctico - debe pedir cada archivo y directorio en la red. Por supuesto, otras aplicaciones (como Unison) deben hacer eso también, pero no piden cada archivo secuencialmente (no: el cliente envía una solicitud para un solo archivo - latencia - el servidor comprueba y envía la respuesta - el cliente recibe la respuesta y pasa al siguiente archivo).
- Unison requiere permiso para renombrar archivos; siempre crea archivos y directorios temporales y cuando todo se descarga y se comprueba, entonces se borran los archivos antiguos (si los hay) y se renombran los nuevos. Así que si no se permite el renombramiento, no funciona.
Servidor SSH/SFTP - Terminal
- https://play.google.com/store/apps/details?id=net.xnano.Android.sshserver
- Este en realidad funciona pero tiene dos problemas;
- Requiere introducir la contraseña varias (>10) veces cuando se monta como sshfs (probé una trivial y me aseguré de que no es un error tipográfico) y no admite claves ssh. Pude resolver este problema con un hack:
zenity --password | sshfs user@host:/ "$PWD/data" -o reconnect,password_stdin
pero no estoy seguro de lo seguro que es. - Este ssh es increíblemente lento . Mucho más lento cuando se compara con SSHDroid y SSHHelper (no sólo con sshfs, sino también cuando simplemente me conecto usando ssh y la terminal; la escritura y las respuestas son muy, muy lentas). La velocidad máxima es de 2 MB/s, pero la mayor parte del tiempo es de ~500kB/s.
- No se pueden renombrar los archivos (error de permisos) por lo que lo hace inutilizable con Unison (en PC).
- Requiere introducir la contraseña varias (>10) veces cuando se monta como sshfs (probé una trivial y me aseguré de que no es un error tipográfico) y no admite claves ssh. Pude resolver este problema con un hack:
Sincronización
- https://play.google.com/store/apps/details?id=com.nutomic.syncthingandroid
- Problema: no se puede modificar la tarjeta SD (en sistemas no rooteados) y los desarrolladores no van a arreglar esto pronto .
- La única solución es utilizar oscuro , estructura de directorios profunda de difícil acceso:
/storage/XXXX-XXXX/Android/data/com.nutomic.syncthingandroid/files
. - Pero para este directorio en particular, funciona. Su velocidad es de unos 5 - 10 MB/s y sospecho que está siendo ralentizado por la propia tarjeta SD (o Android). Por ahora, estoy usando esta solución, pero el directorio es realmente incómodo.
- Problemas menores:
- No admite el seguimiento de los enlaces simbólicos y hasta que alguien (aparte de los actuales desarrolladores) ponerlo en práctica No va a ser apoyado.
Qué problema estoy tratando de resolver
Yo "sólo" quiero sincronizar datos a nivel de archivos (algunos pdfs, imágenes, etc.) entre mi PC y mi smartphone Android. Utilizo varios dispositivos (ordenador de sobremesa, portátil, etc.) y uso Unison (nota: no insisto en esta aplicación) para sincronizar los datos entre ellos. Como cambio de entorno con bastante frecuencia, necesito que funcione con una sola pulsación de botón y que sea lo más rápido posible (algo que, por ejemplo, Unison hace en gran medida). Como trabajo en diferentes entornos, necesito cubrir mis casos: a veces estoy sin acceso a Internet. Otras veces estoy conectado a una red no fiable.
Esta es también la razón por la que no puedo usar la nube (como Dropbox): es más lento que dos dispositivos comunicándose directamente y a veces estoy sin conexión a Internet por lo que no puedo sincronizar incluso cuando los dispositivos están conectados en la misma red.
La razón por la que quiero sincronizar con la tarjeta SD es simplemente porque tiene mayor capacidad para que quepan mis archivos.
1 votos
Upvoted para el trabajo minucioso de la pala :) Bienvenido a nuestro sitio
0 votos
@beeshyams Gracias :). (Pensé que esto es algo tan básico, que seguí buscando la solución creyendo que es algo natural...)
1 votos
No lo he probado, pero ¿tal vez instalando Nextcloud en tu máquina Linux y la aplicación Nextcloud en tu dispositivo Android? Nextcloud viene con un cliente de sincronización AFAIK. Alternativamente, si Playstore es aceptable, FolderSync funciona a través de SFTP (es decir, SSH) y no requeriría software adicional en su máquina Linux.
0 votos
@Izzy Gracias por tus sugerencias. NextCloud parece muy agradable, también (al menos de lo que veo en la documentación) resuelve un montón de diferentes problemas que tengo, pero lamentablemente proceso de instalación parece ser poco proceso involucrado y actualmente no tengo ese tiempo.
0 votos
@Izzy En cuanto a FolderSync con SFTP - He pasado mi tiempo libre de hoy jugando con él y parece que funciona. No es más rápido (al igual que mi idea con sshfs - debe comprobar el contenido de todos los directorios a través de la red) y no maneja bien los conflictos (las opciones son siempre preferir los archivos de un dispositivo, otro dispositivo, la versión más reciente o ignorar, pero no hay ninguna opción que me permita elegir por caso) (también si la marca de tiempo de ambos archivos cambia pero el contenido no, o si el contenido cambia de la misma manera, no comprueba los datos y sólo los marca como conflictivos).
0 votos
@Izzy Así que no es óptimo (preveo una enorme ralentización cuando cambie la marca de tiempo de un archivo grande - tendrá que descargarlo por la red sólo para averiguar que es igual a la versión local), pero hace el trabajo. Así que, de nuevo, gracias por la sugerencia.
1 votos
No, no es el más rápido, pero eso nunca me ha molestado. Se sincroniza en bg a las 3 de la mañana mientras duermo, y se hace cuando me levanto. Los conflictos son la verdadera cosa mala aquí de hecho - que por lo general me doy cuenta de que después de haber copiado una carpeta completa a un nuevo dispositivo (FS parece incapaz de detectar su estado y ni siquiera parece molestarse en tratar de CRC o algo más para averiguar). Pero por desgracia, no hay mejores ideas aquí. Sea bienvenido a comprobar mi lista de aplicaciones correspondiente Hay muchos candidatos que no he probado yo mismo ;)
1 votos
@Izzy Supongo que depende de nuestros flujos de trabajo - Yo suelo hacer algo de trabajo hasta el último minuto, luego sincronizo, cojo mis cosas y corro a coger un tren. (Acerca de FS - sí, me parece exactamente como usted escribió.) Su lista de aplicaciones es realmente interesante, gracias por compartir. Intentaré encontrar algo de tiempo para ver algunas aplicaciones de ella :).
0 votos
Acabo de recordar: SyncThing que a menudo oigo elogiar, podría ser una opción para usted. Debería estar en la lista vinculada ;)
1 votos
@Izzy Bueno, parece bueno, excepto que no funciona en la tarjeta SD; ver los enlaces en mi pregunta (menciono la aplicación allí).
0 votos
La mayor limitación es su requisito de escribir directamente en la tarjeta SD. Las aplicaciones no tienen acceso de escritura a nivel de sistema de archivos a la tarjeta SD externa desde KK. Necesitan utilizar las API de SAF para poder escribir archivos en los directorios públicos de la tarjeta SD. Las soluciones CLI no son capaces de usar SAF y las aplicaciones GUI no son muy ricas en características desde el punto de vista de la sincronización.
rclone
es una gran utilidad, pero sólo podría escribir en el directorio privado de la aplicación de terminal desde la que se ejecuta. Además, no copia enlaces simbólicos (porque el almacenamiento en la nube no es compatible), pero puede seguir (copiar archivos reales). Sin embargo, con el acceso Root, hay muchas posibilidades0 votos
Por cierto, Android 10 restringe el acceso al sistema de archivos incluso al almacenamiento externo primario (
/sdcard
), por lo que los desarrolladores que intenten evitar el uso de SAF no podrán ir demasiado lejos.