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

Btrfsが壊れかけて困った話

 Btrfsが壊れかけて困った話

Kenichiro MATOHARA

February 05, 2022
Tweet

More Decks by Kenichiro MATOHARA

Other Decks in Technology

Transcript

  1. Btrfsが壊れかけて
    Btrfsが壊れかけて
    困った話
    困った話
    Kenichiro Matohara(matoken)
    1 / 20

    View full-size slide

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

    View full-size slide

  3. 最近
    最近
    四十肩
    スマホバッテリーがそろそろ限界
    OCN/iijmio/mineoでセールやってるな……
    OCNの . MNP+オプションで1円
    だしLineageOS対応してそうだし
    気になる


    Redmi 9T 1円 moto g31
    Android Enterprise Recommended
    3 / 20

    View full-size slide

  4. メインマシンの /(Btrfs) が壊れか
    メインマシンの /(Btrfs) が壊れか
    けて困った
    けて困った
    4 / 20

    View full-size slide

  5. 今回の環境
    今回の環境
    PC
    Lenovo ThinkPad T430s
    CPU Intel® Core™ i5-3320M/RAM 16GB/SATA S
    , FwRev=STAS1024)
    OS
    Debian sid amd64 + セルフビルドKernel 5.16.0
    ファイルシステム
    dm-crypt + Btrfs (v5.15.1), snapperスナップショット有効,zstd透過圧縮
    rw,noatime,nodiratime,compress=zstd:3,ssd,space_cac
    バックアップ
    デイリーバックアップ有り
    ZA1000CM10002
    5 / 20

    View full-size slide

  6. 序章
    序章
    一部のアプリケーションが Segmentation Falt で落ちるように
    apt upgrade でいくつかのパッケージが依存関係で失敗したりし
    ていたのでよく調べずに sid だしな,そのうち治るだろうと思って
    いた
    6 / 20

    View full-size slide

  7. はじまり
    はじまり
    再起動すると起動できなくなってしまう
    kernel 起動パラメータ init=/bin/sh 追加して起動してみると
    shred librarie が壊れているようで file too short とか言
    われる(0byte)
    壊れたpkgを apt install --reinstall しようと思ったら apt
    もコケる
    7 / 20

    View full-size slide

  8. とりあえずの復旧
    とりあえずの復旧
    testing のインストーラで起動(レスキューモード)

    壊れてそうな .deb を から手動ダウンロー
    ドして dpkg -i を何度か繰り返してとりあえず apt コマンドを使
    えるように
    壊れたライブラリを apt install --reinstall で起動するよ
    うになった
    Debian — Debian インストーラ
    http://packages.debian.org/
    8 / 20

    View full-size slide

  9. 原因
    原因
    なんで壊れたんだろう? と btrfs check をかけてみる
    大量のエラ
    ー……ファイルシステムがおかしそう?
    リモートにバックアップが取れていることを確認
    とりあえずほっとする
    初期化してしまったほうがいいだろうけどあまり機会がないので
    復旧を試みる
    9 / 20

    View full-size slide

  10. 復旧
    復旧
    10 / 20

    View full-size slide

  11. btrfs check --repair
    btrfs check --repair につ
    につ
    いて
    いて
    今回は幸い復旧できたけどいくつかのファイルは壊れていたし時間
    もかかるのでバックアップ重要
    btrfs-check(8)
    Warning
    Do not use --repair unless you are advised to do so by a
    developer or an experienced user, and then only after
    having accepted that no fsck successfully repair all types
    of filesystem corruption. Eg. some other software or
    hardware bugs can fatally damage a volume.
    11 / 20

    View full-size slide

  12. Debianシステムの修復
    Debianシステムの修復
    ファイルシステムは治ったようだけどシステムは壊れてそう
    debianの重要なパッケージ一覧を出して apt install --
    reinstall
    $ dpkg-query -Wf '${Package;-40}${Essential}\n' | grep yes | cut -f1 -d\ | \

    xargs deborphan -anp required --no-show-section | sed 's/^ *//g' | sort | uniq > essentialpkgs
    $ cat essentialpkgs.list | xargs sudo apt install --reinstall
    12 / 20

    View full-size slide

  13. 導入済みパッケージを導入し直す
    ~/.dpkg_—​
    get-selections はデイリーで実行している dpkg -
    -get-selections の結果
    $ grep $'\t'install$ ~/.dpkg_--get-selections | grep -v ^linux-image| awk '{print $1}' | xargs
    13 / 20

    View full-size slide

  14. データの確認
    データの確認
    $HOME , /etc をバックアップと比較して壊れているものを探す

    $ rsync -avcn $SOURCE $DIST
    chacheくらいだった
    14 / 20

    View full-size slide

  15. $HOME を / から分けてみる
    $HOME を / から分けてみる
    $HOME をサブボリュームに分けることにする(多少壊れにくくな
    る?)
    1 $HOME 退避
    2 $HOME 用サブボリューム作成
    3 サブボリュームマウント
    4 サブボリュームに $HOME のデータをコピー
    5 /etc/fstab を修正して $HOME をマウントするようにする
    # mv /mnt/home /mnt/home.org

    # btrfs subvolume create /mnt/home

    # mount -o noatime,nodiratime,compress=zstd:3,ssd,space_cache,subvol=/home /dev/mapper/t430s--v
    # cp -a /mnt/home.org /mnt/home

    # nano /mnt/etc/fstab

    # grep /home /mnt/etc/fstab

    /dev/mapper/t430s--vg-root /home btrfs noatime,nodiratime,ssd,compress=zstd,space_
    1
    2
    4
    5
    15 / 20

    View full-size slide

  16. snapshotクリア
    snapshotクリア
    btrfs df / btrfs du を比べると倍くらい違う?消えていないsnapshotが2つ
    あったので手動で削除……大きく容量が空いた.
    $ snapper --csvout list | grep -v ^config, | cut -f3 -d, | xargs -n1 sudo snapper delete
    16 / 20

    View full-size slide

  17. snapshot設定
    snapshot設定
    $HOMEもsnapshotを設定
    $ sudo cp /etc/snapper/configs/root /etc/snapper/configs/home

    $ sudo vi /etc/snapper/configs/home
    17 / 20

    View full-size slide

  18. まとめ
    まとめ
    Btrfs便利な機能多くて助かるけどたまに壊れる(4度目)壊れると直
    せるかは?
    今回は直せるかが気になったのでrepairを試みたけどなんやかんや1
    週間ほどかかった
    時間もかかるし初期化するのが近道
    一応治ったけどSecureErasesして再インストールかな?
    バックアップだいじ
    18 / 20

    View full-size slide

  19. 参考URL
    参考URL
    Welcome to BTRFS documentation! — BTRFS documentation
    btrfs-check(8)
    19 / 20

    View full-size slide

  20. 奥付
    奥付
    発表
    発表者
    利用ソフトウェア
    ライセンス
    CC BY-NC-SA 4.0
    LILO&東海道らぐオンラインミーティング 2022-02-05
    Kenichiro Matohara(matoken)
    Asciidoctor Reveal.js
    20 / 20

    View full-size slide