SlideShare a Scribd company logo
1 of 10
LVMのスナップショット機能で
GITLABのバックアップを取得する
WHO AM I ?
牧 俊男(Toshio Maki)
Twitter:@Kirika_K2
GitHub: @kirikak2
• とあるSIerで、社内の開発基盤を見てます
• Ruby、時々golang
• GitLabはgitorious統合前ぐらいから使ってます
WHAT'S SNAPSHOT?
• GitLab内のGitリポジトリが多いほど、標準のバックアップス
クリプトは遅くなる
• Gitlab Backupのドキュメントには「Alternative backup
strategies」として、Amazon EBSのスナップショット機能を使
う方法やLVMのスナップショット機能を使う方法もある、と
紹介されている
• 今回GitLab.comはこのLVMによるスナップショットを使って
復旧した、と書かれていたため、掘り下げて紹介したい
LVM(LOGICAL VOLUME MANAGER)
• 複数の物理ディスクをグループにまとめて論理ディスクとし
て扱う
• ソフトウェアRAID(RAID0/1/4/5/6/10)を構成可能
• デフォルトがLVMで設定されているディストリビューション
もあるので、はじめからLVMで組まれているボリュームを使
っている人もいるはず
• Snapshot機能があり、一貫性のあるディスク状態を保存する
ことができる
LVMの構成
/dev/sdb1
物理ディスク 物理ボリューム
/dev/sdc1
/dev/sdd1
/dev/sdb1
/dev/sdc1
/dev/sdd1
pvcreate /dev/sdb1
pvcreate /dev/sdc1
pvcreate /dev/sdd1
ボリュームグループ
lvm-vg00
vgcreate lvm-vg00 /dev/sdb1
vgcreate lvm-vg00 /dev/sdc1
vgcreate lvm-vg00 /dev/sdd1
論理ボリューム
gitlab-data
lvcreate –L 100G –n gitlab-data lvm-vg00
LVMを使ったスナップショットの取得
• lvcreateで論理ボリューム単位でのスナップショットが取得でき
る
• lvcreate –s –L 100G –n gitlab-snapshot /dev/lvm-vg00/gitlab-data
• スナップショットを取るためには、ボリュームグループに未使用
の領域が必要
• スナップショットを取った地点のファイルシステムの状態で固定
される
gitlab-snapshot
スナップショットの復元
• lvconvertコマンドで、スナップショットの状態から復元する
• umount /mnt/gitlab-data
• lvconvert --merge /dev/lvm-vg00/gitlab-snapshot
• コマンド実行後、スナップショットは削除され、gitlab-data
はgitlab-snapshotの時点に戻る
gitlab-snapshot
データベースのバックアップ
• PostgreSQLもスナップショットでバックアップを取得できる
• ただし事前にPostgreSQLサービスを停止しておく必要がある
• 無停止でバックアップをしたい場合は、スナップショットを
取る前にpg_start_backup()を叩いて、WOLと呼ばれるトランザ
クションログもバックアップする必要がある
• pg_basebackupがこの辺りを自動化してくれる
• (今回バックアップ取れてなくて問題になったやつ)
• 詳しくは「PostgreSQL オンラインバックアップ」あたりで調
べてください
LVMによるスナップショットのメリットとデメリ
ット
• メリット
• ちょっとしたメンテナンス作業をするときに手軽なバックア
ップ手段として使える
• GitLabのアップデート作業に失敗した際に切り戻すときには有
効
• デメリット
• 現行の状態との差分を管理しているため、大量に変更が加わ
ると、スナップショット領域が溢れる可能性がある
• Copy on Writeのような方式でスナップショットを取るので、ス
ナップショットの取得は速いが、その後の差分を書き込み続
けるため、ディスク的には2倍書き込んでいることになり、大
幅に速度が落ちる
• スナップショットの復元のためにumountしないといけないた
め、無停止とはいかない
まとめ
• LVMスナップショットは世代別バックアップのような用途で
使うのではなく、GitLabのドキュメントにもあるように、静
的な状態を作って、rsyncでどこかに一貫性のある状態を転送
した後、速やかにスナップショットを削除するのが良さそう
• マシンリソースに余裕があるのであれば、メモリ32GBぐら
いを積んだ、FreeNAS(FreeBSD+ZFS)を使って、スナップショ
ットを取るのが良さそう
• 詳しくは「ZFS - スナップショットいつやるか?今でしょ!」 on
Qiita

More Related Content

What's hot

KubernetesでGPUクラスタを管理したい
KubernetesでGPUクラスタを管理したいKubernetesでGPUクラスタを管理したい
KubernetesでGPUクラスタを管理したいYuji Oshima
 
知って欲しいPaaSの話
知って欲しいPaaSの話知って欲しいPaaSの話
知って欲しいPaaSの話Kazuto Kusama
 
研究室のSVNをGitに移行した話
研究室のSVNをGitに移行した話研究室のSVNをGitに移行した話
研究室のSVNをGitに移行した話nemumu
 
Heroku+MongoLabでダミーサーバー
Heroku+MongoLabでダミーサーバーHeroku+MongoLabでダミーサーバー
Heroku+MongoLabでダミーサーバーHironytic
 
Git lev 3 -おひとりさまでブランチを-
Git lev 3 -おひとりさまでブランチを-Git lev 3 -おひとりさまでブランチを-
Git lev 3 -おひとりさまでブランチを-Kentarou Kurashige
 
Circle ciで結果をslackに通知してみる
Circle ciで結果をslackに通知してみるCircle ciで結果をslackに通知してみる
Circle ciで結果をslackに通知してみるynakahira
 
Machine learning CI/CD with OSS
Machine learning CI/CD with OSSMachine learning CI/CD with OSS
Machine learning CI/CD with OSSyusuke shibui
 

What's hot (8)

KubernetesでGPUクラスタを管理したい
KubernetesでGPUクラスタを管理したいKubernetesでGPUクラスタを管理したい
KubernetesでGPUクラスタを管理したい
 
知って欲しいPaaSの話
知って欲しいPaaSの話知って欲しいPaaSの話
知って欲しいPaaSの話
 
研究室のSVNをGitに移行した話
研究室のSVNをGitに移行した話研究室のSVNをGitに移行した話
研究室のSVNをGitに移行した話
 
Heroku+MongoLabでダミーサーバー
Heroku+MongoLabでダミーサーバーHeroku+MongoLabでダミーサーバー
Heroku+MongoLabでダミーサーバー
 
Git lev 3 -おひとりさまでブランチを-
Git lev 3 -おひとりさまでブランチを-Git lev 3 -おひとりさまでブランチを-
Git lev 3 -おひとりさまでブランチを-
 
Circle ciで結果をslackに通知してみる
Circle ciで結果をslackに通知してみるCircle ciで結果をslackに通知してみる
Circle ciで結果をslackに通知してみる
 
Machine learning CI/CD with OSS
Machine learning CI/CD with OSSMachine learning CI/CD with OSS
Machine learning CI/CD with OSS
 
Gitの勉強 紹介編-
Gitの勉強 紹介編-Gitの勉強 紹介編-
Gitの勉強 紹介編-
 

Viewers also liked

CHIUSURA PERCUTANEA AURICOLA Sn 2015 case report
CHIUSURA PERCUTANEA AURICOLA Sn 2015 case reportCHIUSURA PERCUTANEA AURICOLA Sn 2015 case report
CHIUSURA PERCUTANEA AURICOLA Sn 2015 case reportamlanzone
 
Writing Fast Code (JP) - PyCon JP 2015
Writing Fast Code (JP) - PyCon JP 2015Writing Fast Code (JP) - PyCon JP 2015
Writing Fast Code (JP) - PyCon JP 2015Younggun Kim
 
How we realized SOA by Python at PyCon JP 2015
How we realized SOA by Python at PyCon JP 2015How we realized SOA by Python at PyCon JP 2015
How we realized SOA by Python at PyCon JP 2015hirokiky
 
PyCon JP 2015 keynote
PyCon JP 2015 keynotePyCon JP 2015 keynote
PyCon JP 2015 keynoteHaruo Sato
 
pyconjp2015_talk_Translation of Python Program__
pyconjp2015_talk_Translation of Python Program__pyconjp2015_talk_Translation of Python Program__
pyconjp2015_talk_Translation of Python Program__Renyuan Lyu
 
micropythonで遊んでみる
micropythonで遊んでみるmicropythonで遊んでみる
micropythonで遊んでみるsatokengo
 
контрольна робота №2
контрольна робота №2контрольна робота №2
контрольна робота №2marunasorokina
 
форматування
форматуванняформатування
форматуванняmarunasorokina
 
самостійнаWord комплексна
самостійнаWord комплекснасамостійнаWord комплексна
самостійнаWord комплекснаmarunasorokina
 
презентация2
презентация2презентация2
презентация2marunasorokina
 
Pythonで作る俺様サウンドエフェクター
Pythonで作る俺様サウンドエフェクターPythonで作る俺様サウンドエフェクター
Pythonで作る俺様サウンドエフェクターRansui Iso
 
大規模データ分析を支えるインフラ系オープンソースソフトウェアの最新事情
大規模データ分析を支えるインフラ系オープンソースソフトウェアの最新事情大規模データ分析を支えるインフラ系オープンソースソフトウェアの最新事情
大規模データ分析を支えるインフラ系オープンソースソフトウェアの最新事情nagix
 
DS LT祭り 「AUCが0.01改善したって どういうことですか?」
DS LT祭り 「AUCが0.01改善したって どういうことですか?」DS LT祭り 「AUCが0.01改善したって どういうことですか?」
DS LT祭り 「AUCが0.01改善したって どういうことですか?」Ken'ichi Matsui
 
階層ベイズモデルで割安mobile PCを探す
階層ベイズモデルで割安mobile PCを探す階層ベイズモデルで割安mobile PCを探す
階層ベイズモデルで割安mobile PCを探す. .
 
SekainoKAO by TeamKAO
SekainoKAO by TeamKAOSekainoKAO by TeamKAO
SekainoKAO by TeamKAOHideki
 

Viewers also liked (20)

CHIUSURA PERCUTANEA AURICOLA Sn 2015 case report
CHIUSURA PERCUTANEA AURICOLA Sn 2015 case reportCHIUSURA PERCUTANEA AURICOLA Sn 2015 case report
CHIUSURA PERCUTANEA AURICOLA Sn 2015 case report
 
Writing Fast Code (JP) - PyCon JP 2015
Writing Fast Code (JP) - PyCon JP 2015Writing Fast Code (JP) - PyCon JP 2015
Writing Fast Code (JP) - PyCon JP 2015
 
S13 t0 introduction
S13 t0 introductionS13 t0 introduction
S13 t0 introduction
 
How we realized SOA by Python at PyCon JP 2015
How we realized SOA by Python at PyCon JP 2015How we realized SOA by Python at PyCon JP 2015
How we realized SOA by Python at PyCon JP 2015
 
PyCon JP 2015 keynote
PyCon JP 2015 keynotePyCon JP 2015 keynote
PyCon JP 2015 keynote
 
pyconjp2015_talk_Translation of Python Program__
pyconjp2015_talk_Translation of Python Program__pyconjp2015_talk_Translation of Python Program__
pyconjp2015_talk_Translation of Python Program__
 
micropythonで遊んでみる
micropythonで遊んでみるmicropythonで遊んでみる
micropythonで遊んでみる
 
сам роб2
сам роб2сам роб2
сам роб2
 
контрольна робота №2
контрольна робота №2контрольна робота №2
контрольна робота №2
 
Тести
ТестиТести
Тести
 
форматування
форматуванняформатування
форматування
 
самостійнаWord комплексна
самостійнаWord комплекснасамостійнаWord комплексна
самостійнаWord комплексна
 
сам роб4
сам роб4сам роб4
сам роб4
 
презентация2
презентация2презентация2
презентация2
 
Pythonで作る俺様サウンドエフェクター
Pythonで作る俺様サウンドエフェクターPythonで作る俺様サウンドエフェクター
Pythonで作る俺様サウンドエフェクター
 
大規模データ分析を支えるインフラ系オープンソースソフトウェアの最新事情
大規模データ分析を支えるインフラ系オープンソースソフトウェアの最新事情大規模データ分析を支えるインフラ系オープンソースソフトウェアの最新事情
大規模データ分析を支えるインフラ系オープンソースソフトウェアの最新事情
 
DS LT祭り 「AUCが0.01改善したって どういうことですか?」
DS LT祭り 「AUCが0.01改善したって どういうことですか?」DS LT祭り 「AUCが0.01改善したって どういうことですか?」
DS LT祭り 「AUCが0.01改善したって どういうことですか?」
 
Dslt祭り2夜
Dslt祭り2夜Dslt祭り2夜
Dslt祭り2夜
 
階層ベイズモデルで割安mobile PCを探す
階層ベイズモデルで割安mobile PCを探す階層ベイズモデルで割安mobile PCを探す
階層ベイズモデルで割安mobile PCを探す
 
SekainoKAO by TeamKAO
SekainoKAO by TeamKAOSekainoKAO by TeamKAO
SekainoKAO by TeamKAO
 

Similar to ファイルシステムのスナップショット機能でバックアップを取得する

GitHubにおける開発フローについてのお話
GitHubにおける開発フローについてのお話GitHubにおける開発フローについてのお話
GitHubにおける開発フローについてのお話Sota Sugiura
 
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理Takafumi Yoshida
 
Build insider offline session チームでのgit
Build insider offline session チームでのgitBuild insider offline session チームでのgit
Build insider offline session チームでのgitTadahiro Ishisaka
 
Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!ymmt
 
Metahub for github
Metahub for githubMetahub for github
Metahub for githubSuguru Oho
 
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれKazumi IWANAGA
 
Lisp meetup #29 cl-online-learningの紹介
Lisp meetup #29 cl-online-learningの紹介Lisp meetup #29 cl-online-learningの紹介
Lisp meetup #29 cl-online-learningの紹介Satoshi imai
 
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作ったRuby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作ったtakanori suzuki
 
RedmineとGitHubのうまい関係
RedmineとGitHubのうまい関係RedmineとGitHubのうまい関係
RedmineとGitHubのうまい関係Mitsuyoshi Kawabata
 
GitHub と Azure でアプリケーションとインフラストラクチャの守りを固めるDevSecOps
GitHub と Azure でアプリケーションとインフラストラクチャの守りを固めるDevSecOpsGitHub と Azure でアプリケーションとインフラストラクチャの守りを固めるDevSecOps
GitHub と Azure でアプリケーションとインフラストラクチャの守りを固めるDevSecOpsKazumi IWANAGA
 
@s_ssk13さん向けGitHub入門
@s_ssk13さん向けGitHub入門@s_ssk13さん向けGitHub入門
@s_ssk13さん向けGitHub入門Takashi Imagire
 
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話R S
 

Similar to ファイルシステムのスナップショット機能でバックアップを取得する (20)

GitHubにおける開発フローについてのお話
GitHubにおける開発フローについてのお話GitHubにおける開発フローについてのお話
GitHubにおける開発フローについてのお話
 
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理
 
Build insider offline session チームでのgit
Build insider offline session チームでのgitBuild insider offline session チームでのgit
Build insider offline session チームでのgit
 
Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!
 
Metahub for github
Metahub for githubMetahub for github
Metahub for github
 
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ
 
Lisp meetup #29 cl-online-learningの紹介
Lisp meetup #29 cl-online-learningの紹介Lisp meetup #29 cl-online-learningの紹介
Lisp meetup #29 cl-online-learningの紹介
 
Git超入門
Git超入門Git超入門
Git超入門
 
SCM, CI and Maven Repo
SCM, CI and Maven RepoSCM, CI and Maven Repo
SCM, CI and Maven Repo
 
Git&GitHub入門
Git&GitHub入門Git&GitHub入門
Git&GitHub入門
 
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作ったRuby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った
 
RedmineとGitHubのうまい関係
RedmineとGitHubのうまい関係RedmineとGitHubのうまい関係
RedmineとGitHubのうまい関係
 
go-apt-cacher/mirror
go-apt-cacher/mirrorgo-apt-cacher/mirror
go-apt-cacher/mirror
 
Katib
KatibKatib
Katib
 
GitHub と Azure でアプリケーションとインフラストラクチャの守りを固めるDevSecOps
GitHub と Azure でアプリケーションとインフラストラクチャの守りを固めるDevSecOpsGitHub と Azure でアプリケーションとインフラストラクチャの守りを固めるDevSecOps
GitHub と Azure でアプリケーションとインフラストラクチャの守りを固めるDevSecOps
 
@s_ssk13さん向けGitHub入門
@s_ssk13さん向けGitHub入門@s_ssk13さん向けGitHub入門
@s_ssk13さん向けGitHub入門
 
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
 
Git @ NNCT programming workshop
Git @ NNCT programming workshopGit @ NNCT programming workshop
Git @ NNCT programming workshop
 
MySQL Binlog Events でストリーム処理してみた #MySQLUC15
MySQL Binlog Events でストリーム処理してみた #MySQLUC15MySQL Binlog Events でストリーム処理してみた #MySQLUC15
MySQL Binlog Events でストリーム処理してみた #MySQLUC15
 
Yapc2012資料
Yapc2012資料Yapc2012資料
Yapc2012資料
 

More from Maki Toshio

Rails 6.1 → 7.0アップデート記録
Rails 6.1 → 7.0アップデート記録Rails 6.1 → 7.0アップデート記録
Rails 6.1 → 7.0アップデート記録Maki Toshio
 
自社サービスのAPIをOAuth2対応にして公開した
自社サービスのAPIをOAuth2対応にして公開した自社サービスのAPIをOAuth2対応にして公開した
自社サービスのAPIをOAuth2対応にして公開したMaki Toshio
 
Searched gems which supports only ruby 2.6
Searched gems which supports only ruby 2.6Searched gems which supports only ruby 2.6
Searched gems which supports only ruby 2.6Maki Toshio
 
ActiveRecordで複雑なクエリを書くのは間違っているのか
ActiveRecordで複雑なクエリを書くのは間違っているのかActiveRecordで複雑なクエリを書くのは間違っているのか
ActiveRecordで複雑なクエリを書くのは間違っているのかMaki Toshio
 
やさしいGemパッチの作り方
やさしいGemパッチの作り方やさしいGemパッチの作り方
やさしいGemパッチの作り方Maki Toshio
 
Cloud Foundry Day in Tokyo Lightning Talk - Cloud Foundry over the Proxy
Cloud Foundry Day in Tokyo Lightning Talk - Cloud Foundry over the ProxyCloud Foundry Day in Tokyo Lightning Talk - Cloud Foundry over the Proxy
Cloud Foundry Day in Tokyo Lightning Talk - Cloud Foundry over the ProxyMaki Toshio
 
メール製品を作って気づいたmailライブラリの光と闇について語る
メール製品を作って気づいたmailライブラリの光と闇について語るメール製品を作って気づいたmailライブラリの光と闇について語る
メール製品を作って気づいたmailライブラリの光と闇について語るMaki Toshio
 
明日から使える(?)Rubyトリビア
明日から使える(?)Rubyトリビア明日から使える(?)Rubyトリビア
明日から使える(?)RubyトリビアMaki Toshio
 
Rubyで簡単にremote access apiを実行する
Rubyで簡単にremote access apiを実行するRubyで簡単にremote access apiを実行する
Rubyで簡単にremote access apiを実行するMaki Toshio
 
レガシーコード改善ガイド
レガシーコード改善ガイドレガシーコード改善ガイド
レガシーコード改善ガイドMaki Toshio
 
Ruby on rails on hudsonの活用事例
Ruby on rails on hudsonの活用事例Ruby on rails on hudsonの活用事例
Ruby on rails on hudsonの活用事例Maki Toshio
 

More from Maki Toshio (11)

Rails 6.1 → 7.0アップデート記録
Rails 6.1 → 7.0アップデート記録Rails 6.1 → 7.0アップデート記録
Rails 6.1 → 7.0アップデート記録
 
自社サービスのAPIをOAuth2対応にして公開した
自社サービスのAPIをOAuth2対応にして公開した自社サービスのAPIをOAuth2対応にして公開した
自社サービスのAPIをOAuth2対応にして公開した
 
Searched gems which supports only ruby 2.6
Searched gems which supports only ruby 2.6Searched gems which supports only ruby 2.6
Searched gems which supports only ruby 2.6
 
ActiveRecordで複雑なクエリを書くのは間違っているのか
ActiveRecordで複雑なクエリを書くのは間違っているのかActiveRecordで複雑なクエリを書くのは間違っているのか
ActiveRecordで複雑なクエリを書くのは間違っているのか
 
やさしいGemパッチの作り方
やさしいGemパッチの作り方やさしいGemパッチの作り方
やさしいGemパッチの作り方
 
Cloud Foundry Day in Tokyo Lightning Talk - Cloud Foundry over the Proxy
Cloud Foundry Day in Tokyo Lightning Talk - Cloud Foundry over the ProxyCloud Foundry Day in Tokyo Lightning Talk - Cloud Foundry over the Proxy
Cloud Foundry Day in Tokyo Lightning Talk - Cloud Foundry over the Proxy
 
メール製品を作って気づいたmailライブラリの光と闇について語る
メール製品を作って気づいたmailライブラリの光と闇について語るメール製品を作って気づいたmailライブラリの光と闇について語る
メール製品を作って気づいたmailライブラリの光と闇について語る
 
明日から使える(?)Rubyトリビア
明日から使える(?)Rubyトリビア明日から使える(?)Rubyトリビア
明日から使える(?)Rubyトリビア
 
Rubyで簡単にremote access apiを実行する
Rubyで簡単にremote access apiを実行するRubyで簡単にremote access apiを実行する
Rubyで簡単にremote access apiを実行する
 
レガシーコード改善ガイド
レガシーコード改善ガイドレガシーコード改善ガイド
レガシーコード改善ガイド
 
Ruby on rails on hudsonの活用事例
Ruby on rails on hudsonの活用事例Ruby on rails on hudsonの活用事例
Ruby on rails on hudsonの活用事例
 

ファイルシステムのスナップショット機能でバックアップを取得する

Editor's Notes

  1. 3
  2. 4