Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

Kenichiro MATOHARA

October 03, 2020
Tweet

More Decks by Kenichiro MATOHARA

Other Decks in Technology

Transcript

  1. / 最近の発表 最近の発表 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
  2. / Rspberry Pi Rspberry Pi ストレージにmicroSDがよく使われる Raspberry Pi OSの/にはext4が使われている 安いmicroSDはすぐ壊れる

    高耐久モデル(ドライブレコーダー向け)を試すも壊れる 永久保証て書いてある → OSに使うのは保証外と言われる 産業向けモデルきっと丈夫でウェレベリングもコントロラーが やってくれるらしいけどとても高い 5 / 26
  3. / 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
  4. / 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
  5. / 圧縮が無効になっていた 圧縮が無効になっていた $ 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
  6. / 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
  7. / .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
  8. / 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
  9. / 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
  10. / 圧縮オプション付きでフォーマッ 圧縮オプション付きでフォーマッ トできた! トできた! 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
  11. / 圧縮オプション付きでマウントも 圧縮オプション付きでマウントも 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
  12. / 中身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
  13. / ドキュメント見る ドキュメント見る 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
  14. / まとめ まとめ 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
  15. / 奥付 奥付 発表 2020-10-03(土) 発表者 ライセンス CC BY-NC-SA 4.0

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