Manera razonable de copiar archivos a una nueva tarjeta SD usando una Mac

Tengo una Mac y quiero transferir unos 30 GB de datos a una tarjeta SD más grande para usar con un nuevo teléfono Android.

El teléfono en cuestión es un Galaxy Stratosphere II.

No parece haber una manera sencilla de hacer esto.

hasta ahora lo he intentado

  • Copiando usando Android File Transfer, con el teléfono conectado vía USB. Esto pareció funcionar, funcionando a unos 10 MB/s, pero no retuvo las marcas de tiempo del archivo, lo cual es inaceptable para mí. Dado que la aplicación parece solo proporcionar acceso a través de una interfaz de arrastrar y soltar, no creo que haya una forma de usarla para copiar archivos y conservar las marcas de tiempo.
  • Copiando usando scp -prejecutando SSHDroiden el teléfono, a través de otra red wifi. Esto también funcionó, conservando la información de la marca de tiempo, pero fue terriblemente lento (<1 MB/s).
  • Conectando la tarjeta SD a mi MacBook Pro. Esto no funciona: no es un sistema de archivos reconocido. También intenté usar un lector de tarjetas SD de terceros, con el mismo resultado.
  • Uso adb pushpara copiar archivos a través de una conexión USB. Esto tampoco funciona, incluso cuando agrego /.al final como lo sugiere esta respuesta .

simple-mtpfspodría ser una opción, pero las instrucciones de compilación proporcionadas hacen referencia a ejecutables inexistentes.

Alt Mounter también parece que hace lo que quiero, pero se indica como "***EXTREMADAMENTE BETA***" y, por lo tanto, no es algo en lo que prefiera confiar mis archivos importantes.

Cuando actualicé una tarjeta SD diferente, experimenté con la copia de archivos a la tarjeta SD en un lector conectado a través de una máquina virtual Linux. Esto parecía funcionar, pero se cortaba misteriosamente después de copiar una fracción de los datos. Creo que esa vez terminé usándolo scpy dejándolo correr por un día o dos.

Sigo profundizando en esto, pero tal vez alguien pueda ahorrarme algo de tiempo. ¿Hay una forma fácil de hacer esto?

Respuestas (1)

Tanto OSX como Android brindan utilidades POSIX básicas, así que terminé yendo a la vieja escuela con esta:

$ tar czv "$PATH_TO_ORIGINAL_SDCARD" | split -b 2048m - sdcard-

Este comando crea fragmentos de 2 GB de un archivo del contenido de la tarjeta SD, con nombres como sdcard-aa, sdcard-aby así sucesivamente. La división de 2 GB es necesaria porque Android File Transfer solo puede copiar archivos de 4 GB o menos.

Luego copié los archivos en el teléfono usando (¡sorpresa!) Android File Transfer y los recombiné y desarchivé en Terminal Emulator* usando este comando:

$ cat sdcard-* | tar xzv

*: en realidad fue un poco más complicado que esto. Detalles sangrientos:

Entonces, en realidad, Android realmente no viene con las utilidades básicas de POSIX, o al menos si las tiene, no están disponibles para la aplicación Terminal Emulator.

Pensé que sí porque SSHDroid proporciona estas utilidades a través de busybox. Sospecho que Android no permite que los procesos ejecuten archivos que el usuario no posee; esto explicaría por qué no hay una aplicación disponible que se instale busyboxpara teléfonos no rooteados.

busyboxes una utilidad que puede ejecutar cualquiera de una gran cantidad de comandos POSIX, dependiendo del nombre con el que se llame. La gente hace arreglos para que se le llame con nombres que no sean busyboxcreando enlaces simbólicos con nombres como, por ejemplo, tar.

Sin embargo, resulta que es posible instalar busybox en su propio directorio de inicio de la aplicación Terminal Emulator. Así que eso es lo que hice. Pasos:

  • Tome el archivo busybox-androiddel proyecto github del mismo nombre .
  • Consíguelo en tu dispositivo (¡ver arriba!). Póngalo en un lugar público al que tenga acceso desde una sesión de Terminal Emulator. Solo llámalo busybox.
  • Inicie una sesión de emulador de terminal. Cree un directorio ~/biny copie el busyboxarchivo del lugar público donde lo puso en ese nuevo directorio.
    • Dado que el cpcomando no está disponible en una sesión de Terminal Emulator (!), hágalo de esta manera:cat $PATH_TO_BUSYBOX/busybox > ~/bin/busybox
  • Ahora cd ~/biny crea un enlace simbólico: ln -s busybox tar.
  • Ahora debería poder cd /storage/extSdCard/concatenar y extraer el contenido de sus archivos usando cat $PATH_TO_ARCHIVE/sdcard-* | ~/bin/tar xzv.
  • Se extraerá con los directorios de prefijo que fueran la ruta al contenido de la tarjeta SD cuando creó el conjunto de archivos, por ejemplo, /Volumes/oldphone/. Así que ahora mueva todo desde ese subdirectorio (lo llamaremos $OLD_SDCARD_CONTENTS) a la raíz de su tarjeta SD actual.
    • sh(el shell utilizado por Terminal Emulator) no parece tener ninguna forma de seleccionar todos los archivos ocultos en un directorio, así que corrí bashpara hacer esto. Bajo bash, mv $PATH_TO_FILES/.[^.]* $DESTmoverá todos los archivos ocultos. Recuerde que debe acceder basha través de un enlace simbólico a busybox, o simplemente hacer esta parte a través de ssh(que es lo que hice).

¡Uf! Me alegro de que haya terminado. Realmente espero no terminar aceptando esta respuesta; debería haber una manera mucho más fácil de hacer todo esto.

Por supuesto, podría haber descomprimido el archivo en una sshsesión desde mi computadora, pero esto habría requerido que ejecutara mi computadora durante el tiempo que fuera necesario. Además, por supuesto , busybox debería estar disponible en Terminal Emulator.