F2FSの透過圧縮機能を使いたい

 F2FSの透過圧縮機能を使いたい

E34dfb243cc4baa2f1d4306941d9cfd8?s=128

Kenichiro MATOHARA

October 03, 2020
Tweet

Transcript

  1. / F2FSの透過圧縮機 F2FSの透過圧縮機 能を使いたい 能を使いたい Kenichiro Matohara 1 / 26

  2. / 南隅から参加(鹿児島の右下) 好きなLinuxディストリビューションはDebian お仕事募集 mailto:work@matohara.org 鹿児島らぐもやってます 次回 10/31 Kenichiro Kenichiro

    Matohara(matoken) Matohara(matoken) https://matoken.org https://matoken.org 2 / 26
  3. / 最近の発表 最近の発表 2020-09-12(Sat) & 2020-09- 13(Sun) 2020-09- 13(Sun) 2020-09-20(Sun)

    小江戸らぐ 9月のオフな集まり(第218回) 日本 Androidの会秋葉原支部ロボット部 第96回勉強会 コの人向け?の台風の過ごし方 日本Androidの会秋葉原支部ロボット部 第96回勉強会 Raspberry Pi の温度管理をソフトウェアで 鹿児島Linux勉強会 2020.09(オンライン開催) Rakutem miniを非常用Linux端末に出来ないか試す 3 / 26
  4. / F2FS F2FS サムスン電子が開発したLinux向けのフラッシュファイルシステム Linux Kernel 3.8で取り込まれている Nexus 9/Pixel 3なんかにも使われたらしい

    4 / 26
  5. / Rspberry Pi Rspberry Pi ストレージにmicroSDがよく使われる Raspberry Pi OSの/にはext4が使われている 安いmicroSDはすぐ壊れる

    高耐久モデル(ドライブレコーダー向け)を試すも壊れる 永久保証て書いてある → OSに使うのは保証外と言われる 産業向けモデルきっと丈夫でウェレベリングもコントロラーが やってくれるらしいけどとても高い 5 / 26
  6. / ext4よりF2FSのほうがいいので ext4よりF2FSのほうがいいので は? は? ウェアレベリングも欲しいけど…… 6 / 26

  7. / Raspberry PiのDebianでF2FS Raspberry PiのDebianでF2FS を使う を使う vmdb2を使ってRaspberry Pi 3向けDebian

    sid arm64イメージを 作成 /のファイルシステムにはf2fsを利用 特に意識せず使えている vmdb2 でカスタムOSイメージ作成(Raspberry Pi 3 用Debian buster arm64イメージ作成) - Speaker Deck https://github.com/matoken/raspi3-image- spec/releases/tag/2019-05-02 7 / 26
  8. / F2FSに透過圧縮機能があるらし F2FSに透過圧縮機能があるらし い い 書き込みデータ量が減って寿命が伸びるのでは? 試してみよう ※今回試した環境はDebian sid amd64(Raspberry

    Piではない) 8 / 26
  9. / 適当なイメージを用意 適当なイメージを用意 100MBのイメージ $ dd if=/dev/zero of=./f2fstest.img bs=1M count=100

    9 / 26
  10. / パーティション作成 パーティション作成 Linuxの1パーティーション $ fdisk ./f2fstest.img : n :

    : : : : w 10 / 26
  11. / F2FSでフォーマット…… F2FSでフォーマット…… $ sudo mkfs.f2fs -O compress ./f2fstest.img Error:

    Wrong features 11 / 26
  12. / F2FS透過圧縮のサポート状況を F2FS透過圧縮のサポート状況を 確認 確認 F2FSのcompression(LZO/LZ4)はLinux 5.6+で zstdは更にLinux 5.7+みたい 案外最近の対応.でも手元のkernelは

    5.8.10 なので大丈夫なはず F2FS Data Compression Using LZO/LZ4 + Selective File Extension Handling To Land In 2020 - Phoronix F2FS Introduces Zstd Compression Support With The Linux 5.7 Kernel - Phoronix 12 / 26
  13. / 圧縮が無効になっていた 圧縮が無効になっていた $ grep -i f2fs /boot/config-`uname -r` 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 is not set 13 / 26
  14. / Debian pkgのKernelを Debian pkgのKernelを CONFIG_F2FS_FS_COMPRESS CONFIG_F2FS_FS_COMPRESS IONを有効にしてbuildしてみる IONを有効にしてbuildしてみる $

    sudo apt build-dep Linux $ apt source Linux $ cd ../linux-5.8.10 $ cp /boot/config-`uname -r` ./.config $ make xmemuconfig 14 / 26
  15. / .config .config $ grep -i f2fs ./.config 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 15 / 26
  16. / kernel build & install kernel build & install real

    213m16.364s 結構掛かる $ time make -j`nproc` bindeb-pkg LOCALVERSION=-f2fs $ sudo apt install ../linux-image-5.8.10-fsf2_5.8.10-fsf2-1_amd64.deb $ reboot 16 / 26
  17. / 新しいkernelでフォーマット…… 新しいkernelでフォーマット…… CONFIG_F2FS_FS_COMPRESSION=y にしたのに? loopback device がいけないのかとUSBメモリでも試してみたが同じエラー $ sudo

    mkfs.f2fs -O compress ./j2fstest.img Error: Wrong features 17 / 26
  18. / もしかしてf2fs-toolsが古い? もしかしてf2fs-toolsが古い? 圧縮が入ったのは今年の3月で,v1.14.0が8月 ローカルバージョン古かった https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs- tools.git/commit/? id=fdd47b2ea7677119328c32bd159b7c200fd70212 f2fs-tools: support

    data compression This patch adds to support compression, introducing '-O compression' option to enable this feature in image. $ dpkg-query -W f2fs-tools f2fs-tools 1.11.0-1.1 18 / 26
  19. / f2fs-toolsもbuild f2fs-toolsもbuild $ sudo apt build-dep f2fs-tools $ git

    clone https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git $ cd f2fs-tools $ git checkout v1.14.0 $ ./autogen.sh $ ./configure $ make 19 / 26
  20. / 圧縮オプション付きでフォーマッ 圧縮オプション付きでフォーマッ トできた! トできた! extra_attrも必要だった $ sudo LD_LIBRARY_PATH=./lib:$LD_LIBRARY_PATH mkfs/mkfs.f2fs

    -f -l f2fs -O compression /dev/sdb Info: compression feature should always be enabled with extra attr feature $ sudo LD_LIBRARY_PATH=./lib:$LD_LIBRARY_PATH mkfs/mkfs.f2fs -f -l f2fs -O extra_attr,compress 20 / 26
  21. / 圧縮オプション付きでマウントも 圧縮オプション付きでマウントも ok ok compress_algorithm=zstd,compress_log_size=2とか付いてる :) $ sudo LD_LIBRARY_PATH=./lib:$LD_LIBRARY_PATH

    mount -o compress_algorithm=zstd /dev/sdb1 /mnt $ mount | grep /mnt /dev/sdb1 on /mnt type f2fs (rw,relatime,lazytime,background_gc=on,discard,no_heap,user_xattr, 21 / 26
  22. / 適当に小さくなるデータを書き込 適当に小さくなるデータを書き込 んでみる…… んでみる…… 中身0だけのファイルを作ってみたけど圧縮が効いているのかわから ない $ sudo chown

    `id -u`.`id -g` /mnt $ dd if=/dev/zero of=/mnt/100MB bs=1M count=100 $ ls -l /mnt/100MB $ df /mnt 22 / 26
  23. / 中身0だけのファイルを作ってみたら溢れた 圧縮が効くとこのくらい小さくなりそうだけど効いていない? compress_algorithm を zstd, lzo, lz4 と変えても駄目(それぞれ mkfsしなおしている)

    $ dd if=/dev/zero of=/mnt/4GB bs=4M count=1000 dd: error writing '/mnt/4GB': No space left on device $ dd if=/dev/zero bs=4M count=1000 2>/dev/null | zstd -z - --stdout | wc -c 131515 23 / 26
  24. / ドキュメント見る ドキュメント見る mkfsしなおして chattr +c, compress_extension 共に試して みたけどうまく行かない…… サブディレクトリ以下でもNG

    https://www.kernel.org/doc/Documentation/ lesystems/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 24 / 26
  25. / まとめ まとめ F2FSの透過圧縮機能軽い気持ちで試したら何気に最近実装された 機能で嵌った F2FSの透過圧縮(lzo/lz4)は Linux 5.6+(zstd対応は5.7+) 現在のDebian sid

    amd64の場合は要Kernel build 更に f2fs-tools v1.14.0+ 圧縮対象には chattr +c or compress_extension=拡張子 しかし使い方が悪いらしく?うまく行っていない…… 情報求む なにかわかったらこちらに書きます→ https://wiki.matoken.org/linux/ lesystem/f2fs 25 / 26
  26. / 奥付 奥付 発表 2020-10-03(土) 発表者 ライセンス CC BY-NC-SA 4.0

    東海道らぐ!ておくれライブフェスティバル Kenichiro Matohara(matoken) 26 / 26