Estoy tratando de probar un proyecto que necesita almacenamiento comprimido con el uso del sistema de archivos ext4 ya que la aplicación que uso se basa en las características de ext4.
¿Existe alguna solución estable / de producción para la compresión transparente en ext4?
Lo que he intentado:
Ext4 sobre volumen ZFS con compresión habilitada. Esto en realidad tuvo un efecto adverso. Intenté crear un volumen ZFS con la compresión lz4 habilitada y hacer un sistema de archivos ext4 en / dev / zvol / ... pero el volumen zfs mostró el doble del uso real y la compresión no pareció tener ningún efecto.
# du -hs /mnt/test
**1.1T** /mnt/test
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
pool 15.2T 2.70G 290K /pool
pool/test 15.2T 13.1T **2.14T** -
Comandos de creación de ZFS
zpool create pool raidz2 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde2 /dev/sdf1 /dev/sdg1 /dev/sdh2 /dev/sdi1
zfs set recordsize=128k pool
zfs create -p -V15100GB pool/test
zfs set compression=lz4 pool/test
mkfs.ext4 -m1 -O 64bit,has_journal,extents,huge_file,flex_bg,uninit_bg,dir_nlink /dev/zvol/pool/test
Fusecompress: Parecía funcionar pero no 100% estable. Buscando alternativas.
LessFS: ¿Es posible usar Lessfs junto con ext4? Todavía no lo he intentado, pero me interesaría la información del usuario.
Un problema importante: no es verdadera transparencia
Un problema que vi con fusecompress fueron las cuotas. Por ejemplo, si habilito la compresión en el sistema de archivos, me gustaría que mi sistema se beneficie de la compresión, no necesariamente el usuario final. Si habilitara una cuota de 1 GB para un usuario, con una relación de compresión de 1.5, podrían cargar 1.5 GB de datos, en lugar de 1 GB de datos, y el sistema se beneficiaría de la compresión. Esto también pareció mostrarse en df -h. ¿Existe una solución para tener una compresión transparente a las cuotas?
fuente
Respuestas:
Uso ZFS en Linux como administrador de volúmenes y un medio para proporcionar protecciones y funcionalidades adicionales a los sistemas de archivos tradicionales. Esto incluye traer instantáneas a nivel de bloque, replicación, deduplicación, compresión y almacenamiento en caché avanzado a los sistemas de archivos XFS o ext4.
Ver: https://pthree.org/2012/12/21/zfs-administration-part-xiv-zvols/ para otra explicación.
En mi caso de uso más común, aprovecho la función zvol de ZFS para crear un volumen disperso en un zpool existente. Las propiedades de zvol se pueden configurar como un sistema de archivos ZFS normal. En este momento, puede establecer propiedades como tipo de compresión, tamaño de volumen, método de almacenamiento en caché, etc.
La creación de este zvol presenta un dispositivo de bloque para Linux que puede formatearse con el sistema de archivos que elija. Use
fdisk
oparted
para crear su partición ymkfs
el volumen terminado.Monte esto y esencialmente tendrá un sistema de archivos respaldado por un zvol y con todas sus propiedades.
Aquí está mi flujo de trabajo ...
Cree un zpool compuesto por cuatro discos:
querrá la
ashift=12
directiva para el tipo de discos que está utilizando. El nombre de zpool es "vol0" en este caso.Establecer la configuración inicial de zpool:
configuro
autoexpand=on
en el nivel de zpool en caso de que alguna vez reemplace los discos con unidades más grandes o expanda el grupo en una configuración de espejos ZFS . Normalmente no uso ZFS raidz1 / 2/3 debido al bajo rendimiento y la incapacidad para expandir el zpool.Establezca las propiedades iniciales del sistema de archivos zfs:
utilice el
lz4
algoritmo de compresión para las nuevas instalaciones de ZFS. Está bien dejarlo encendido todo el tiempo.Cree ZFS zvol:
para ZFS en Linux, es muy importante que utilice un tamaño de bloque grande.
-o volblocksize=128k
Es absolutamente esencial aquí. La-s
opción crea un zvol escaso y no consume espacio de agrupación hasta que sea necesario. Puede comprometerse aquí en exceso si conoce bien sus datos. En este caso, tengo aproximadamente 444 GB de espacio en disco utilizable en el grupo, pero presento un volumen de 800 GB a XFS.Dispositivo de partición zvol:
( debe ser / dev / zd0 para el primer zvol; / dev / zd16, / dev / zd32, etc. para los zvols posteriores )
Cree y monte el sistema de archivos:
mkfs.xfs o ext4 en la partición recién creada, / dev / zd0p1.
Tome el UUID con
blkid
y modifíquelo/etc/fstab
.Montar el nuevo sistema de archivos.
Resultados ...
Listado del sistema de archivos ZFS.
Lista de zpool de ZFS.
Propiedades de ZFS (zvol tomar nota de
referenced
,compressratio
yvolsize
).fuente
/dev/sdb
versus/dev/sdb1
.También debe habilitar el descarte en el sistema de archivos ext4. Sin descartar, zfs no reclama el espacio cuando se eliminan los archivos. Esto puede terminar dando lugar a grandes discrepancias de espacio entre lo que informa el sistema de archivos ext4 y los informes de volumen zfs.
fuente
fstrim
comando.