SlideShare a Scribd company logo
1 of 29
Download to read offline
Btrfsと戦ってきた
そいつは急にやってくる
楽しく
コーディング
 している時
Twitterでかっこいいこと
     言おうとした時
_人人人人人人人_
> Kernel Panic! <
 ̄Y^Y^Y^Y^Y^Y^Y ̄
_人人人人人人人_
> またBtrfsか!<
       ______
      /  \    /\ 頼む〜無事に再起動してくれ〜
    /  し (>)  (<)\
    | ∪    (__人__)  J | ________
    \  u   `⌒´   / | |          |
    ノ           \ | |          |

         ____
      /  \    ─\   チラッ
    /  し (>)  (●)\
    | ∪    (__人__)  J | ________
    \  u   `⌒´   / | |          |
    ノ           \ | |          |

    
       ______
      /  \    /\ 頼む〜無事に再起動してくれ〜
    /  し (>)  (<)\
    | ∪    (__人__)  J | ________
    \  u   `⌒´   / | |          |
    ノ           \ | |          |

         ____
      /  \    ─\   チラッ
    /  し (>)  (●)\
    | ∪    (__人__)  J | ________
    \  u   `⌒´   / | |          |
    ノ           \ | |          |

         ____
      /::::::─三三─\                     mountできない
    /:::::::: ( ○)三(○)\
    |::::::::::::::::::::(__人__)::::  | ________
     \:::::::::   |r┬-|  / | |          |
    ノ::::::::::::  `ー'´   \ | |          |
というわけで
ぼくとBtrfsとの戦いを
ふりかえってみたのだ
!!注意!!

  ここで出てくる事例は
   過去のものだから
いまもそうだとはかぎらないよ
    最近はあんまり
  クラッシュしてないし!
Case 0: btrfs-ino-cache
●
 btrfs-ino-cache がほぼ全部のIOを持っていく
●
 おかげでなにもかもがちょーおそい
btrfs-ino-cacheとは
●
    mount -o inode_cacheした時に走る
●
    「inodeをcacheする」kernel thread




     inodeのcacheってなんや?
inodeのわりあて
オブジェクトID(0〜(u64)-1)使用状況

reserved                  reserved




●
  先頭256個・最後256個は予約済み
●
  赤いところは使用中
●
  青いところはあいてる
inodeのわりあて
オブジェクトID(0〜(u64)-1)使用状況

reserved                  reserved




                   ここから使う
inodeのわりあて
オブジェクトID(0〜(u64)-1)使用状況

reserved                  reserved




                   次はここ
inodeのわりあて
オブジェクトID(0〜(u64)-1)使用状況

reserved                  reserved




ファイル作ろうとしたらENOSPC
inodeのわりあて
オブジェクトID(0〜(u64)-1)使用状況

reserved                  reserved




●
  空いているinodeのmap作る
●
  一番小さいところから使う

    だがしかし
    inode map作るのが重い
Case 0: 対策
●
    inode_cacheを使わない
●
    IOスケジューラの見直し
●
    ionice でなんとかかんとか?
●
    放置する
Case 1: mountできない
●
    原因
    –   カーネルのバグ
        ●
            とりあえず新旧のカーネルでmountしてみる
    –   root blockがおかしい
        ●
            -o recovery, -o ro, -o ro,recovery
    –   cacheがおかしい
        ●
            -o clear_cache
    –   Transaction logがおかしい
        ●
            btrfs-zero-log
-o recovery
●
    root blockがおかしい時に
    –   4つのroot backupを試す
    –   Transaction logを再生しない
    –   Cacheを削除する
        ●
            Space cache
        ●
            Inode cache
-o clear_cache
●
    cacheの読みこみまわりのエラー
●
    cacheを削除してしまう
btrfs-zero-log
こんなpanicの時:
? replay_one_dir_item+0xb5/0xb5 [btrfs]
? walk_log_tree+0x9c/0x19d [btrfs]
? btrfs_read_fs_root_no_radix+0x169/0x1a1 [btrfs]
? btrfs_recover_log_trees+0x195/0x29c [btrfs]
? replay_one_dir_item+0xb5/0xb5 [btrfs]
? btree_read_extent_buffer_pages+0x76/0xbc [btrfs]
? open_ctree+0xff6/0x132c [btrfs]
btrfs-zero-log
●
    btrfs-imageでバックアップ
●
    btrfs-zero-logでtransaction logを消してやる
●
    log消してるのでにおかしいところもあるかもね
Case 2: それでもmountできないんだよ(怒)

●
    あきらめよう
●
    あきらめよう
●
    あきらめてデータの確保に向かう
●
    btrfs-restore コマンド
    –   Read only mountできるなら
    –   rsync -axv --delete --ignore-errors
その他いろいろ戦闘歴
●
    btrfs-convertがSEGV
●
    metadataのサイズ大きくなりすぎ
    –   btrfs balance
●
    seek()失敗した時にlockとりっぱなし
●
    アクセスしたらblockするファイル
●
    削除しようとするとpanicおこすファイル
●
    quotaが壊れてる
●
    btrfsckでなにかがうまくいった記憶はなし
データ不整合にそなえる
●
    BtrFSでRAID1構成
●
    btrfs scrub
●
    checksumがおかしいものがあったら
    ペアから読みだして修正かけてくれる
銀の弾丸
銀の弾丸

 BtrFS以外に
バックアップを
  とっておけ
出典
●
    画像
    –   http://www.flickr.com/photos/hackny/62033011
        44/in/photostream/
    –   http://www.flickr.com/photos/rosauraochoa/39
        39487692/in/photostream/
●
    https://btrfs.wiki.kernel.org/index.php/M
    ain_Page

More Related Content

What's hot

Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミングSounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミングt-sin
 
とあるWeb企業でのDebianシステムの使い方。
とあるWeb企業でのDebianシステムの使い方。とあるWeb企業でのDebianシステムの使い方。
とあるWeb企業でのDebianシステムの使い方。Kouhei Maeda
 
One - Common Lispでもワンライナーしたい
One - Common LispでもワンライナーしたいOne - Common Lispでもワンライナーしたい
One - Common Lispでもワンライナーしたいt-sin
 
Firefox OS + Raspberry Pi
Firefox OS + Raspberry PiFirefox OS + Raspberry Pi
Firefox OS + Raspberry PiEnsekiTT
 
Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-t-sin
 
芸人を 目指すわけでは ないけれど…(n575)
芸人を 目指すわけでは ないけれど…(n575)芸人を 目指すわけでは ないけれど…(n575)
芸人を 目指すわけでは ないけれど…(n575)Masataka Kondo
 
本当は怖いデータ復元
本当は怖いデータ復元本当は怖いデータ復元
本当は怖いデータ復元f kasasagi
 
ファイルサーバ構築
ファイルサーバ構築ファイルサーバ構築
ファイルサーバ構築Takashi Noboru
 
DSIRNLP#3 LT: 辞書挟み込み型転置インデクスFIg4.5
DSIRNLP#3 LT: 辞書挟み込み型転置インデクスFIg4.5DSIRNLP#3 LT: 辞書挟み込み型転置インデクスFIg4.5
DSIRNLP#3 LT: 辞書挟み込み型転置インデクスFIg4.5sleepy_yoshi
 
Interactive Music II SuperCollider入門 3 - 音を混ぜる(Mix)、楽器を定義(SynthDef)
Interactive Music II SuperCollider入門 3 - 音を混ぜる(Mix)、楽器を定義(SynthDef)Interactive Music II SuperCollider入門 3 - 音を混ぜる(Mix)、楽器を定義(SynthDef)
Interactive Music II SuperCollider入門 3 - 音を混ぜる(Mix)、楽器を定義(SynthDef)Atsushi Tadokoro
 
20160827 第24回シェル芸勉強会LT Bash on Windows環境非破壊ハンズオン
20160827 第24回シェル芸勉強会LT Bash on Windows環境非破壊ハンズオン20160827 第24回シェル芸勉強会LT Bash on Windows環境非破壊ハンズオン
20160827 第24回シェル芸勉強会LT Bash on Windows環境非破壊ハンズオンkunst1080
 
ldapvi & python-ldap で stress-free life
ldapvi & python-ldap で stress-free lifeldapvi & python-ldap で stress-free life
ldapvi & python-ldap で stress-free lifeKouhei Maeda
 
本格的に始めるzsh
本格的に始めるzsh本格的に始めるzsh
本格的に始めるzshHideaki Miyake
 
Ctb57 with god7
Ctb57 with god7Ctb57 with god7
Ctb57 with god7kingtomo
 

What's hot (16)

Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミングSounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
 
とあるWeb企業でのDebianシステムの使い方。
とあるWeb企業でのDebianシステムの使い方。とあるWeb企業でのDebianシステムの使い方。
とあるWeb企業でのDebianシステムの使い方。
 
仮想記憶の構築法
仮想記憶の構築法仮想記憶の構築法
仮想記憶の構築法
 
Ext4 filesystem(2)
Ext4 filesystem(2)Ext4 filesystem(2)
Ext4 filesystem(2)
 
One - Common Lispでもワンライナーしたい
One - Common LispでもワンライナーしたいOne - Common Lispでもワンライナーしたい
One - Common Lispでもワンライナーしたい
 
Firefox OS + Raspberry Pi
Firefox OS + Raspberry PiFirefox OS + Raspberry Pi
Firefox OS + Raspberry Pi
 
Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-
 
芸人を 目指すわけでは ないけれど…(n575)
芸人を 目指すわけでは ないけれど…(n575)芸人を 目指すわけでは ないけれど…(n575)
芸人を 目指すわけでは ないけれど…(n575)
 
本当は怖いデータ復元
本当は怖いデータ復元本当は怖いデータ復元
本当は怖いデータ復元
 
ファイルサーバ構築
ファイルサーバ構築ファイルサーバ構築
ファイルサーバ構築
 
DSIRNLP#3 LT: 辞書挟み込み型転置インデクスFIg4.5
DSIRNLP#3 LT: 辞書挟み込み型転置インデクスFIg4.5DSIRNLP#3 LT: 辞書挟み込み型転置インデクスFIg4.5
DSIRNLP#3 LT: 辞書挟み込み型転置インデクスFIg4.5
 
Interactive Music II SuperCollider入門 3 - 音を混ぜる(Mix)、楽器を定義(SynthDef)
Interactive Music II SuperCollider入門 3 - 音を混ぜる(Mix)、楽器を定義(SynthDef)Interactive Music II SuperCollider入門 3 - 音を混ぜる(Mix)、楽器を定義(SynthDef)
Interactive Music II SuperCollider入門 3 - 音を混ぜる(Mix)、楽器を定義(SynthDef)
 
20160827 第24回シェル芸勉強会LT Bash on Windows環境非破壊ハンズオン
20160827 第24回シェル芸勉強会LT Bash on Windows環境非破壊ハンズオン20160827 第24回シェル芸勉強会LT Bash on Windows環境非破壊ハンズオン
20160827 第24回シェル芸勉強会LT Bash on Windows環境非破壊ハンズオン
 
ldapvi & python-ldap で stress-free life
ldapvi & python-ldap で stress-free lifeldapvi & python-ldap で stress-free life
ldapvi & python-ldap で stress-free life
 
本格的に始めるzsh
本格的に始めるzsh本格的に始めるzsh
本格的に始めるzsh
 
Ctb57 with god7
Ctb57 with god7Ctb57 with god7
Ctb57 with god7
 

Btrfs