Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Btrfs + Snapper + Samba で作る 「以前のバージョン」に戻せるファイルサーバー Rev. 2

Btrfs + Snapper + Samba で作る 「以前のバージョン」に戻せるファイルサーバー Rev. 2

YaST を使って、いつでもファイルを昔の状態に戻せる、Windows の「以前のバージョン」機能に対応したファイルサーバーを構築するまでの手順を紹介します。YaST は Linux ディストリビューション openSUSE の設定ツールです。テキストエディタで設定ファイルを編集すること無く、GUI やテキストベースの画面から次のような設定を簡単に行うことができます。

- ユーザーの設定
- ディスクの設定
- IP アドレスの設定
- ファイアウォールの設定
- Samba サーバーの設定

「以前のバージョン」機能は、ファイルサーバーの Samba と Btrfs と Snapper を連携することで実現します。Btrfs は Copy on write という仕組みでスナップショットを取れるファイルシステムです。Snapper は Btrfs のスナップショットを定期的に作成し、さらには古いスナップショットを自動的に間引くことができます。

セミナーの冒頭で openSUSE の最近の動向についても紹介します。

Fuminobu TAKEYAMA

April 24, 2020
Tweet

More Decks by Fuminobu TAKEYAMA

Other Decks in Technology

Transcript

  1. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 1/59
    Btrfs + Snapper + Samba で作る
    「以前のバージョン」に戻せるファイルサーバー
    Rev. 2
    武山 文信 (@ftake)
    日本 openSUSE ユーザ会
    オープンソースカンファレンス2020 Online/Spring

    View Slide

  2. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 2/59
    今日のセミナー内容
    1.openSUSE の紹介 (10分)
    2.ファイルサーバーの構築手順と使用するツールの紹介

    View Slide

  3. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 3/59
    みなさん
    って何かご存知ですか?

    View Slide

  4. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 4/59
    正しいのはどれ?
    ● 1. サーバールームでモフモフできるカメレオン型ガジェット
    ● 2. Ruby で簡単に Web アプリを作れるフレームワーク
    ● 3. 1996年にドイツで生まれた Linux ディストリビューション

    View Slide

  5. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 5/59
    正しいのはどれ?
    ● 1. サーバールームでモフモフできるカメレオン型ガジェット
    ● 2. Ruby で簡単に Web アプリを作れるフレームワーク
    ● 3. 1996年にドイツで生まれた Linux ディストリビューション

    View Slide

  6. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 6/59
    正解: 3
    ● 3. 1996年にドイツで生まれた Linux ディストリビューション
    – S.u.S.E Linux 4.2 リリース
    ● これ以前は Slackware + 設定ツールでした
    ● Q: RedHat 系ですか? Debian 系ですか?
    A: どちらでもありません! Slackware系でもありません
    ● Q: OpenSUSE ですか?openSUSE ですか?
    A: o は小文字です。IPhone ではなく、iPhone なのと同じです

    View Slide

  7. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 7/59
    2つの openSUSE
    Tumbleweed
    常に最新 安定
    ローリング・リリース
    新しいカーネルやライブラリを使いたい人
    アプリケーションのテスト環境
    定期アップデート
    有償サポートなしで安定版を使いたい人
    普段遣いのデスクトップやサーバーに

    View Slide

  8. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 8/59
    openSUSE Leap 15.1
    ● SUSE Linux Enterprise 15 SP1 ベースの安定志向
    ディストリビューション
    ● エンタープライズ版に openSUSE 独自のパッケージを追加
    – CentOS + Fedora のような感じ
    – 多数のデスクトップ環境やアプリケーション:
    Plasma 5.12, GNOME 3.26, XFCE 4.12, MATE, LXQt, etc.
    ● 年に1回のマイナーアップデート(サービスパック)
    – 42.1 → 42.2 → 42.3 → 15.0 → 15.1 → 15.2 …
    ● 移行期間はマイナーアップデートが出てから半年
    – 3年に1度程度のメジャーアップデート
    ● 42.x → 15.x

    View Slide

  9. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 9/59
    openSUSE Leap 15.2
    ● 2020年7月にリリース予定
    – SUSE Linux Enterprise とバイナリレベルで近づける作業のため
    2ヶ月延期
    ● openSUSE / SUSE Linux Enterprise どちらか一方向けの
    ビルドオプションの除去など
    ● 15.3 で同じバイナリ提供を目指す
    ● 更新内容
    – カーネル: 5.3 ベースになり、最新のハードウェアをサポート
    – Qt 5.12
    – YaST 改善
    – など

    View Slide

  10. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 10/59

    View Slide

  11. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 11/59
    同人誌も書いています
    ● コミックマーケットや技術書典で頒布
    ● 内容
    – Azure Files
    – システム構成管理ツール Uyuni
    – openQA でディストリの自動テスト
    – 仮想マシンコンテナホスト
    ● 新型コロナウイルスのせいで、
    印刷した本なので頒布できない・・・

    View Slide

  12. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 12/59
    YaST
    やすと

    View Slide

  13. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 13/59
    ところで
    ● どのように設定ファイルを書くか覚えていますか?
    – IP アドレスを固定したい
    – Samba でファイルサーバーを構築したい
    ● コマンドを覚えていますか?
    – パーティションを切りたい
    – フォーマットしたい

    View Slide

  14. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 14/59
    openSUSE の管理ツール YaST
    ● ハードウェア設定、ユーザー管理、各種サーバー管理をGUIで
    – Samba, VNC, HTTP, NTP

    View Slide

  15. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 15/59
    SSH からでも使える
    ● 同じレイアウトのテキスト(Curses)UI 版

    View Slide

  16. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 16/59
    本日のお題
    ● 「以前のバージョン」対応ファイルサーバー
    – 昔のファイルの状態にアクセスできる
    ● ファイルを間違えて
    消した・上書きしたときに戻せる
    aba
    aaa
    変更
    2020-02-10 の My Document
    My Document
    aba
    aaa
    現在のフォルダ内容
    昔のフォルダ内容

    View Slide

  17. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 17/59
    Windows のエクスプローラから
    1時間毎の過去の状態
    昔のファイルに直接アクセスできる

    View Slide

  18. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 18/59
    構成と手順の確認
    ● OS: openSUSE Leap 15.1
    ● ディスク
    – 2台目の HDD を Btrfs でフォーマットし
    /home/ にマウント
    – Snapper でスナップショット(ある時点でのディレクトリの状態)作成
    ● ネットワーク
    – 有線接続、192.168.0.3 に固定
    – ルーター(兼 DNS サーバー): 192.168.0.1
    ● サーバー
    – openSUSE Leap 15.1 提供の Samba 4.9.5
    – ユーザー管理は簡易のためローカルファイル DB で管理
    1台目: /, swap
    2台目: /home

    View Slide

  19. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 19/59
    手始めに… YaST で設定してみましょう
    ネットワーク

    View Slide

  20. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 20/59
    YaST の起動
    ● SSH からテキスト版を起動する場合
    ● デスクトップから GUI版を起動する場合
    – アプリケーションメニューを開き
    設定 > 管理者設定 をクリック
    $ sudo yast2

    View Slide

  21. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 21/59
    ネットワークの設定 1/5

    View Slide

  22. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 22/59
    ネットワークの設定 2/5
    Alt+I で一発移動
    枠間は Tab で移動

    View Slide

  23. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 23/59
    ネットワークの設定 3/5
    IPアドレスとサブネットを入力
    固定IPアドレスを選ぶ

    View Slide

  24. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 24/59
    ネットワークの設定 4/5
    DNSサーバ(ルーター)のIPアドレスを入力

    View Slide

  25. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 25/59
    ネットワークの設定 5/5
    ルーターのIPアドレスを設定

    View Slide

  26. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 26/59
    簡単ですね!

    View Slide

  27. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 27/59
    Btrfs
    ● ばたーえふえす
    ● 比較的新しいファイルシステム
    ● 特徴
    – サブボリューム
    – Copy on Write とスナップショット
    – 複数デバイスを1つのファイルシステムにまとめられる
    ● 詳細は、設定手順の中で説明していきます

    View Slide

  28. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 28/59
    Btrfs のサブボリューム
    ● Btrfs ファイルシステムを細分割した領域
    – ファイル、ディレクトリ、別のサブボリュームを持てる
    ● 見た目はディレクトリ
    – サブボリュームごとにスナップショット(後述)をとったり、
    設定を変えられる
    @ <-- トップレベル
    ├ var
    ├ usr <-- ふつうのディレクトリ
    │ └ local
    ├ tmp
    ├ srv
    ├ root
    ├ opt
    ├ home
    ├ ...
    openSUSE の標準的なサブボリューム構成
    (スナップショットoff)
    / にマウント
    ブロックデバイス
    ではない
    ディレクトリに見えますが
    サブボリューム!

    View Slide

  29. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 29/59
    /home の設定
    ● 今回は 2台目のディスクを /home にマウントして使う
    ● 先に既存の /home をバックアップして、削除
    – 標準的なインストールをした場合は / も Btrfs のため、
    /home はディレクトリではなくサブボリュームなので
    rm では消せない
    – サブボリュームをコピー(バックアップ)する方法
    $ btrfs subvolume snapshot /home /home.back

    View Slide

  30. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 30/59
    パーティション設定

    View Slide

  31. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 31/59
    もともとの /home を削除

    View Slide

  32. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 32/59
    パーティションテーブルの作成
    新しいディスクを選択
    2 TB 超の場合は自動的に GPT に
    2 TB 以下は DOS も選択可

    View Slide

  33. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 33/59
    パーティションの作成とマウント 1/3

    View Slide

  34. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 34/59
    パーティションの作成とマウント 2/3
    ディスクの全体を使うことにします

    View Slide

  35. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 35/59
    パーティションの作成とマウント 3/3
    どこにマウントするか

    View Slide

  36. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 36/59
    /home の設定まとめ
    ● 色々なツールを個別に呼び出さずに、YaST から設定可能
    ● YaST なしなら
    – # btrfs subvolume delete /home
    – # gparted
    ● パーティション作成
    – # mkfs.btrfs /dev/vdb1
    – # vi /etc/fstab
    ● /home にマウントするように変更

    View Slide

  37. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 37/59
    ユーザーの追加 1/2

    View Slide

  38. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 38/59
    ユーザーの追加 2/2

    View Slide

  39. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 39/59
    ユーザアカウントの詳細設定
    追加のグループの設定も可能
    ログインシェルの変更も可能

    View Slide

  40. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 40/59
    Btrfs + Snapper + Samba
    「以前のバージョン」対応ファイルサーバーを
    設定する

    View Slide

  41. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 41/59
    「以前のバージョン」を Samba で
    ● 今までのやり方: vfs_shadow_copy, vfs_shadow_copy2
    – rsync などを使って、定期的にファイルのバックアップを作成
    – このバックアップを以前のバージョンとして公開
    ● 新しい方法: vfs_snapper
    – スナップショット管理ツール Snapper
    – Samba 4.2 以降で対応

    View Slide

  42. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 42/59
    Snapper
    ● ファイルシステムのスナップショットを作成・管理するツール
    – openSUSE プロジェクト傘下だが、CentOS などでも使える
    ● スナップショットポリシーをカスタマイズ可能
    – スナップショットを作成する間隔
    – 古いスナップショットの間引き方
    ● スナップショット間の差分表示機能
    ● Btrfs と LVM をサポート

    View Slide

  43. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 43/59
    Snapper が作るスナップショットの実体
    /home/
    ├ geeko
    ├ Documents
    │ └ スライド.odp
    └ Pictures
    └ geeko.jpg
    /home/.snapshots
    ├ 100
    │ ├ info.xml
    │ └ snapshot
    │ └ geeko
    │ ├ Documents
    │ │ ├ 消しちゃった.txt
    │ │ └ スライド.odp
    │ └ Pictures
    │ └ geeko.jpg
    ├ 101
    │ ├ info.xml
    │ └ snapshot
    │ └ geeko
    │ ├ Documents
    │ │ └ スライド.odp
    │ └ Pictures
    │ └ geeko.jpg
    現在のファイル
    スナップショットで作成した
    サブボリューム
    以前のファイル

    View Slide

  44. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 44/59
    Snapper でスナップショットを撮る
    ● 設定ファイルを作成するだけで定期スナップショットが始まる
    – デフォルトでは毎時
    ● snapper コマンドで設定ファイルを作成
    – -c の後ろは設定名
    ● デフォルトのスナップショット最大個数
    – 毎時: 10個、毎日: 10個、毎月: 10個
    # snapper -c home create-config /home/
    残念ながら、YaST からはまだ設定できない
    定期スナップショットを撮るサブボリューム

    View Slide

  45. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 45/59
    スナップショットへのアクセス権の設定
    ● ファイルサーバーのユーザーに .snapshot/$id/ への
    アクセス権を与える
    – デフォルトでは root しか見られない
    ● 方法: 設定ファイル /etc/snapper/configs/home を編集
    – ALLOW_GROUPS="users"
    ● 過去のバージョンにアクセスするユーザーのグループ
    – SYNC_ACL="yes"

    View Slide

  46. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 46/59
    /home のコピーに時間がかからない?
    ディスクを大量に消費しない?

    View Slide

  47. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 47/59
    Btrfs の説明続き
    ● Copy on Write (CoW) を採用したファイルシステム
    – 書き込む時にデータをコピーする
    – Sun Microsystems (当時) の ZFS に影響
    – CoW → 牛 → バター
    ● Btrfs のスナップショット機能でサブボリュームをコピーすると
    ファイルは変更されるまで実際にはコピーされない
    – スナップショットを作成してもディスク容量を消費しない
    – スナップショットの作成は一瞬で終わる

    View Slide

  48. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 48/59
    Copy on Write
    .snapshots/1
    ストレージ上の
    データ
    /home/ geeko.jpg 消しちゃった.txt
    スライド.odp
    スライド.odp geeko.jpg
    消しちゃった.txt
    消しちゃった.txt
    Create
    .snapshots/1
    ストレージ上の
    データ
    /home/ geeko.jpg 消しちゃった.txt
    スライド.odp
    スライド.odp geeko.jpg 消しちゃった.txt
    Updated Deleted
    Copy
    Write
    まだある まだある
    作成

    View Slide

  49. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 49/59
    Samba サーバーを設定 1/4

    View Slide

  50. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 50/59
    Samba サーバーを設定 2/4
    systemd の設定変更
    firewalld の設定変更

    View Slide

  51. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 51/59
    Samba サーバーを設定 3/4

    View Slide

  52. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 52/59
    Samba サーバーを設定 4/4
    追加 → vfs objects を選択
    btrfs と snapper を使用する

    View Slide

  53. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 53/59
    新しく共有を追加する場合は…
    チェックボックス
    で設定できる

    View Slide

  54. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 54/59
    GUI 版はこんな感じです

    View Slide

  55. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 55/59
    Samba ユーザーのパスワードを設定
    ● 今回は pdbedit コマンドで
    – # pdbedit -a ユーザー名
    ● 残念ながら YaST からはできない
    – LDAP ならできるのですが…

    View Slide

  56. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 56/59
    完成
    \\192.168.0.3\users\geeko

    View Slide

  57. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 57/59
    制限事項
    ● \\192.168.0.3\geeko でアクセスすると、
    以前のバージョンが表示されない
    – Samba の共有ディレクトリとスナップショットを
    とっているサブボリュームのディレクトリとが一致する必要あり

    View Slide

  58. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 58/59
    スナップショット
    おまけ: トランザクショナルアップデート
    ● スナップショット側のパッケージをまとめてアップデートして、
    完了したら / を入れ替えるアップデート方法
    – パッケージの不整合防止のダウンタイムを再起動の時間だけに
    – 詳しくは OSC 2018 Tokyo/Fall のスライドで
    ● https://www.slideshare.net/ftake/btrfs-121076162
    ストレージ上の
    データ
    / libB.so libC.so
    /usr/bin/A
    実行中
    /usr/bin/A libB.so libC.so
    Updated Updated
    古いファイル

    View Slide

  59. 2020-04-24
    Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 59/59
    最後に
    ● Have a lot of fun! — 楽しみましょう!
    – 分からないことはコミュニティに聞きましょう
    ● openSUSE のコミュニティは
    – 日本openSUSEユーザ会 https://www.geeko.jp/
    – Twitter: @opensuseja
    – Facebook: https://www.facebook.com/opensuseja
    – openSUSEプロジェクト公式日本語メーリングリスト
    [email protected] 公式アナウンスなど
    – その他、Slack、LINE Open Chat もあり

    View Slide