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
Fuente: linuxito