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

Bterfs+SnapperでDiskFullになって困った話

 Bterfs+SnapperでDiskFullになって困った話

E567a535ddc7964130dd086f147a7682?s=128

Kenichiro MATOHARA

November 14, 2020
Tweet

Transcript

  1. / Bterfs+Snapperで Bterfs+Snapperで DiskFullになって DiskFullになって 困った話 困った話 Kenichiro Matohara 1

    / 26
  2. / 南隅から参加(鹿児島の右下) 好きなLinuxディストリビューションはDebian お仕事募集 mailto:work@matohara.org Kenichiro Matohara(matoken) Kenichiro Matohara(matoken) https://matoken.org

    https://matoken.org 2 / 26
  3. / 最近の発表 最近の発表 2020-10-10(sat) 2020-10-31(sat) NetworkManagerのWi-Fi接続のQR code共有 小江戸らぐ 10月のオフな集まり(第219回) LinuxでNASのdiskのデータを復旧

    鹿児島Linux勉強会 2020.10(オンライン開催) 3 / 26
  4. / 鹿児島らぐ 鹿児島らぐ 次回 11/28(sat) オープンソースカンファレンス2020 Online/Fukuoka B会場16:15〜 4 /

    26
  5. / Bterfs+SnapperでDiskFullになって Bterfs+SnapperでDiskFullになって 困った話 困った話 5 / 26

  6. / Bterfs Bterfs Linux用のCoW(copy on write)ファイルシステム スナップショット,透過圧縮,SSDへの最適化,重複排除(バッ チ),等々 btrfs Wiki

    6 / 26
  7. / Snapper Snapper Btrfs, LVM, ext4環境でのスナップショットマネージャー 定期的,指定時にスナップショットの取得,破棄などをしてくれ る SnapperGUIも 7

    / 26
  8. / DiskFull>< DiskFull>< Debian sid amd64のデスクトップ環境でBtrfs + Snapperを既定値で有 効にしていた(なんかSPACE_LIMITとかあるから食いつぶさないだ ろうとか思ってた)

    まだまだ空き容量があるつもりだったのにDiskに書き込めなくなる (historyも使えなくて辛い) rm *.isoとかしても空かない? rmしてもSnapshotは消えないのでdisk空かない…… 8 / 26
  9. / Btrfsの容量確認 Btrfsの容量確認 dfでは正しい値が得られない btrfsコマンドを使う $ df -h / $

    btrfs filesystem df / $ sudo btrfs filesystem usage / $ sudo btrfs filesystem show 9 / 26
  10. / Snapshotを消す Snapshotを消す スナップショットを確認して ID(複数指定可)を指定してスナップショットを消す とりあえず少し空いて一息つけるように $ sudo snapper list

    $ sudo snapper delete <ID> 10 / 26
  11. / 設定確認 設定確認 / だけの1パーティションでサブボリュームも殆ど無い(システムが 切ったものだけ) $ sudo btrfs subvolume

    list -p . | grep -v snapshot Snapperの設定は既定値 /etc/snapper/configs/root 11 / 26
  12. / disk内容の圧縮をしてみる disk内容の圧縮をしてみる Btrfsは透過圧縮が可能 圧縮形式はzlib, lzo, zstd(v4.14〜) 圧縮レベルも指定可能 compress=zlib:2 mount時に透過圧縮が指定できる

    -o compress=zstd マウント以降のファイル変更に圧縮が反映される → それ以前の ファイルは圧縮されない 特定のファイルを圧縮したい場合は, chattr +c する 手動で圧縮(ボリューム単位でなく,特定のファイル,ディレクト リ単位でok) $ sudo btrfs filesystem defragment -r -v -czstd $COMPRESS_PATH 12 / 26
  13. / スナップショットのファイルを スナップショットのファイルを 消したい 消したい スナップショットを書き込み可能にして削除する 1 書き込みが出来るようにする 2 確認

    $ sudo btrfs property set /path/to/.snapshots/<snapshot_num>/snapshot ro false $ sudo btrfs property get /path/to/.snapshots/<snapshot_num>/snapshot ro=false 1 2 13 / 26
  14. / snapperSで全てのスナップショッ snapperSで全てのスナップショッ トから指定ファイル削除 トから指定ファイル削除 というものでできそう うまく動かない メンテされて無さそう? snapperS $

    sudo snapperS rm -f /home/matoken/Downloads/iso/Parrot-security-4.9.1_x64.iso2 -r 1-100 File "snapperS", line 31 print "Specify the absolute path of the file starting with a /" ^ SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Specify the absolute p Tested on Ubuntu 15.04 and 15.10 with snapper v0.2.4 and btrfs-progs v4.0 (bug reports welcome!). 14 / 26
  15. / とりあえず手動一括削除 とりあえず手動一括削除 1 全てのスナップショットを書き込み可能にする 2 該当ファイルを一括削除 3 スナップショットを書き込み不可に戻す $

    sudo snapper --csvout list | grep ^root, | grep -v ,current, | cut -f3 -d, | \ xargs -I{} sudo btrfs property set /.snapshots/{}/snapshot ro false $ sudo snapper --csvout list | grep ^root, | grep -v ,current, | cut -f3 -d, | \ xargs -I{} sudo rm -r /.snapshots/{}/snapshot/home/matoken/Downloads/iso/* $ sudo snapper --csvout list | grep ^root, | grep -v ,current, | cut -f3 -d, | \ xargs -I{} sudo btrfs property set /.snapshots/{}/snapshot ro true 1 2 3 15 / 26
  16. / Snapperの設定見直し Snapperの設定見直し スナップショット利用スペースを減らす(0.1→10%, 1→100%) SPACE_LIMIT="0.2" ナンバークリーンアップ(aptでのスナップショット等25個→5個) NUMBER_LIMIT=5 タイムラインクリーンアップを調整(時間経過でのスナップショッ ト)

    スナップショット間隔を5分毎に /lib/systemd/system/snapper-timeline.timer [Timer] OnCalendar=*:0/5 16 / 26
  17. / スナップショットの削除設定 スナップショットの削除設定 (GUIのほうが便利?) (GUIのほうが便利?) rsyncで別マシンにデイリーバックアップをしているので端末上に はそんなにたくさん必要ない 30分毎に残す,毎日4個残す,週に1つ残す # limits

    for timeline cleanup -TIMELINE_MIN_AGE="1800" -TIMELINE_LIMIT_HOURLY="10" -TIMELINE_LIMIT_DAILY="10" -TIMELINE_LIMIT_WEEKLY="0" -TIMELINE_LIMIT_MONTHLY="10" -TIMELINE_LIMIT_YEARLY="10" +TIMELINE_MIN_AGE="900" +TIMELINE_LIMIT_HOURLY="48" +TIMELINE_LIMIT_DAILY="4"" +TIMELINE_LIMIT_WEEKLY="1" +TIMELINE_LIMIT_MONTHLY="0" +TIMELINE_LIMIT_YEARLY="0" 17 / 26
  18. / SnapperGUI SnapperGUI スナップショットの作成,削除,設定などがお手軽に出来る 18 / 26

  19. / 19 / 26

  20. / とりあえずこんな感じで様子見 とりあえずこんな感じで様子見 20 / 26

  21. / これから これから 21 / 26

  22. / サブボリュームを切りたい サブボリュームを切りたい スナップショットはサブボリューム単位で撮られる サブボリュームを細かく切ってスナップショットを制御したい 既にあるディレクトリをサブボリュームには出来ない.一旦退避 して作成してデータを移すなどする必要がありそう 別メディアで起動してサブボリュームを切りたいディレクトリ をmvしてサブボリュームを作成してサブボリューム以下にデー タを移動,/etc/fstabの編集?

    22 / 26
  23. / snapshotを一般ユーザで見えるよ snapshotを一般ユーザで見えるよ うにしたい うにしたい $ ls /.snapshots/61/snapshot$HOME ls: cannot

    access '/.snapshots/61/snapshot/home/matoken': Permission denied 23 / 26
  24. / 発表中に教えて貰ってできた! snapper設定変更 反映して確認 https://www2.slideshare.net/ftake/btrfs-snapper-samba/43 ALLOW_GROUPS="users" SYNC_ACL="yes" $ sudo service

    snapperd restart $ ls /.snapshots/200/snapshot/home/matoken/|wc -l 448 24 / 26
  25. / これまでに遭遇した問題 これまでに遭遇した問題 Btrfsでswap fileが作れないことを知らずに嵌まる – matoken’s meme Btrfsでdfで空き容量があるように見えるのに容量が無いと言われて readonlyにされてしまう

    – matoken’s meme Btrfsのbtrfs-transactionでioが100%になって困る – matoken’s meme 25 / 26
  26. / 奥付 奥付 発表 2020-11-14(土) 発表者 ライセンス CC BY-NC-SA 4.0

    小江戸らぐ 11月のオフな集まり(第220回)@オンライン(Zoom) Kenichiro Matohara(matoken) 26 / 26