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

ファイルシステムのデフラグ

 ファイルシステムのデフラグ

以下動画のスライドです。
https://youtu.be/6PMwhGAX9CQ

Satoru Takeuchi PRO

November 15, 2026

Transcript

9 slides
  1. はなすこと • • ファイルシステムは使い込むほどに同じファイル内のデータがブロックデバイス内 の複数の場所に断片化して性能が劣化していく 極端なケースがBtrfsにランダム書き込みを繰り返したとき ◦ • • その120

    コピーオンライト型ファイルシステムと ランダム書き込み この状況を改善するデフラグという機能を紹介 例としてランダム書き込みによって断片化したBtrfs上のファイルのデフラグをする 2
  2. 実験環境 • • • • OS: Ubuntu 26.04.1 x86_64 kernel:

    7.0.0-43-generic ディスク: HDD(SEAGATE ST3000DM001) ファイルシステム: $ mount | grep /mnt/ /dev/sda2 on /mnt/btrfs type btrfs … • ファイル: $ ls -lh /mnt/btrfs/test -rw-rw-r-- 1 sat sat 1.0G Nov 14 20:06 /mnt/btrfs/test $ xfs_io -c fiemap /mnt/btrfs/test /mnt/btrfs/test: 0: [0..2097151]: 8448000..10545151 3
  3. ランダム書き込みによるデータの断片化 $ sudo sysctl vm.drop_caches=3 vm.drop_caches = 3 $ dd

    if=/mnt/btrfs/test of=/dev/null … 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 7.87863 s, 136 MB/s $ fio --name=test --filename=/mnt/btrfs/test --rw=randwrite --bs=4k --size=64m --ioengine=sync --fsync=1 … $ xfs_io -c fiemap /mnt/btrfs/test /mnt/btrfs/test: 0: [0..7]: 10632456..10632463 1: [8..15]: 10633560..10633567 … 16335: [131064..131071]: 10552768..10552775 16336: [131072..2097151]: 8579072..10545151 $ sudo sysctl vm.drop_caches=3 vm.drop_caches = 3 $ dd if=/mnt/btrfs/test of=/dev/null … 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 66.5081 s, 16 MB/s 4
  4. btrfsでファイルをデフラグする方法 • btrfs filesystem defragmentコマンド 📝 btrfsコマンドは長いので省略して ”btrfs fi def”のように書ける

    ◦ • 特徴 ◦ ◦ ファイル/ディレクトリ単位で実行。再帰的に実行もできる コマンドはデフラグが終わったら完了 5
  5. 実行結果 $ btrfs fi def /mnt/btrfs/test $ xfs_io -c fiemap

    /mnt/btrfs/test /mnt/btrfs/test: 0: [0..62975]: 12642304..12705279 1: [62976..63487]: 14739456..14739967 2: [63488..115199]: 12705280..12756991 3: [115200..131071]: 14739968..14755839 4: [131072..2097151]: 8579072..10545151 $ sudo sysctl vm.drop_caches=3 vm.drop_caches = 3 $ dd if=/mnt/btrfs/test of=/dev/null … 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 8.08959 s, 133 MB/s 6
  6. btrfs filesystem defragmentコマンドの詳細 • 様々なオプションがある ◦ ◦ • -s, -l:

    ファイル内でデフラグする領域を指定する -t: サイズがnバイト以上の領域 (extent)はデフラグ対象にしない 内部的には雑に言うとファイルを前から順番に読み出してシーケンシャルに書いて いるだけなので、次のような難点がある ◦ ◦ ◦ ファイルサイズが大きいほど時間がかかる read only snapshotはデフラグできない 他のファイルとのデータ共有が解除される ▪ 📝 duperemoveコマンドで共有を復活されることもできる 7

More Decks by Satoru Takeuchi

Other Decks in Technology