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

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

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
  2. 2020-04-24 Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 4/59 正しいのはどれ? • 1. サーバールームでモフモフできるカメレオン型ガジェット • 2.

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

    Ruby で簡単に Web アプリを作れるフレームワーク • 3. 1996年にドイツで生まれた Linux ディストリビューション
  4. 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 なのと同じです
  5. 2020-04-24 Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 7/59 2つの openSUSE Tumbleweed 常に最新 安定 ローリング・リリース

    新しいカーネルやライブラリを使いたい人 アプリケーションのテスト環境 定期アップデート 有償サポートなしで安定版を使いたい人 普段遣いのデスクトップやサーバーに
  6. 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
  7. 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 改善 – など
  8. 2020-04-24 Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 11/59 同人誌も書いています • コミックマーケットや技術書典で頒布 • 内容 –

    Azure Files – システム構成管理ツール Uyuni – openQA でディストリの自動テスト – 仮想マシンコンテナホスト • 新型コロナウイルスのせいで、 印刷した本なので頒布できない・・・
  9. 2020-04-24 Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 13/59 ところで • どのように設定ファイルを書くか覚えていますか? – IP アドレスを固定したい

    – Samba でファイルサーバーを構築したい • コマンドを覚えていますか? – パーティションを切りたい – フォーマットしたい
  10. 2020-04-24 Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 16/59 本日のお題 • 「以前のバージョン」対応ファイルサーバー – 昔のファイルの状態にアクセスできる •

    ファイルを間違えて 消した・上書きしたときに戻せる aba aaa 変更 2020-02-10 の My Document My Document aba aaa 現在のフォルダ内容 昔のフォルダ内容
  11. 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
  12. 2020-04-24 Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 20/59 YaST の起動 • SSH からテキスト版を起動する場合 •

    デスクトップから GUI版を起動する場合 – アプリケーションメニューを開き 設定 > 管理者設定 をクリック $ sudo yast2
  13. 2020-04-24 Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 27/59 Btrfs • ばたーえふえす • 比較的新しいファイルシステム •

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

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

    にマウントして使う • 先に既存の /home をバックアップして、削除 – 標準的なインストールをした場合は / も Btrfs のため、 /home はディレクトリではなくサブボリュームなので rm では消せない – サブボリュームをコピー(バックアップ)する方法 $ btrfs subvolume snapshot /home /home.back
  16. 2020-04-24 Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 36/59 /home の設定まとめ • 色々なツールを個別に呼び出さずに、YaST から設定可能 •

    YaST なしなら – # btrfs subvolume delete /home – # gparted • パーティション作成 – # mkfs.btrfs /dev/vdb1 – # vi /etc/fstab • /home にマウントするように変更
  17. 2020-04-24 Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 41/59 「以前のバージョン」を Samba で • 今までのやり方: vfs_shadow_copy,

    vfs_shadow_copy2 – rsync などを使って、定期的にファイルのバックアップを作成 – このバックアップを以前のバージョンとして公開 • 新しい方法: vfs_snapper – スナップショット管理ツール Snapper – Samba 4.2 以降で対応
  18. 2020-04-24 Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 42/59 Snapper • ファイルシステムのスナップショットを作成・管理するツール – openSUSE プロジェクト傘下だが、CentOS

    などでも使える • スナップショットポリシーをカスタマイズ可能 – スナップショットを作成する間隔 – 古いスナップショットの間引き方 • スナップショット間の差分表示機能 • Btrfs と LVM をサポート
  19. 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 現在のファイル スナップショットで作成した サブボリューム 以前のファイル
  20. 2020-04-24 Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 44/59 Snapper でスナップショットを撮る • 設定ファイルを作成するだけで定期スナップショットが始まる – デフォルトでは毎時

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

    – デフォルトでは root しか見られない • 方法: 設定ファイル /etc/snapper/configs/home を編集 – ALLOW_GROUPS="users" • 過去のバージョンにアクセスするユーザーのグループ – SYNC_ACL="yes"
  22. 2020-04-24 Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 47/59 Btrfs の説明続き • Copy on Write

    (CoW) を採用したファイルシステム – 書き込む時にデータをコピーする – Sun Microsystems (当時) の ZFS に影響 – CoW → 牛 → バター • Btrfs のスナップショット機能でサブボリュームをコピーすると ファイルは変更されるまで実際にはコピーされない – スナップショットを作成してもディスク容量を消費しない – スナップショットの作成は一瞬で終わる
  23. 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 まだある まだある 作成
  24. 2020-04-24 Btrfs+Snapper+Smb で「以前のバージョン」に戻せるファイルサーバー 57/59 制限事項 • \\192.168.0.3\geeko でアクセスすると、 以前のバージョンが表示されない –

    Samba の共有ディレクトリとスナップショットを とっているサブボリュームのディレクトリとが一致する必要あり
  25. 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 古いファイル
  26. 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 もあり