¿Btrfs comprimirá automáticamente los archivos existentes cuando la compresión esté habilitada?

26

Elegí btrfs como el formato de mi /sistema de archivos en el instalador Ubuntu 12.04 LTS. Una vez completada la instalación, agregué compress=lzoopciones de montaje /etc/fstaby reinicié.

¿Los archivos existentes se comprimirán automáticamente ahora, o debo hacer algo explícitamente para que eso suceda?

ændrük
fuente
1
No tiene que reiniciar, podría simplemente sudo mount -o remount /y las nuevas opciones de fstab surtirán efecto.
sep332
Tenga en cuenta que es posible que necesite usar la opción comprimir-fuerza o algunos archivos seguirán sin comprimir sin importar lo que haga ...
rogerdpack
Una nota sobre la fuerza de compresión. La compresión normal tiene una característica en el sentido de que si detecta que la compresión tiene poco o ningún beneficio, no se molesta en continuar la compresión para ese archivo en particular (ahorrando así la CPU desperdiciada). Al usar la fuerza de compresión, intenta una compresión inútil de todos modos. Buenos ejemplos donde esto aplica son para archivos que ya están comprimidos (multimedia, archivos zip, etc.). En otras palabras, la fuerza de compresión es generalmente una mala idea. ;)
zaTricky

Respuestas:

27

Deberá ejecutar btrfs fi defragmentpara forzar la recompresión de los datos existentes. De lo contrario, solo se comprimirán los datos nuevos.

De las preguntas frecuentes :

... considere volver a montar con -o compress, y reescribir archivos particulares en el lugar, o ejecutar btrfs fi defragmentpara volver a comprimir todo. Esto puede tardar un rato.

Norbert Fabritius
fuente
btrfs fi defragment -r -clzo / path / to / fs
David Goodwin
2
¿Qué pasa con la autodefragopción de montaje? ¿Eso también hace que comprima archivos previamente descomprimidos cuando se autodesfragmenta?
Geremia
1
Asegúrese de usar "-r", el indicador recursivo para comprimir dentro de los directorios.
Salami
10

Hice lo que dijo Norbert Fabritius, pero no noté ninguna compresión en los archivos existentes - df -h / before btrfs fi defragment = 658MB | df -h / after btrfs fi defragment = 658MB. Los nuevos archivos están bien. Buscando un poco tráeme esta cita:

Ejecutando esto:

# btrfs filesystem defragment ~/stuff

no desfragmenta el contenido del directorio.

Esto es por diseño. btrfs fi defrag opera en el único objeto del sistema de archivos que se le pasa>>. Esto significa que el comando desfragmenta solo los metadatos que contiene el directorio> objeto, y no los contenidos del directorio. Si desea desfragmentar el contenido del directorio, algo como esto sería más útil:

# find -xdev -type f -exec btrfs fi defrag '{}' \;

Después de esto, mi / está ocupando 656MB, nada enorme, pero ciertamente hay compresión.

Fuente: https://btrfs.wiki.kernel.org/index.php/Problem_FAQ#Defragmenting_a_directory_doesn.27t_work

Espero que esto ayude.

Perdon por mi inglés.

J. Neto
fuente
1
1. Cuando use btrfs, no use ni confíe en df . 2. Para una mejor relación de compresión, use zlib (sin embargo, es más lento)
ignis
3
¿No debería su línea de comando incluir defrag -clzoo en defrag -czliblugar de solo defrag, si realmente quiere comprimir cosas?
jbo5112
55
Hay una bandera recursiva "-r", así que puedes hacer esto ahora:btrfs fi defrag -r -czlib ~/stuff
Salami
8

De acuerdo con la documentación de Oracle, puede comprimir archivos existentes en un sistema de archivos en línea existente desfragmentando cada archivo con las opciones -c, -clzo o -czlib. LZO se recomienda para la velocidad.

find / -xdev \( -type f -o -type d \) -exec btrfs filesystem defragment -v -clzo -- {} +

Esto usa el comando find para ejecutar el desfragmentador btrfs en cada archivo en el sistema de archivos raíz (dado por la barra justo después del comando "find" al principio). Si tiene otros subvolúmenes, puede usarlo nuevamente con la ruta de un subvolumen (tengo uno en / home, por ejemplo) en lugar de la barra inclinada.

Necesitará privilegios de root para esto, así que agregue sudo al frente si es necesario.

Ver:

Geoff
fuente
3

De acuerdo con https://btrfs.wiki.kernel.org/index.php/Mount_options#List_of_options están disponibles los siguientes algoritmos de compresión:


compress,compress-force
Enable compression. Starting with kernel 2.6.38 you can choose the algorithm for compression:

 - compress=zlib - Better compression ratio. It's the default and safe for olders kernels.
 - compress=lzo - Faster compression.
 - compress=no - Disables compression (starting with kernel 3.6). 

compress-force= - Enable compression even for files that don't compress well, like videos and dd images of disks. The options compress-force=zlib and compress-force=lzo works for kernels >2.6.38.

Note that old (before 2012) btrfs-progs versions will probably fail some operations (e.g. fsck) on filesystems with LZO compression. 

Nota: Esta publicación es la respuesta a la pregunta adicional sobre qué tipo de algoritmos de compresión están disponibles, que se preguntó a continuación ... así que no me culpen.

Rostislav Stribrny
fuente
2

De acuerdo con ArchWiki :

Consejo: La compresión también se puede habilitar por archivo sin usar la compressopción de montaje; simplemente aplique chattr +cal archivo. Cuando se aplica a los directorios, hará que los nuevos archivos se compriman automáticamente a medida que se presentan.

¡Muy agradable! Dios bendiga a BTRFS!

Además, de la wiki BTRFS :

¿Puedo forzar la compresión en un archivo sin usar la opción de montaje de compresión ?

Sí. La utilidad chattradmite la configuración del atributo de archivo c que marca el inodo para comprimir los datos recién escritos.

Geremia
fuente
-9

La compresión está habilitada de forma predeterminada en Btrfs, por lo que, a menos que la desactive explícitamente, debe comprimirse.

Diego
fuente
11
No es cierto, debe pasar compression="su algoritmo de compresión favorito" en fstab para habilitarlo.
turbo
@turbo ¿Qué algoritmos de compresión están disponibles?
Restablece a Mónica - ζ--
parece que actualmente hay 2 compresiones permitidas (bueno, 3 si cuenta "ninguna"): btrfs.wiki.kernel.org/index.php/…
rogerdpack