Top Banner
Copyright 2014 FUJITSU LIMITED Btrfsの基礎 - part1. 機能編 - 2014917Satoru Takeuchi Linux Development Div. Fujitsu LTD.
73

Btrfsの基礎 part1 機能編

Dec 01, 2014

Download

Technology

This document is the basic introduction to Btrfs, the next generation linux file system. It covers Btrfs's basic concept and important features. It contains many figures to make it easy for readers to understand this file system.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Btrfsの基礎 part1 機能編

Copyright 2014 FUJITSU LIMITED

Btrfsの基礎- part1. 機能編 -

2014年9月17日Satoru Takeuchi

Linux Development Div.

Fujitsu LTD.

Page 2: Btrfsの基礎 part1 機能編

目次

はじめに

概要

基本設計

機能紹介

1 Copyright 2014 FUJITSU LIMITED

Page 3: Btrfsの基礎 part1 機能編

はじめに

前提知識 Linux上でXFS, ext4の使用経験あり

btreeの知識[1]

説明方針設計(data構造とalgorithmの概要)の説明を重視

• それさえわかれば、codeの詳細は一目瞭然

• 一般的&重要な機能に絞って、簡単なものから一つずつ

一度にたくさん詰め込んで説明しない

調査に使用したkernel version 3.16

2 Copyright 2014 FUJITSU LIMITED

Page 4: Btrfsの基礎 part1 機能編

概要

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

Page 5: Btrfsの基礎 part1 機能編

基本設計

中心技術 btreeを核とした媒体構造

Copy on Write(CoW)型のfile更新

既存dataの更新処理を例に、高信頼性を説明比較対象: 一般的なoverride型のfile更新: ext4, XFSなどが採用

• 詳細は説明しないがmetadata journalingが有効とする

4 Copyright 2014 FUJITSU LIMITED

Page 6: Btrfsの基礎 part1 機能編

やりたいこと

注意: 以下はあくまで概念図。正確なdata構造とは異なる(これ以降の図も同様)

5 Copyright 2014 FUJITSU LIMITED

この2つのdataを更新したい

Page 7: Btrfsの基礎 part1 機能編

やりたいこと: 付随作業

6 Copyright 2014 FUJITSU LIMITED

metadata

data

この2つのdataを更新したい関連するmetadataも

要更新

Page 8: Btrfsの基礎 part1 機能編

override型: 更新前の状態

7 Copyright 2014 FUJITSU LIMITED

metadata

data

この2つのdataを更新したい

Page 9: Btrfsの基礎 part1 機能編

override型: 更新

8 Copyright 2014 FUJITSU LIMITED

metadata

data

既存dataを上書き(override)して更新

Page 10: Btrfsの基礎 part1 機能編

override型: 更新中の障害発生

ここでkernel panicが発生したらどうなるか?

9 Copyright 2014 FUJITSU LIMITED

metadata

data

更新済

未更新

Page 11: Btrfsの基礎 part1 機能編

override型: 障害発生後の復旧

metadata: journalingによって更新前後いずれかの整合性のとれた状態を保証

data: 更新中の中途半端な状態になりうる

10 Copyright 2014 FUJITSU LIMITED

metadata

data

更新前の状態

更新中の中途半端な状態

Page 12: Btrfsの基礎 part1 機能編

CoW型: 更新前の状態

11 Copyright 2014 FUJITSU LIMITED

metadata

data

この2つのdataを更新したい関連するmetadataも

要更新

Page 13: Btrfsの基礎 part1 機能編

CoW型: 更新用copyの作成

まず変更予定sub treeのcopyを作成 root nodeを除く

12 Copyright 2014 FUJITSU LIMITED

Page 14: Btrfsの基礎 part1 機能編

CoW型: copyを更新

copyした領域を更新

13 Copyright 2014 FUJITSU LIMITED

Page 15: Btrfsの基礎 part1 機能編

CoW型: pointer張り替え

root nodeのpointerを張り替えれば終了

参照されなくなった古いsub treeは後ほど非同期に廃棄

14 Copyright 2014 FUJITSU LIMITED

Page 16: Btrfsの基礎 part1 機能編

CoW型: 更新中の障害発生

ここでkernel panicが発生したらどうなるか?

15 Copyright 2014 FUJITSU LIMITED

Page 17: Btrfsの基礎 part1 機能編

CoW型: 障害発生後の復旧

元のtree構造は全く変化なし data, metadata共に整合性を保証

作成途中のsub treeは後ほど非同期に廃棄

16 Copyright 2014 FUJITSU LIMITED

後で捨てる

元の状態

Page 18: Btrfsの基礎 part1 機能編

実例: overwrite型 vs CoW型

1,000回の強制電源断testの結果[2] Btrfs: 一切問題発生せず

ext4(ordered mode): metadata破壊によりdisk full状態に

• なぜかmetadataが壊れているが…

17 Copyright 2014 FUJITSU LIMITED

Page 19: Btrfsの基礎 part1 機能編

高信頼化用の更なる仕組み

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

Page 20: Btrfsの基礎 part1 機能編

機能説明

次のcategoryに分けて説明基本機能

volume管理機能

耐障害機能

復旧用機能

重要な機能に絞って説明詳細はmanを参照

19 Copyright 2014 FUJITSU LIMITED

Page 21: Btrfsの基礎 part1 機能編

基本機能

作成/mount

状態確認

透過的data圧縮

SSD向け最適化

20 Copyright 2014 FUJITSU LIMITED

Page 22: Btrfsの基礎 part1 機能編

作成/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

Page 23: Btrfsの基礎 part1 機能編

状態確認

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

Page 24: Btrfsの基礎 part1 機能編

透過的data圧縮

storageへのI/O前の圧縮/伸張によりI/O高速化&storage使用量削減CPU intensiveなsystemよりI/O intensiveなsystemで真価を発揮

組み込みCPUなどの低速なCPUでは性能劣化の可能性も

適用可否の判断には要性能測定

使用できるmode no(default), lzo, zlib: 右側ほど圧縮に長時間を要するが、高圧縮率

使用方法(file system全体): mount optionにより指定 compress=<lzo|zlib>: 圧縮率が悪ければ圧縮しない

compress-force=<lzo|zlib>: 圧縮率が悪くても強制圧縮

使用方法(個々のfile): chattrにより指定

23 Copyright 2014 FUJITSU LIMITED

Page 25: Btrfsの基礎 part1 機能編

透過的data圧縮の流れ: write

24 Copyright 2014 FUJITSU LIMITED

user buffer storage

データ 圧縮後のデータデータ

1) データのcopy 2) 圧縮&書き込み

page cache

Userは圧縮の有無を認識しない

計算量は増加 storageへのデータ転送量縮小=> I/O高速化=> storage利用効率向上

Page 26: Btrfsの基礎 part1 機能編

透過的data圧縮の流れ: read

25 Copyright 2014 FUJITSU LIMITED

user buffer storage

データ 圧縮後のデータデータ

2) データのcopy 1) 展開&読み出し

page cache

Userは圧縮の有無を認識しない

計算量は増加 storageへのデータ転送量縮小=> I/O高速化=> storage利用効率向上

Page 27: Btrfsの基礎 part1 機能編

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

Page 28: Btrfsの基礎 part1 機能編

volume管理機能

device追加/削除/置換

balance

subvolume

snapshot

quota

27 Copyright 2014 FUJITSU LIMITED

Page 29: Btrfsの基礎 part1 機能編

device追加/削除/置換

既存のbtrfsにonlineでdeviceを追加/削除/置換注意: 削除時はbtree構造の再構成処理(balance処理。後述)が強制動作

使い方追加: btrfs device add <device> <path>

削除: btrfs device delete <device> <path>

置換: <old>のdataを<new>にcopy後、treeのpointerを切り替え

開始: btrfs replace start <old> <new> <path>

進捗確認: btrfs replace status <path>

中止: btrfs replace cancel <path>

28 Copyright 2014 FUJITSU LIMITED

Page 30: Btrfsの基礎 part1 機能編

追加処理の概念図

初期状態: /dev/sda, /dev/sdbから成るfile systemmount point: /btrfs/mnt/pnt

29 Copyright 2014 FUJITSU LIMITED

/dev/sda /dev/sdb

Btrfsのvolume全体

Page 31: Btrfsの基礎 part1 機能編

device追加commandの発行

Btrfsのvolumeに/dev/sdcを追加 command: btrfs device add /dev/sdc /btrfs/mnt/pnt

30 Copyright 2014 FUJITSU LIMITED

/dev/sda /dev/sdb

Btrfsのvolume全体

/dev/sdc

Page 32: Btrfsの基礎 part1 機能編

新規deviceを使用

新規領域は、次回書き込み発生時から使用

31 Copyright 2014 FUJITSU LIMITED

/dev/sda /dev/sdb

Btrfsのvolume全体

/dev/sdc

例: 新規file作成

Page 33: Btrfsの基礎 part1 機能編

削除処理の概念図

初期状態: /dev/sda, /dev/sdb, /dev/sdc から成るBtrfsmount point: /btrfs/mnt/pnt

32 Copyright 2014 FUJITSU LIMITED

/dev/sda /dev/sdb

Btrfsのvolume全体

/dev/sdc

Page 34: Btrfsの基礎 part1 機能編

device削除commandの発行

Btrfsのvolumeから/dev/sdcを削除 command: btrfs device delete /dev/sdc

33 Copyright 2014 FUJITSU LIMITED

/dev/sda /dev/sdb

Btrfsのvolume全体

/dev/sdc

これを削除

Page 35: Btrfsの基礎 part1 機能編

削除deviceのdata copy

/dev/sdc内のdataをすべて、/dev/sdaか/dev/sdcにcopy(後述のbalance処理)

34 Copyright 2014 FUJITSU LIMITED

/dev/sda /dev/sdb

Btrfsのvolume全体

/dev/sdc

copy

Page 36: Btrfsの基礎 part1 機能編

pointer張り替え

削除対象deviceからその他deviceにpointerを張り替え

35 Copyright 2014 FUJITSU LIMITED

/dev/sda /dev/sdb

Btrfsのvolume全体

/dev/sdc

pointer張り替え

Page 37: Btrfsの基礎 part1 機能編

削除deviceの切り離し

削除deviceをBtrfsのvolumeから切り離せば終了途中で失敗しても元のtreeはそのまま残っているので問題なし

36 Copyright 2014 FUJITSU LIMITED

/dev/sda /dev/sdb

Btrfsのvolume全体

/dev/sdc

Page 38: Btrfsの基礎 part1 機能編

置換処理の概念図

初期状態: /dev/sda, /dev/sdbから成るfile systemmount point: /btrfs/mnt/pnt

37 Copyright 2014 FUJITSU LIMITED

/dev/sda /dev/sdb

Btrfsのvolume全体

Page 39: Btrfsの基礎 part1 機能編

device置換commandの発行

Btrfsのvolumeの/dev/sdbを/dev/sdcに置換 command: btrfs device replace /dev/sdb /dev/sdc /btrfs/mnt/pnt

38 Copyright 2014 FUJITSU LIMITED

/dev/sda /dev/sdb

Btrfsのvolume全体

/dev/sdc

Page 40: Btrfsの基礎 part1 機能編

置換deviceのdataをcopy

/dev/sdb内のsub treeを/dev/sdcにcopy

39 Copyright 2014 FUJITSU LIMITED

/dev/sda /dev/sdb

Btrfsのvolume全体

/dev/sdc

subtreeをcopy

Page 41: Btrfsの基礎 part1 機能編

pointerの張り替え

置換元deviceへのpointerを置換先deviceに張り替え

40 Copyright 2014 FUJITSU LIMITED

/dev/sda /dev/sdb

Btrfsのvolume全体

/dev/sdc張り替え

Page 42: Btrfsの基礎 part1 機能編

置換元deviceの切り離し

これで完了途中で失敗しても、元のtreeはそのまま残っているので問題なし

41 Copyright 2014 FUJITSU LIMITED

/dev/sda

Btrfsのvolume全体

/dev/sdc

Page 43: Btrfsの基礎 part1 機能編

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

Page 44: Btrfsの基礎 part1 機能編

balanceの概念図

/dev/sda, /dev/sdbから成るBtrfsへの/dev/sdc追加直後mount pointは/btrfs/mnt/pnt

43 Copyright 2014 FUJITSU LIMITED

/dev/sda /dev/sdb

Btrfsのvolume全体

/dev/sdc

• 全く使用していない• 性能ばらつき発生の可能性あり

Page 45: Btrfsの基礎 part1 機能編

balance commandの発行

Btrfsのtree構造不均衡を解消 command: btrfs balance start /btrfs/mnt/pnt

44 Copyright 2014 FUJITSU LIMITED

/dev/sda /dev/sdb

Btrfsのvolume全体

/dev/sdc

Page 46: Btrfsの基礎 part1 機能編

dataのcopy

全deviceのdata使用量がbalanceするよう、balance後のtreeを構築

45 Copyright 2014 FUJITSU LIMITED

/dev/sda /dev/sdb

Btrfsのvolume全体

/dev/sdc

copy

Page 47: Btrfsの基礎 part1 機能編

pointerの張り替え

46 Copyright 2014 FUJITSU LIMITED

/dev/sda /dev/sdb

Btrfsのvolume全体

/dev/sdc

張り替え

Page 48: Btrfsの基礎 part1 機能編

data copy(繰り返し)

balance完了していなければ、同様の処理を繰り返す

47 Copyright 2014 FUJITSU LIMITED

/dev/sda /dev/sdb

Btrfsのvolume全体

/dev/sdc

copy

Page 49: Btrfsの基礎 part1 機能編

pointer張り替え(繰り返し)

48 Copyright 2014 FUJITSU LIMITED

/dev/sda /dev/sdb

Btrfsのvolume全体

/dev/sdc

張り替え

Page 50: Btrfsの基礎 part1 機能編

balanceの完了

device間のdata量が均衡すれば、終了途中で失敗しても中途半端な状態は見えない

49 Copyright 2014 FUJITSU LIMITED

/dev/sda /dev/sdb

Btrfsのvolume全体

/dev/sdc

後で解放 後で解放

Page 51: Btrfsの基礎 part1 機能編

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

Page 52: Btrfsの基礎 part1 機能編

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

Page 53: Btrfsの基礎 part1 機能編

snapshotの概念図

初期状態: 以下のようなfile system treeが存在mount point: /btrfs/mnt/pnt

pwd: 同上

52 Copyright 2014 FUJITSU LIMITED

metadata

data

file systemのroot

subvolume “foo”のroot

Page 54: Btrfsの基礎 part1 機能編

snapshot採取command

コマンド: btrfs subvolume snapshot foo bar

53 Copyright 2014 FUJITSU LIMITED

ここ(foo)のsnapshotを採取したい

Page 55: Btrfsの基礎 part1 機能編

metadataのcopy

fooのmetadataをcopy

54 Copyright 2014 FUJITSU LIMITED

copy

Page 56: Btrfsの基礎 part1 機能編

pointerを張る

copy先dataからfooのdataへのpointerを張る

55 Copyright 2014 FUJITSU LIMITED

Page 57: Btrfsの基礎 part1 機能編

file system treeからのpointerを張る

file system treeのrootからbarへのpointerを張り、完了 data copyは不要なので、通常のcopyよりも高速

56 Copyright 2014 FUJITSU LIMITED

以後”/bar”として認識される

Page 58: Btrfsの基礎 part1 機能編

snapshot更新時の挙動

例: /bar以下のfileのdataを更新

57 Copyright 2014 FUJITSU LIMITED

/

/foo /bar

ここを更新

Page 59: Btrfsの基礎 part1 機能編

snapshot更新時の挙動: CoW

更新領域のみcopy, 更新、pointer張り替え元subvolume(foo)には影響なし

58 Copyright 2014 FUJITSU LIMITED

copy

張り替え

/

/foo /bar

Page 60: Btrfsの基礎 part1 機能編

file単位のsnapshot

subvolume単位ではなくfile単位のsnapshotを作成可能新たにinodeを作成

• dataを共有、metadataは新規作成

• data更新時はCoWにより、更新した領域だけ新規copyを作成

使い方: 同じsubvolume内にあることが基本作成: cp --reflink <src> <dst>

59 Copyright 2014 FUJITSU LIMITED

Page 61: Btrfsの基礎 part1 機能編

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

Page 62: Btrfsの基礎 part1 機能編

耐障害機能

RAID

data整合性check&修正

61 Copyright 2014 FUJITSU LIMITED

Page 63: Btrfsの基礎 part1 機能編

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

Page 64: Btrfsの基礎 part1 機能編

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

Page 65: Btrfsの基礎 part1 機能編

data整合性check&修正

全fileのdata/metadataを走査して、checksumの整合性check

mirroringあり: data修復

mirroringなし: file systemから該当dataを切り離し

使い方開始: btrfs scrub start <path>

進捗確認: btrfs scrub status <path>

停止: btrfs scrub cancel <path>

再開: btrfs scrub resume <path>

64 Copyright 2014 FUJITSU LIMITED

Page 66: Btrfsの基礎 part1 機能編

復旧用機能

backup/restore

mount options

修復機能

障害解析機能

65 Copyright 2014 FUJITSU LIMITED

Page 67: Btrfsの基礎 part1 機能編

前提知識: 復旧のために推奨される運用

通常運用: 定期的なbackup採取

kernel panic or file system不整合発生 File systemの復旧

1. 通常通りmountを試行。成功すれば完了。失敗すれば2へ

2. 「復旧時に使用するmount option」を試行。成功すれば完了。失敗すれば3へ

3. 「restore」or「修復機能」を試行

原因究明

• 「障害解析機能」を用いて原因究明と再発防止

66 Copyright 2014 FUJITSU LIMITED

Page 68: Btrfsの基礎 part1 機能編

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

Page 69: Btrfsの基礎 part1 機能編

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

Page 70: Btrfsの基礎 part1 機能編

修復機能

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

Page 71: Btrfsの基礎 part1 機能編

障害解析用機能

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

Page 72: Btrfsの基礎 part1 機能編

参考文献

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_system_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/6E1C5B6A1B6EDD9885257A38006B6130/$File/rj10501.pdf

71 Copyright 2014 FUJITSU LIMITED

Page 73: Btrfsの基礎 part1 機能編

Copyright 2014 FUJITSU LIMITED72