Como bien saben aquellos que han leído la Biblia del SysAdmin, las copias de respaldo (backups) son uno de los aspectos más importantes para garantizar el correcto funcionamiento de un servicio, y la persistencia y durabilidad de los datos. Desde que Copy (servicio de almacenamiento en la nube gratuito) cerró sus puertas, perdí uno de los aspectos más importantes (más bien crucial) en mi estrategia de backup: la replicación de las copias de seguridad. En este tiempo estuve analizando diferentes alternativas para guardar copias de respaldo de los datos en mi VPS en la nube (Dropbox, Mega, OneDrive, Google Drive y otras), y finalmente me decidí por Google Drive (sigamos dependiendo más y más de Google, total, ¿qué puede fallar?).

El primer cliente de línea de comandos que probé fue google-drive-ocamlfuse, pero luego de compilar e instalar una maraña horrible de dependencias falló el intento de compilación final a causa de un estúpido bug sin parchar. Lo que me llevó a decantar por "drive" (github.com/odeke-em/drive) un cliente mínimo soportado de manera semi-oficial por parte del staff de Google Drive. Además de estos dos, existen otros clientes de Google Drive de línea de comandos, por ejemplo gdrive, los cuales no alcancé a probar pues "drive" satisfizo mis necesidades.

Este artículo explica cómo instalar y utilizar el cliente de línea de comandos "drive" en sistemas basados en Debian.



El cliente drive está desarrollado en el lenguaje go (creado por Google y con licencia BSD). Por ello el primer paso consiste en instalar go. El procedimiento de instalación es trivial y funciona inmediatamente, por esta razón es mucho más recomendable que google-drive-camlfuse.

Instalar go

Descargar e instalar el lenguaje go

root@cloud:~# wget https://storage.googleapis.com/golang/go1.6.2.linux-amd64.tar.gz
root@cloud:~# tar -C /usr/local -axvf go1.6.2.linux-amd64.tar.gz
root@cloud:~# /usr/local/go/bin/go version
go version go1.6.2 linux/amd64

Agregar las siguientes líneas en el archivo /etc/profile para configurar correctamente las variables de entorno GOPATH y PATH:

export GOPATH=$HOME/gopath
export PATH=$PATH:/usr/local/go/bin:$GOPATH:$GOPATH/bin

Verificar el funcionamiento:

root@cloud:~# . /etc/profile
root@cloud:~# go version
go version go1.6.2 linux/amd64

Instalar drive

La instalación es tan simple como ejecutar:

root@cloud:~# go get -u github.com/odeke-em/drive/cmd/drive

Para autorizar el acceso a una cuenta de Google Drive es necesario inicializar un directorio.

Loguearse en la cuenta de Google Drive:

Seleccionar un directorio de trabajo para Google Drive, e inicializar ejecutando drive init DIR:

root@cloud:~# drive init /backup/drive
Visit this URL to get an authorization code
https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=xxxx
Paste the authorization code:

Habiendo ingresado a Google Drive, pegar la URL que ofrece por línea de comandos:

Para autorizar el cliente, hacer clic en "Permitir". De esta forma se genera el código de autorización:

Luego, pegar el código de autorización y presionar enter para finalizar la inicialización.

El proceso de inicialización genera un subdirectorio oculto .gd:

root@cloud:~# ll /backup/drive/
total 12
drwxr-xr-x 3 root root 4096 Jul 13 15:08 .
drwxr-xr-x 4 root root 4096 Jul 13 15:08 ..
drwxr-xr-x 2 root root 4096 Jul 13 15:08 .gd

Subir un archivo a Google Drive

Es importante tener en cuenta que, para poder subir archivos, éstos deben estar ubicados dentro del directorio donde fue inicializado drive (directorio donde se ejecutó drive init).

Para obtener ayuda e información detallada es posible ejecutar drive push -h.

Cambiar al directorio base de drive y copiar un archivo de prueba:

root@cloud:~# cd /backup/drive/
root@cloud:/backup/drive# cp ../varwww_2016-07-11_040001.tar.bzip2 .
root@cloud:/backup/drive# ls -lh varwww_2016-07-11_040001.tar.bzip2 
-rw-r--r-- 1 root root 696M Jul 13 15:20 varwww_2016-07-11_040001.tar.bzip2

Subir el archivo a Google Drive utilizando el comando "push":

root@cloud:/backup/drive# drive push varwww_2016-07-11_040001.tar.bzip2 
Resolving...
+ /varwww_2016-07-11_040001.tar.bzip2
Addition count 1 src: 695.45MB
Proceed with the changes? [Y/n]:Y
 729227649 / 729227649 [======================================================================] 100.00% 50s

Es necesario responder 'Y' para continuar.

Inmediatamente, el archivo aparece en la cuenta de Google Drive:

El directorio base de drive corresponde con el directorio inicial "My Drive" en la nube. Similar a como trabaja Dropbox u otros servicios de almacenamiento en la nube. Si se desea subir un archivo a un directorio diferente en Google Drive, es posible utilizar la opción -destination. Por ejemplo, para enviar al directorio "backup" en Google Drive:

root@cloud:/backup/drive# cp ../databases/*2016-07-13* .
root@cloud:/backup/drive# ll -h *07-13*
-rw-r--r-- 1 root root 3.3M Jul 13 15:31 mediawiki_2016-07-13_020002.tar.bzip2
-rw-r--r-- 1 root root 106K Jul 13 15:31 mysql_2016-07-13_023001.tar.bzip2
-rw-r--r-- 1 root root 769K Jul 13 15:31 joomla_2016-07-13_021002.tar.bzip2
-rw-r--r-- 1 root root  28K Jul 13 15:31 qdpmex_2016-07-13_022001.tar.bzip2
root@cloud:/backup/drive# drive push -destination backup *07-13*
Resolving...
+ /backup/mediawiki_2016-07-13_020002.tar.bzip2
+ /backup/mysql_2016-07-13_023001.tar.bzip2
+ /backup/joomla_2016-07-13_021002.tar.bzip2
+ /backup/qdpmex_2016-07-13_022001.tar.bzip2
Addition count 4 src: 4.13MB
Proceed with the changes? [Y/n]:y
 4335623 / 4335623 [===========================================================================] 100.00% 4s

Sin embargo, para mantener la consistencia y prolijidad, es recomendable conservar la misma jerarquía de directorios local que en Google Drive. Por otro lado, la herramienta drive respeta la misma ruta local (relativa al directorio base) en Google Drive al momento de subir archivos.

Al subir archivos que ya existen en la nube, se sincronizan sólo los faltantes o desactualizados (es posible evitar sobrescribir archivos desactualizados en la nube con la opción -no-clobber). Para sincronizar todo un directorio es posible utilizar un asterisco.

El comando push es uno de los más completos, por lo que se recomienda revisar cuidadosamente todas sus opciones.

Listar archivos en Google Drive

Es posible listar con el comando "list" y buscar coincidencias con la opción -matches:

root@cloud:/backup/drive# drive list backup/
/backup/mediawiki_2016-07-13_020002.tar.bzip2
/backup/mysql_2016-07-13_023001.tar.bzip2
/backup/joomla_2016-07-13_021002.tar.bzip2
/backup/qdpmex_2016-07-13_022001.tar.bzip2
root@cloud:/backup/drive# drive list --matches varwww
/varwww_2016-07-11_040001.tar.bzip2

Borrar un archivo en Google Drive

Es posible enviar a la papelera con el comando "trash", o borrar definitivamente con el comando "delete". Al referirse a archivos que están en la nube es necesario eliminar la barra inicial en la ruta.

root@cloud:/backup/drive# drive delete backup/joomla_2016-07-13_021002.tar.bzip2

- /delete backup/joomla_2016-07-13_021002.tar.bzip2
Deletion count 1 dest: 768.57KB
Proceed with the changes? [Y/n]:y
This operation is irreversible. Continue [Y/N] y
 787015 / 787015 [==============================================================================] 100.00% 0
root@cloud:/backup/drive# drive list backup/
/backup/mediawiki_2016-07-13_020002.tar.bzip2
/backup/mysql_2016-07-13_023001.tar.bzip2
/backup/qdpmex_2016-07-13_022001.tar.bzip2

Obtener ayuda

Para obtener el listado de comandos disponibles ejecutar:

$ drive -h

Luego, para obtener mayor detalle sobre un comando específico:

$ drive push -h

También es útil recurrir a su documentación.

Referencias

odeke-em/drive: Google Drive client for the commandline

Go (lenguaje de programación) - Wikipedia


Tal vez pueda interesarte


Compartí este artículo