Esta web utiliza cookies, puedes ver nuestra política de cookies, aquí Si continuas navegando estás aceptándola

BTRFS - Introducción al ROW, uso básico y rebalanceo


Empezaremos explicando en que consiste ROW y sus consecuencias, seguiremos con las diferencias con COW, como consultar el espacio disponible y como rebalancear los datos.

ROW:

  • Cuando se escribe en un fichero, los datos nuevos se escriben en otro lugar, no en el fichero original y se marcan los bloques del fichero original como libres.
  • Si se genera un snapshot o se hace una copia de un fichero con cp --reflink=always los bloques del snapshot son los del fichero original a excepción de los cambios que se hagan que se escriben en un lugar a parte.

Si se da el primer caso con mucha frecuencia el sistema de ficheros acabará con una fragmentación interna muy elevada, dejándonos sin espacio utilizable a pesar de disponer de espacio.

En algunos casos(bases de datos especialmente) es útil deshabilitar el ROW, esto se puede hacer de dos formas distintas, a nivel de partición indicándolo en el fstab o a nivel de directorio mediante chattr:

vi /etc/fstab
nodatacow

Mediante chattr:

chattr +C /dir/file

NOTA: Si se han hecho snapshots, copias mediante --reflink=always o ya existían ficheros deshabilitar ROW con chattr no funcionará, se pueden mover los ficheros antiguos, deshabilitar ROW y volcar los datos de nuevo.

Realmente BTRFS NO es COW, es ROW:

Some people insist that Btrfs does "Redirect-on-write" rather than "Copy-on-write"

https://storageswiss.com/2016/04/01/snapshot-101-copy-on-write-vs-redirect-on-write/

La diferencia entre ROW y COW es como se almacena la versión antigua de un bloque modificado.

  • COW
    • W: El bloque original es copiado a otra ubicación y se actualiza el dato, esto implica una lectura y dos escrituras: 1R/2W.
    • R de un snapshot: Se leen los bloques originales hasta que se encuentra alguno modificado, entonces se busca la copia que se hizo al escribir y se lee.
  • ROW
    • W: Los bloques originales se dejan intactos, cuando se modifica algún bloque este se escribe en una ubicación distinta: generación de puntero.
    • R de un snapshot: Las referencias a los bloques modificados se guardan como punteros, hay que leerlos.

ROW precisa de un 1/3 de las operaciones de I/O que COW al modificar un bloque y 0 sobreacarga computacional al leer snapshots.
Con COW el rendimiento va degradándose conforme se van creando snapshots, COW suele utilizarse para realizar snapshot con un tiempo de vida muy limitado(normalmente para backups), en cambio los snapshots de ROW suelen conservarse durante mucho mas tiempo.

Espacio en disco:

Para mostrar el espacio en disco utilizado no sirve el df básico, hay que utilizar:

btrfs fi usage /mount/point

Los únicos datos útiles son:

    Device size:           1.45TiB
    Used:              38.83GiB
    Free (estimated):           1.41TiB    (min: 1.06TiB)

En free-min es por datos consumidos internamente y por fragmentación interna del FS.

La salida completa del comando es algo así:

btrfs fi usage /
Overall:
    Device size:           1.45TiB
    Device allocated:         768.04GiB
    Device unallocated:         720.84GiB
    Device missing:             0.00B
    Used:              38.83GiB
    Free (estimated):           1.41TiB    (min: 1.06TiB)
    Data ratio:                  1.00
    Metadata ratio:              1.99
    Global reserve:          48.00MiB    (used: 0.00B)

Rebalanceo:

Defragmentar requiere espacio en disco, BTRFS organiza el espacio de disco en bloques, estos bloques son de determinado tamaño, si un fichero ocupa cuatro bloques y medio está ocupando cinco, puede que otro fichero ocupe X y medio también pudiendo agrupar los medios de
los dos ficheros en un único bloque, mover o no mover los datos de un bloque a otro se decide en base al espacio ocupado en dicho bloque, por ejemplo en este caso si se utiliza un 5% o menos del bloque se recoloca.

btrfs fi balance start -dusage=5 /mount/point

NOTA: Si el sistema de ficheros se compone de mas de un disco el balance además repartirá los ficheros entre ellos para que el acceso sea mas rápido.


Autor: Kr0m -- 17/05/2017 21:05:51