Btrfs ͷػೳɾಛBtrfsͬͯͲΜͳϑΝΠϧγεςϜ?2013-06-14 1 / 51
View Slide
Btrfs ͷػೳɾಛ2013-06-14 2 / 51
Btrfs ͷػೳɾಛ.. Copy On Write2013-06-14 3 / 51
Btrfs ͷػೳɾಛ.. Journal2013-06-14 4 / 51
Btrfs ͷػೳɾಛ2013-06-14 5 / 51
Btrfs ͷػೳɾಛ2013-06-14 6 / 51
Btrfs ͷػೳɾಛ.. Journal ͷऑʮδϟʔφϧʯͱʮຊମʯͱೋճॻ͔ͳ͚Ε͍͚ͳ͍σʔλδϟʔφϧԽ͢Δͷޮ͕ѱ͍ϝλσʔλͳΒ͍͚Δ2013-06-14 7 / 51
Btrfs ͷػೳɾಛ2013-06-14 8 / 51
Btrfs ͷػೳɾಛ.. Copy On WriteҰճ͔͠ॻ͔ͳ͍͍ͯ͘σʔλɾϝλσʔλ྆ํͷ߹ੑΛอͭͷʹ͑Δ2013-06-14 9 / 51
Btrfs ͷػೳɾಛ..εφοϓγϣοτ2013-06-14 10 / 51
Btrfs ͷػೳɾಛ..σϑϥά2013-06-14 11 / 51
Btrfs ͷػೳɾಛ.. QuotaQGroup ͱݺΕΔಛघͳ quotaεφοϓγϣοτ͕͋ΔͷͰʮڞ༗σʔλʯ͕ଘࡏ͢ΔʮશମͷαΠζʯͱʮڞ༗͞Ε͍ͯͳ͍αΠζʯʹΑΔ੍ݶ͕Ͱ͖Δڈͷ Software Design10 ݄߸ʹࡌͬͯ·͢2013-06-14 12 / 51
Btrfs ͷػೳɾಛ.. Ext2/3 ͔Βͷ convertext2/3 ͷσʔλ͕ͦͷ··มͰ͖·͢ؾʹ͍Βͳ͚Εݩʹͤ·͢2013-06-14 13 / 51
Btrfs ͷػೳɾಛ..ͦͷଞ16EiB ·Ͱ͑Δ (XFS ͷ 2 ഒ!)checksum ͕͋Δ͔ΒϒϩοΫͷ߹ੑνΣοΫ OK!ಁաతѹॖͰ༰ྔઅ!RAID Ͱ৴པੑ্!send/receive ͰޮతͳόοΫΞοϓ!Hot add/remove ͰΒ͘Β͘σΟεΫަ!dedup Ͱॏෳഉআ!SSD ༻࠷దԽ͋ΔΑ!2013-06-14 14 / 51
Btrfs ͷػೳɾಛ..কདྷతʹॻ͖͜Έͱಉ࣌ʹࣗಈ deduphot data tracking ͰΑ͘ΞΫηε͢ΔϑΝΠϧΛ SSD ʹΩϟογϡ!fsck?2013-06-14 15 / 51
Btrfs ͷػೳɾಛ..͍ͨ͘ͳ͖ͬͯͨͰ͠ΐ?2013-06-14 16 / 51
B .. B Btrfs ͷ΄ͱΜͲ͍ͨΔͱ͜ΖͰΘΕΔσʔλߏ͜Ε͕Θ͔Βͳ͍ͱ Btrfs ͕Θ͔Βͳ͍ͳΜͱ͍ͬͯ “BtrFS” = “B-Tree File System” Ͱ͔͢Βͳ!2013-06-14 17 / 51
B ..ೋ୳ࡧ2013-06-14 18 / 51
B .. B 2013-06-14 19 / 51
B .. B ͷૠೖ2013-06-14 20 / 51
B ..ׂ2013-06-14 21 / 51
B .. CoW ૠೖ2013-06-14 22 / 51
B 2013-06-14 23 / 51
B 2013-06-14 24 / 51
B 2013-06-14 25 / 51
B 2013-06-14 26 / 51
B 2013-06-14 27 / 51
B 2013-06-14 28 / 51
Btrfs ͷ.. Btrfs ͷ B KeyΦϒδΣΫτ IDλΠϓΦϑηοτϊʔυͱϦʔϑҰ൪Լ͕ϦʔϑɺΓ͕ΛϊʔυϦʔϑʹΩʔʹରԠ͢Δσʔλ͕อ͞ΕΔ2013-06-14 29 / 51
Btrfs ͷ2013-06-14 30 / 51
Btrfs ͷ..༷ʑͳRoot treeFS treeextent treechunk treedevice treeCSum tree2013-06-14 31 / 51
Btrfs ͷ.. Root Treeجຊͷ!ଞͷͷ root Λอ࣋αϒϘϦϡʔϜߏͷऔಘ2013-06-14 32 / 51
Btrfs ͷ.. FS TreeαϒϘϦϡʔϜɾεφοϓγϣοτ͝ͱʹ FS tree ͷ root ͕͋ΔσΟϨΫτϦߏi-node ใϑΝΠϧσʔλҐஔ (extent address)2013-06-14 33 / 51
Btrfs ͷ.. chunk ͱ extent2013-06-14 34 / 51
Btrfs ͷ.. device treeɾCSum treedevice treeBtrfs ʹొ͞Ε͍ͯΔσόΠεͷཧCSum tree4KB ͝ͱͷ checksum2013-06-14 35 / 51
Btrfs ͷ..୳ͯ͠ΈΑ͏2013-06-14 36 / 51
bootstrapBtrfs ͷ tree ϑΝΠϧશͯ extent address(ཧΞυϨε) ͰΞΫηεRoot tree extent address ͰΞΫηε͞ΕΔchunk tree ࣗͲ͏ͬͯ࠷ॳͷ extent address ΛཧΞυϨεʹϚοϐϯά͢Δͷ?2013-06-14 37 / 51
bootstrap.. superblockbtrfs Ͱ།ҰཧతʹΞυϨε͕ܾ·͍ͬͯΔύʔςΟγϣϯ ઌ಄͔Β 6410KiB, 6410MiB, 25610GiB, 1PiBroot ͷ extent addressroot treechunk treesystem chunk ͷ chunk ใchunk tree ͷϊʔυ, Ϧʔϑ system chunk ͔ΒׂΓͯΒΕΔ2013-06-14 38 / 51
bootstrap.. system chunk2013-06-14 39 / 51
bootstrap2013-06-14 40 / 51
࠷ۙͷ͜ͱ࠷ޙʹ͜ͷ 1 ݄͙Β͍;Έ·ͬͯ͘Δ assert ʹ͍ͭͯ͠·͢2013-06-14 41 / 51
࠷ۙͷ͜ͱ.. dump[42604.796633] BTRFS assertion failed: !memcmp_extent_buffer(b, &disk_key, offsetof(struct btrfs_leaf, items[0].key),sizeof(disk_key)), file: fs/btrfs/ctree.c, line: 24442013-06-14 42 / 51
࠷ۙͷ͜ͱ..Ωʔ୳ࡧͷ࠷దԽ2013-06-14 43 / 51
࠷ۙͷ͜ͱ.. snapshot aware defrag2013-06-14 44 / 51
࠷ۙͷ͜ͱ2013-06-14 45 / 51
࠷ۙͷ͜ͱ.. tree mod logB-tree ͷมߋ࣌ʹมߋલʹͲ͏͍͏͕ೖ͍͔ͬͯͨΛهtransaction ͝ͱʹϦηοτ͞ΕΔϝϞϦ্͚ͩͰσΟεΫʹॻ͔Εͳ͍͜ΕͰʮੲͷ B-treeʯΛͱΓ͕ͩͦ͢Ε͕όάͬͯΔ?2013-06-14 46 / 51
࠷ۙͷ͜ͱ..ݪҼʜͳΜͰͩΖ͏?2013-06-14 47 / 51
࠷ۙͷ͜ͱ·͋ͱΓ͋͑ͣʮࣗಈσϑϥάʯ͓͚ͬͯ (σϑΥϧτ:Φϑ) ͍͍ͱࢥ͏Α?2013-06-14 48 / 51
࠷ۙͷ͜ͱ..͓͠·͍2013-06-14 49 / 51
ϦϯΫ..ࢀߟจݙhttps://btrfs.wiki.kernel.org/https://events.linuxfoundation.org/sites/events/files/slides/LinuxCon_2013_NA_Eckermann_Filesystems_btrfs.pdfhttp://people.redhat.com/lczerner/files/btrfs_lczerner.pdfhttps://www.usenix.org/legacy/event/lsf07/tech/rodeh.pdf2013-06-14 50 / 51
ϦϯΫ..ը૾http://www.flickr.com/photos/artofphotography-ramsner/9592744354http://www.flickr.com/photos/surferbill/2506950772/http://www.flickr.com/photos/rore/1304728223/http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Binary_search_tree.svghttp://www.flickr.com/photos/protohiro/85504626/http://www.flickr.com/photos/rubyji/74176893/http://www.flickr.com/photos/rore/1304728223/http://www.flickr.com/photos/dolfiedream/5060030894/2013-06-14 51 / 51