LINUX.ORG.RU

f2fs сжатие не работает

 , , ,


0

2

У кого-нибудь заработало сжатие в новых версиях файловой системы f2fs ?

Debian kernel 5.10 (testing).

В мануале ядра по модулю f2fs указаны примеры как можно использовать сжатие на файлах, но это у меня не работает.

https://www.kernel.org/doc/Documentation/filesystems/f2fs.txt

- To enable compression on regular inode, there are three ways:
* chattr +c file
* chattr +c dir; touch dir/file
* mount w/ -o compress_extension=ext; touch file.ext

Форматирую так

mkfs.f2fs -l myf2fs -O extra_attr,inode_checksum,sb_checksum,compression -f /dev/disk/by-uuid/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Монтирую так

mount /dev/disk/by-label/myf2fs /root/myf2fs -o compress_algorithm=lz4,compress_extension=*

Создаю большой пустой файл командой dd

dd if=/dev/zero of=zero.ext bs=100M count=5
chattr +c zero.ext

Но место не освобождается (df -h). Если записал 500 МБ, то и занято 500 МБ.

Конфиг ядра config-5.10.0-3-686-pae

CONFIG_F2FS_FS=m
CONFIG_F2FS_STAT_FS=y
CONFIG_F2FS_FS_XATTR=y
CONFIG_F2FS_FS_POSIX_ACL=y
CONFIG_F2FS_FS_SECURITY=y
# CONFIG_F2FS_CHECK_FS is not set
# CONFIG_F2FS_IO_TRACE is not set
# CONFIG_F2FS_FAULT_INJECTION is not set
CONFIG_F2FS_FS_COMPRESSION=y
CONFIG_F2FS_FS_LZO=y
CONFIG_F2FS_FS_LZ4=y
CONFIG_F2FS_FS_ZSTD=y
CONFIG_F2FS_FS_LZORLE=y

Может чего забыл ?

Может чего забыл?

Из очевидного: записывать после установки атрибута? Взвод атрибута это всего лишь взвод атрибута. Ничего не бросится пережимать тебе этот файл от его установки.

t184256 ★★★★★ ()
Ответ на: комментарий от anonymous

И это правильно. По крайней мере по умолчанию. А то так можно будет словить приколы, когда мы перезаписываем данные внутри файла, а у нас внезапно место кончается. Кто-нибудь точно от такого с ума сойдёт.

Legioner ★★★★★ ()
Ответ на: комментарий от anonymous

Сжатие в f2fs не освобождает свободное место.

Так это никого не интересует. Главное анонсировать, и говорить всем, что ФС сжатие поддерживает.

anonymous ()

Чтобы проверить что сжатие существует сравнил сколько байтов считывается с диска с сжатого файла и не сжатого.

mount /dev/disk/by-label/myf2fs /root/myf2fs -o compress_algorithm=lz4

# Без сжатия
cd /root/myf2fs
mkdir a
cd a
dd if=/dev/zero of=1.tmp bs=100M count=5
sync
vmstat -p /dev/sdc1
cat 1.tmp > /dev/null
vmstat -p /dev/sdc1

# Включение сжатия на папке
cd /root/myf2fs
mkdir b
chattr +c b
cd b
dd if=/dev/zero of=1.tmp bs=100M count=5
sync
vmstat -p /dev/sdc1
cat 1.tmp > /dev/null
vmstat -p /dev/sdc1

(Размер сектора виден в fdisk /dev/sdc)

vmstat выводит количество секторов прочитанное с partition.

С диска считалось 127 MB на сжатом файле вместо 500 MB на не сжатом. Таково сжатие lz4 в F2FS.

netwish ()
Последнее исправление: netwish (всего исправлений: 1)
Ответ на: комментарий от netwish

Фикс. Статистику vmstat я получил после перезагрузки линукса, а не сразу после создания файлов.

mount /dev/disk/by-label/myf2fs /root/myf2fs -o compress_algorithm=lz4

cd /root/myf2fs
cd a
vmstat -p /dev/sdc1
cat 1.tmp > /dev/null
vmstat -p /dev/sdc1

cd /root/myf2fs
cd b
vmstat -p /dev/sdc1
cat 1.tmp > /dev/null
vmstat -p /dev/sdc1

netwish ()
Последнее исправление: netwish (всего исправлений: 1)