Mais conteúdo relacionado Semelhante a Btrfsの基礎 part1 機能編 (20) Btrfsの基礎 part1 機能編1. Copyright 2014 FUJITSU LIMITED
Btrfsの基礎
- part1. 機能編 -
2014年9月17日
Satoru Takeuchi
Linux Development Div.
Fujitsu LTD.
3. はじめに
前提知識
Linux上でXFS, ext4の使用経験あり
btreeの知識[1]
説明方針
設計(data構造とalgorithmの概要)の説明を重視
• それさえわかれば、codeの詳細は一目瞭然
• 一般的&重要な機能に絞って、簡単なものから一つずつ
一度にたくさん詰め込んで説明しない
調査に使用したkernel version
3.16
2 Copyright 2014 FUJITSU LIMITED
4. 概要
Linuxの次世代main streamになる予定のfile system
ZFSの影響を受けており、機能も類似(equalではない。UIも異なる)
主な特長
XFSやext4より高信頼な設計
• CoW形式のdata更新、checksum, RAID構成
XFSと同等のscalability(最大file/file system sizeは16EiB。XFSは8EiB)
• 性能は発展途上(改善中)
LVMのようなvolume management機能
• snapshot採取
• file systemへのpartition/deviceのonline追加/削除/置換
• LVMより運用が容易、かつ高速
3 Copyright 2014 FUJITSU LIMITED
5. 基本設計
中心技術
btreeを核とした媒体構造
Copy on Write(CoW)型のfile更新
既存dataの更新処理を例に、高信頼性を説明
比較対象: 一般的なoverride型のfile更新: ext4, XFSなどが採用
• 詳細は説明しないがmetadata journalingが有効とする
4 Copyright 2014 FUJITSU LIMITED
18. 実例: overwrite型 vs CoW型
1,000回の強制電源断testの結果[2]
Btrfs: 一切問題発生せず
ext4(ordered mode): metadata破壊によりdisk full状態に
• なぜかmetadataが壊れているが…
17 Copyright 2014 FUJITSU LIMITED
19. 高信頼化用の更なる仕組み
RAID構成
file system levelで実施
管理単位はbtreeのnode, およびdata extent(詳細は媒体構造編を参照)
checksum: 全metadata,dataのchecksumを管理
管理単位はRAID構成のときと同じ
read/write時&user指定時(scrub command発行時)に整合性check
不整合検出時の対処
• mirroringあり(RAID1, RAID10): 正しいchecksumを持つ別のdata copyを元に正し
いdataを復元
• mirroringなし: 不整合検出dataをfile systemから切り離し
18 Copyright 2014 FUJITSU LIMITED
22. 作成/mount
任意の個数のdeviceから作成可能
各deviceのsize, 性能、種類(HDD or SSD)は同程度のものにしておくほうが
無用なtroubleを回避可能
使用方法
単一deviceから作成: mkfs.btrfs [<options>] <device>
複数deviceから作成: mkfs.btrfs [<options>] <device list>
mount: mount -o <options> <device>
• mount時に指定したdevice listの中から任意のdeviceを指定可能
• 他のdeviceの情報は自動検出
21 Copyright 2014 FUJITSU LIMITED
23. 状態確認
file systemの様々な状態を確認
使い方
label, uuid, device構成情報など: btrfs filesystem show <path>
diskの空き領域: btrfs filesystem df <device> <path>
• 詳細は後述
• [注意] 通常のdf commandは使用不可(結果が信用できない)
device構成情報: btrfs device status <path>
22 Copyright 2014 FUJITSU LIMITED
25. 透過的data圧縮の流れ: write
24 Copyright 2014 FUJITSU LIMITED
user buffer storage
データ 圧縮後のデータデータ
1) データのcopy 2) 圧縮&書き込み
page cache
Userは圧縮の有無を認識しない
計算量は増加 storageへのデータ転送量縮小
=> I/O高速化
=> storage利用効率向上
26. 透過的data圧縮の流れ: read
25 Copyright 2014 FUJITSU LIMITED
user buffer storage
データ 圧縮後のデータデータ
2) データのcopy 1) 展開&読み出し
page cache
Userは圧縮の有無を認識しない
計算量は増加 storageへのデータ転送量縮小
=> I/O高速化
=> storage利用効率向上
27. SSD向け最適化
SSDの特性を考慮した動作論理に変更
使い方: mount optionによって指定
SSD向け最適化: <ssd|nossd> optionによって有効化/無効化
• 明に指定しなくてもmount時に自動検出可能
TRIM/discard: <discard|nodiscard> optionによって有効化/無効化
• 未使用領域をdeviceに通知し、容量削減&deviceの長寿命化
• SSD以外にも、VM imageやthin provisioning deviceの容量削減にも有用
• 性能劣化する場合もあるので、使用可否の判断には要性能測定
低速なSSD向け最適化: ssd_spread option(暗にssdも有効化される)
• 大きな領域から優先的に空き領域を獲得
• server向けのSSDの場合、controllerが優秀なので、多分不要
26 Copyright 2014 FUJITSU LIMITED
43. balance
device間でのdata格納量の平準化
性能特性の平準化を期待
device追加直後は、balanceを推奨
• 追加前から存在したdevice: dataが存在
• 追加したdevice: dataがほぼ存在しない(後述のsuper blockのみ)
balance中にumount, crashすると、次回mount時に再開
使い方
開始: btrfs balance start <path>
進捗確認: btrfs balance status <path>
中断: btrfs balance pause <path>
再開: btrfs balance resume <path>
中止: btrfs balance cancel <path>
42 Copyright 2014 FUJITSU LIMITED
51. subvolume
file system内に作成する、個別のfile systemとして
mountできる領域
Btrfsの様々な操作(後述のsnapshot, quota)はsubvolume単位で行う
bind mountとの違い
• Subvolumeごとに独立したinode namespaceを保持
• Subvolumeのmount前にfile system rootをmountしておく必要は無い
• 例: subvolumeをsystem volumeに設定可能
mount optionは共通(初回mountのものに合わせられる)
使い方
生成: btrfs subvolume create <path>
削除: btrfs subvolume delete <path>
全subvolumeの列挙: btrfs subvolume list <path>
特定subvolumeの情報表示: btrfs subvolume show <path>
mount: mount -o subvol=<subvol path> <path>
50 Copyright 2014 FUJITSU LIMITED
52. snapshot
root tree or subvolume(or snapshot)のcopy
subvolumeの一種。subvolumeに対するcommandを全て適用可能
更新時はCoWによって、更新したdataのみcopyされる
read onlyのsnapshotも作成可能
metadataだけのcopyなので、full copyに比べて高速に
作成可能
注意: backupとsnapshotは異なる
• 共有dataが壊れれば関連snapshotのdataは全て影響を受ける
使い方
生成: btrfs subvolume snapshot [-r] <src> <dest>
• -rを指定するとreadonly。指定しなければreadwrite
削除: btrfs subvolume delete <path>
51 Copyright 2014 FUJITSU LIMITED
61. quota
subvolume単位でstorageの使用量を制限
XFSのgroup/project quotaに類似
quota制限付きのsubvolumeをquota group(qgroup)と呼ぶ
qgroupの親子関係を作成可能
• 親qgroupの制限を子qgroupにも継承
• 注意: 親子関係はfile system tree上のsubvolumeの親子関係と独立
使い方
有効/無効: btrfs quota <enable|disable> # defaultはdisable
qgroupに制限値を設定: btrfs qgroup <size|none> <path>
全qgroupの列挙: btrfs qgroup show
qgroup間の親子関係を作成: btrfs qgroup assign <src> <dst> <path>
qgroup間の親子関係を削除: btrfs qgroup remove <src> <dst> <path>
60 Copyright 2014 FUJITSU LIMITED
63. RAID: 機能説明
file system levelのRAID
data, metadata両方について別々に指定
使用可能な構成
single: 冗長化, stripingなし
dup: 同じdeviceの中に2つcopy
• single device構成のmetadataの場合のみ使用可能
RAID0, RAID1, RAID10, RAID5, RAID6
• RAID1, RAID10: mirroring数はdevice数によらず2
• LVMの挙動(device数に応じてmirroring数を増加可能)と異なる
• RAID5/6: scrubとreplaceが使用不可
• 鋭意開発中、近日修正見込み
62 Copyright 2014 FUJITSU LIMITED
64. RAID: default値と設定方法
default値
単一device構成: data=single, metadata=dup(HDD) or single(SSD)
• SSDは、controllerによる同一内容blockのdedupによってdupが無意味な場合あり
複数device構成: data=RAID0, metadata=RAID1
使い方: mkfs.btrfsの optionに指定
metadata: -m <single|dup|raid0|raid1|raid10|raid5|raid6>
• dupは単一deviceの場合のみ指定可能
data: -d <single|raid0|raid1|raid10|raid5|raid6>
63 Copyright 2014 FUJITSU LIMITED
67. 前提知識: 復旧のために推奨される運用
通常運用: 定期的なbackup採取
kernel panic or file system不整合発生
File systemの復旧
1. 通常通りmountを試行。成功すれば完了。失敗すれば2へ
2. 「復旧時に使用するmount option」を試行。成功すれば完了。失敗すれば3へ
3. 「restore」or「修復機能」を試行
原因究明
• 「障害解析機能」を用いて原因究明と再発防止
66 Copyright 2014 FUJITSU LIMITED
68. backup/restore
file system levelのbackup,restore
ddやcp –aを使うよりも高速なbackupが可能
subvolume単位で採取可能
差分backup/restoreも可能
想定される用途
定期的にbackupを採取(full backup/週、差分backup/日)
file system不整合発生時にbackupからfile systemを復旧
使い方
backup採取: btrfs send <subvol>
• 通常は事前に採取したread only snapshotに対して実施
backupからfile systemを復元: btrfs receive <target mount point>
67 Copyright 2014 FUJITSU LIMITED
69. mount options
“skip_balance” option
仕掛中のbalance処理をmount時に再開しない
balanceのbugによる異常発生後のmountに有用
• これを指定しないと、再度同じbugによる問題が発生する可能性あり
“recovery” option
file system内部に持つbackup dataを使ってmountを試行
障害発生後のmount失敗時に使用
“degraded” option
RAID構成に必要な数のdeviceが存在しない場合に指定
特定deviceが壊れた際などに使用
mount後にdevice構成の修復が必要
68 Copyright 2014 FUJITSU LIMITED
70. 修復機能
file system の整合性をofflineでcheck&可能な限り修復
使い方
壊れたfile systemからfileを可能な限り復旧: btrfs restore <device>
壊れたsuper blockを復元: btrfs rescue super-recover <device>
壊れたchunk tree(後述)を復元: btrfs rescue chunk-recover <device>
file systemの整合性check&修復: btrfs check <device>
• 最後の手段。他の手段を使ってどうしても駄目なら使う
• backupがあれば、そこから復旧するほうが容易かつ確実
69 Copyright 2014 FUJITSU LIMITED
71. 障害解析用機能
kernel panic, file system不整合障害の原因究明に使用
使い方
metadata dump採取: btrfs-image <path> <dest>
• metadataのimageを採取、imageをBtrfs技術者に送付、技術者が解析
• data領域は採取しない
• file system全体のcopyよりも短時間で採取可能、省space
• data領域の障害は解析不能
kdump: kdumpのdocument参照(Btrfs固有機能ではない)
• system全体のmemory imageを採取
• kernel panic/hang up発生時の原因究明などに使用
metadataのtree構造を表示: btrfs-debug-tree <device>
superblockの情報を表示: btrfs-show-super <devlicelist>
指定extentのdeviceへのmap情報を表示: btrfs-map-logical –l <extent
number> <one of btrfsdevice>
• extentについては媒体構造編を参照
70 Copyright 2014 FUJITSU LIMITED
72. 参考文献
1. The Art of Computer Programming vol3. Donald Knuth
2. Linux Filesystem Analysis for IVI system. Mitsuharu Ito
http://events.linuxfoundation.org/sites/events/files/slides/linux_file_syste
m_analysis_for_IVI_systems.pdf
3. linux kernel source
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
4. Btrfs wiki
https://btrfs.wiki.kernel.org/index.php/Main_Page
5. BTRFS: The Linux B-Tree Filesystem. Ohad Rodeh, Josef
Bacik, and Chris Mason
http://domino.research.ibm.com/library/cyberdig.nsf/papers/6E1C5B6A1
B6EDD9885257A38006B6130/$File/rj10501.pdf
71 Copyright 2014 FUJITSU LIMITED