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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

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

Avatar for Kenichiro MATOHARA

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