Si estás usando el servicio de almacenamiento online Backblaze B2, te habrás dado cuenta de que ofrece una de las mejores opciones calidad precio dle mercado, pero, aun así, hay que tener cuidado cuando realizamos ciertas operaciones, que nos pueden llevar a asumir un coste extra que ni nos habíamos planteado. Estoy hablando del coste que puede suponer realizar muchas transacciones Class C. Te voy a contar cómo minimizar su coste si usas el programa Open Source Rclone utilizando –fast-list.
- Te puede interesar: Cómo se instala Rclone en Mac: trucos y consejos
Cuáles son los precios de Backblaze B2 y como te pueden afectar
En principio, Backblaze B2 es una de las opciones más baratas: por 1 TB guardado en sus servidores vamos a pagar 6$/mes (72 $/año). No hay cargos por subir tus archivos a BackBlaze.
Y puedes descargar hasta 3 TB al mes sin que te cobren nada.
Vale, pero también tenemos que pagar otras cosas, como la API Calls. Normalmente, no notas nada porque:
Las Class Transactions A son gratis.
B2 Native API | S3 Compatible API |
---|---|
b2_cancel_large_file | AbortMultipartUpload |
b2_delete_bucket | DeleteBucket |
b2_delete_file_version | DeleteObject |
b2_delete_key | DeleteObjects |
b2_finish_large_file | CompleteMultipartUpload |
b2_get_upload_part_url | CreateMultipartUpload |
b2_get_upload_url | PutObjectLegalHold |
b2_hide_file | PutObjectRetention |
b2_start_large_file | PutObject |
b2_update_file_legal_hold | UploadPart |
b2_update_file_retention | PutObjectLockConfiguration |
b2_upload_file | |
b2_upload_part |
Las Class Transactions B: Las primeras 2.500 de estas llamadas son gratuitas cada día, luego 0,004 $ por cada 10.000.
B2 Native API | S3 Compatible API |
---|---|
b2_download_file_by_id | GetObject |
b2_download_file_by_name | GetObject |
b2_get_file_info | HeadObject |
GetObjectLegalHold | |
GetObjectLockConfiguration | |
GetObjectRetention |
Las Class Transactions C: Las primeras 2.500 de estas llamadas son gratuitas cada día, luego 0,004 $ por cada 10.000.
B2 Native API | S3 Compatible API |
---|---|
b2_authorize_account | ListParts |
b2_copy_file | CopyObject (Put Object Copy) |
b2_copy_part | UploadPartCopy |
b2_create_bucket | CreateBucket |
b2_create_key | ListMultipartUploads |
b2_get_download_authorization | ListBuckets |
b2_list_buckets | ListObjectsV2 |
b2_list_file_names | ListObjectVersions |
b2_list_file_versions | DeleteBucketCors |
b2_list_keys | DeleteBucketEncryption |
b2_list_parts | GetBucketAcl (List Objects) |
b2_list_unfinished_large_files | GetBucketCors |
b2_update_bucket | GetBucketEncryption |
GetBucketLocation | |
GetBucketVersioning | |
GetObjectAcl | |
HeadBucket | |
PutBucketAcl | |
PutBucketCors | |
PutBucketEncryption | |
PutObjectAcl |
¿Problema? Que si tienes muchos archivos en tu backup, vamos, que si tienes una gran cantidad de TB en tu copia de seguridad, los costes de las Class Transactions C, van a empezar a aumentar por las llamadas que hacen programas como Rclone al back-end de Backblaze B2. Estas transacciones incluyen operaciones como listar directorios, creación, cambio de nombre o eliminación de archivos. Vamos, operaciones que se hacen de manera habitual cuando sincronizamos archivos online con nuestro servidor, ordenador o NAS.
¿Cómo podemos reducir el coste de las de las Class Transactions C cuando usamos un programa como Rclone?
Ya te he contado Cómo cifrar tus datos en la nube con Rclone y Cómo instalar Rclone en Rocky Linux 9, así que el siguiente paso es ver como optimizar tu gasto si estás subiendo backups a Backblaze B2.
En primer lugar, te recomiendo que si puedes, comprimas primero tu backup y luego lo subas a B2. Te vas a horrar disgustos con los nombres de archivos si quieres cifrar el bucket. Y vas a tener todo más controlado.
Como a veces esto no es posible y a. lo mejor tienes muchos TB que quieres subir online, cuando vas a usar Rclone, tienes que empezar a usar una opción en sus comandos llamada –fast-list. Utilizando esta opción en tus comandos, vas a conseguir lo siguiente:
- Optimización del listado de archivos: En lugar de listar archivos de un directorio a la vez, –fast-list intenta obtener la lista completa de archivos de una sola vez, reduciendo el número total de solicitudes API.
- Mejora del rendimiento: Es muy útil para B2 remotos con grandes cantidades de archivos, ya que disminuye el tiempo total necesario para listar todos los archivos antes de iniciar las operaciones de sincronización, copia o verificación.
¿Única pega que tiene poner esta opción en tus comandos? Va a usar más memoria RAM de tu servidor u ordenador. Si vas a realizar una gran sincronización, asegúrate de tener memoria RAM suficiente para poder ejecutarla, o el proceso se va a ir al garete. ¿Cómo puedes comprobar el uso de memoria que va a hacer Rclone con los archivos que quieres subir? Con este comando:
rclone -l test memory /ruta/a/tu/backup
Y te va a dar un resultado como este (en mi caso):
NOTICE: 78 objects took 15320 bytes, 196.4 bytes/object
NOTICE: System memory changed from 22893832 to 22893832 bytes a change of 0 bytes
En mi caso me sale que cada objeto de la carpeta que transfiero a B2 va a hacer uso de 196.4 bytes cuando hago la transferencia mediante Rclone. Puedes hacer el mismo cálculo con los archivos que tienes online:
rclone -l test memory b2cifrado:
Pero está recomendado usar esta opción si tus directorios son muy grandes, con muchos archivos para reducir el número de llamada API y mejorar la velocidad de sincronización. Vas a ver cómo se reducen las llamadas a las transacciones Class C de Backblaze.
¿Cómo puede quedar el comando?
rclone sync /backup/ b2cifrado: --fast-list --transfers 16 --b2-chunk-size 128M --buffer-size 64M --log-file=/ruta/a/rclone-sync.log --log-level INFO --progress
¡Ojo! Deberías usar esta opción en todos tus comandos, por ejemplo rclone ls b2cifrado: –fast-list o con el comando copy o Sync. Si ya tienes estos comandos en cron o en un script, no hay problema, pero si usas mucho la línea de comandos, a lo mejor se te olvida a veces. Tiene solución:
Editas el archivo ~/.bashrc, que es donde puedes guardar variables y alias en tu línea de comandos:
vi ~/.bashrc
y pones lo siguiente:
export RCLONE_FAST_LIST=true
O también puedes poner:
export RCLONE_FAST_LIST="1"
Funciona de las dos maneras. Elige la que quieras (compruébalo tú mismo). Luego aplicas los cambios:
source ~/.bashrc
Desde este momento, todos tus comandos de Rclone irán con la opción –fast-list sin necesidad de ponerlo.
¿Cómo compruebas que funciona? Pones en el comando -vv para poder ver toda la info del comando:
$ rclone lsd b2cifrado: -vv
DEBUG : Setting --fast-list "true" from environment variable RCLONE_FAST_LIST="true"
DEBUG : rclone: Version "v1.67.0" starting with parameters ["rclone" "lsd" "b2cifrado:" "-vv"]