• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

btrfs

date: 2020-08-09 excerpt: btrfs

tag: btrfslinux


btrfs

  • 現状、最もアドホックな分析やデータレークで安定するfilesystem
  • inodeが大量に必要なフォーマット等で安定性が高い
    • 5chやツイッターのデータを扱うような場合

install

ubuntu, debian

$ sudo apt install btrfs-progs

基本的な操作

format filesystem

$ sudo mkfs -t btrfs -f /dev/<sdx>
  • -f; すでに他のファイルシステムでフォーマットされているときに必要

repair format filesystem

$ sudo btrfs check --repair --force /dev/<sdx>
  • これで治らない場合、ディスクが故障している可能性がある

空き容量の確認

$ sudo btrfs filesystem show /dev/<sdx>

または

$ btrfs filesystem df ./<mount-point>

デフラグ

$ sudo btrfs filesystem defragment -r -v <mount_dir>

デフラグと圧縮

# lzoアルゴリズムで圧縮する場合(高圧縮率)
$ sudo btrfs filesystem defragment -r -v -clzo <mount_dir>
# glibで圧縮する場合(高速度)
$ sudo btrfs filesystem defragment -r -v -czlib <mount_dir>

ext4ディスクをbtrfsに変換する

$ sudo btrfs-convert /dev/<sdx>
create btrfs filesystem:
        blocksize: 4096
        nodesize:  16384
        features:  extref, skinny-metadata (default)
        checksum:  crc32c
free space report:
        total:     1000204886016
        free:      892787671040 (89.26%)
creating ext2 image file
...
  • ext2でスナップショットを作成する必要があるらしく時間がかかる(1TBのSSDで5~6時間程度)

fstabにマウントルールを書く

具体例

UUID=58455548-bafc-4750-b949-fc098e95b264 /mnt/nvme2n1            btrfs   compress=lzo,noatime,autodefrag  0       0
  • compress=lzo
    • lzoによる圧縮を有効にする
  • noatime
    • アクセスによってタイムスタンプを更新しない
  • autodefrag
    • 自動でデフラグを有効にする

サブボリュームの使い方

概要

  • btrfsでフォーマットされたディスクに対してディレクトリを作るような操作でマウント可能なボリュームを切り出す機能

具体的な操作

サブボリュームの作成

$ sudo btrfs subvolume create <sv-name>

サブボリュームのパラメータの確認

$ sudo btrfs subvolume show <sv-name>
<sv-name>
        Name:                   <sv-name>
        UUID:                   7a5be655-2329-024a-a24a-9fa93bfde24c
        Parent UUID:            -
        Received UUID:          -
        Creation time:          2021-12-11 21:31:41 +0900
        Subvolume ID:           796
        Generation:             11310
        Gen at creation:        11302
        Parent ID:              5
        Top level ID:           5
        Flags:                  -
        Snapshot(s):

サブボリュームを適当な場所にマウント

$ sudo mount /dev/<サブボリュームを含むディスク> -o subvol=<sv-name> <target-mount-point>

トラブルシューティング

ディスクフルに近く、ディスクへの読み書きが遅い

原因

  • metadataの使用量が100%に近いことに起因する
$ btrfs fi df ./nvme2n1
Data, single: total=840.50GiB, used=815.00GiB
System, single: total=4.00MiB, used=128.00KiB
Metadata, single: total=91.01GiB, used=90.49GiB
GlobalReserve, single: total=512.00MiB, used=209.62MiB

対応

  • 様々なコマンドを実行したがあまり効果がなかった
  • metadataを増やすのが一つの解決策であるが、1 diskの場合、難しい
  • roでマウントして違うディスクにデータを対比させてフォーマットし直すのが現実的な解決

参考

  • How to Create and Mount Btrfs Subvolumes
  • Btrfs


btrfslinux Share Tweet