[ZFS] git on ZFS

643 Views

April 24, 24

スライド概要

ZFS上にgitリポジトリを作ることで、取り返しのつかないgit操作をファイルシステムごとロールバックしてなかったことにする真のgit resetを実現します

profile-image

LIFULL HOME'Sを運営する株式会社LIFULLのアカウントです。 LIFULLが主催するエンジニア向けイベント「Ltech」等で公開されたスライド等をこちらで共有しております。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

2024.04.19 git ――― ZFS 社内勉強会 秀野 亮 © 2024 LIFULL Co., Ltd.

2.

git © 2024 LIFULL Co., Ltd. 2

3.

git / ZFS 消えるファイル ● ● ⼀度git管理化に⼊れば、ファイルを消してしまってもどこかに残滓が残っている ○ git reset --hard HEAD@{1} ○ git fsck --lost-found ○ git cat-file -p / git ls-tree gitといえども、⼀度もadd/stashもしてないUntrackedなファイルは消える ○ © 2024 LIFULL Co., Ltd. git stash -u → git stash clear → \(^o^)∕ 3

4.

git / ZFS gitの外 ● ● Windowsの場合、OneDriveに同期する仕組みがある ○ 許可のない外部サービスに依存すると困る ○ GoogleDrive、iCloudの同期も同様 Macの場合、TimeMachineなどバックアップの仕組みがある ○ ディスク単位で使いにくそう ○ 外付けディスク、なんてない © 2024 LIFULL Co., Ltd. 4

5.

git / ZFS やりたいこと ● ● ZFS上でgit管理 ○ Macのファイルシステム(APFS)上に、ZFSのファイルシステムを作成 ○ ZFS上にgitリポジトリを作成 意図しない操作をなかったことにしたい ○ ZFSでファイルシステムごとロールバックすればいい ○ 出来ればファイル更新時に⾃動的にスナップショットを取りたい © 2024 LIFULL Co., Ltd. 5

6.

ZFS © 2024 LIFULL Co., Ltd. 6

7.

git / ZFS ZFSとは ● Sun Microsystems(現Oracle)がSolaris⽤に開発したファイルシステム ● ストレージの仮想化機能 ● ○ COWなトランザクショナルファイルシステム ○ 単体でRAIDが組める(RAID-0/1/擬5/擬6) ○ COWやRAIDの恩恵?なのか予測的な⾃⼰修復機能がある ライセンスに訴訟リスクがある ○ ZFSはCDDLでありGPLと互換性がないと⾔われている ○ Linuxは、Oracleの訴訟癖によりカーネルのメインラインには含めないと公⾔されている ○ Ubuntuは、OpenZFSをカーネル拡張として提供したが即いちゃもん付けられた © 2024 LIFULL Co., Ltd. 7

8.

git / ZFS ZFSの構成 物理 ディスク ● ストレージプール 物理 ディスク 物理 ディスク ストレージプール ストレージプール ストレージプール 物理ディスクを仮想化したストレージ オンラインで物理ディスクの追加が可能 ファイル システム zpoolコマンドで操作 ● ファイルシステム ファイル システム ストレージプールから必要なぶん切り出す ファイル システム 作成時のパス名に⾃動マウント/⾃動アンマウント スナップショットによるロールバック/クローン ファイル システム ファイル システム zfsコマンドで操作 © 2024 LIFULL Co., Ltd. 8

9.

git / ZFS インストール ● macOSにインストール ● ZFSがカーネル拡張のインストールを要求してくる ○ 旧世代の仕組みのため、起動セキュリティユーティリティで「低セキュリティ」に設定する 必要がある ○ 起動時に電源⻑押しで「復旧」アプリを起動して設定を⾏う ○ 画⾯上ディスクユーティリティしかないが、上部メニュー内にいるので注意 ○ Appleシリコンを搭載したMacの起動ディスクのセキュリティ設定を変更する ● 設定後に再起動し、カーネル拡張を許可して、もう⼀度再起動 ● kextstat | grep zfs でカーネル拡張が表⽰されればOK © 2024 LIFULL Co., Ltd. 9

10.

git / ZFS インストール © 2024 LIFULL Co., Ltd. 10

11.

git / ZFS インストール © 2024 LIFULL Co., Ltd. 11

12.

git / ZFS 構成 ● ● Macのファイルシステム構成 ○ 既存APFSのまま、新規ZFSストレージプールを追加したい ○ 再起動時に⾃動インポートされない問題はある ZFSの構成 ○ 物理ディスクの代わりに、ファイルやディスクイメージを使える ○ 試しにファイルをディスク代わりにして、その中にストレージプールを作る © 2024 LIFULL Co., Ltd. 12

13.

git / ZFS 構成 - ストレージプール ● mkfileやddでファイルを作る ● 今回ローカルなのでどうでもいいが、スティッキービットが⽴ったディレクトリがよさそう © 2024 LIFULL Co., Ltd. 13

14.

git / ZFS 構成 - ストレージプール © 2024 LIFULL Co., Ltd. 14

15.

git / ZFS 構成 - ファイルシステム ● gitリポジトリごとにファイルシステムを作成する ● デフォルトでは作成時に指定したパスの場所にマウントされる ○ ● git/repo1 → /Volumes/git/repo1 今回は指定した場所にマウントする(mountpointプロパティ) © 2024 LIFULL Co., Ltd. 15

16.

git / ZFS 構成 - ファイルシステム ● デスクトップに⼤量のマウントできたので、順番に作成したほうがいいかも ● デスクトップのマウント⾃体は、Finderの設定で⾮表⽰にできる ←ココ © 2024 LIFULL Co., Ltd. 16

17.

git / ZFS 構成 - 起動時のインポート ● ディスクでなくファイルを使っている場合、起動時に⾃動インポートできない ● 起動後、⼿動でインポートする ○ launchdを⾃分で設定してもいいが、お試しなのでやらない ○ マウントしたくないファイルシステムはcanmount=offにしておけばマウントされない © 2024 LIFULL Co., Ltd. 17

18.

git / ZFS 構成 - 起動時のインポート ● ディスクの場合、⾃動的にインポートされるはず ○ ● launchdを使っている Catalina以降はbash?zpool?のフルディスクアクセスを許可しないとダメかも ○ 設定>プライバシーとセキュリティ>フルディスクアクセス ○ zpoolという項⽬がOFFになっているが、ONにするべきか分からず放置‧‧‧ © 2024 LIFULL Co., Ltd. 18

19.

git / ZFS 構成 - 起動時のインポート © 2024 LIFULL Co., Ltd. 19

20.

git ――― ZFS © 2024 LIFULL Co., Ltd. 20

21.

git / ZFS gitリポジトリ ● 権限周りのエラーが鬱陶しいので、先に.gitignoreを作成 ○ ● gibo dump macOSでZFSで作成される隠しファイルも含まれる あとは普通にgit init © 2024 LIFULL Co., Ltd. 21

22.

git / ZFS クォータ ● ファイルシステムごとクォータもかけられる ○ © 2024 LIFULL Co., Ltd. ユーザーごとも可 22

23.

git / ZFS スナップショット ● スナップショットはファイルシステムと同じストレージプール内に作られる ○ ● COWなので作成は⼀瞬 削除は「旧スナップショット名%新スナップショット名」で範囲指定できる © 2024 LIFULL Co., Ltd. 23

24.

git / ZFS スナップショット © 2024 LIFULL Co., Ltd. 24

25.

git / ZFS ロールバック ● スナップショットを指定して、その状態に戻せる ● 数世代前の状態に戻すには -r オプションが必要 ○ ● 指定したスナップショットより新しいスナップショットは消える ロールバックする前にクローンすれば、どのスナップショットがどの状態だったか確認できそう ○ PostgreSQL.AIが、PostgreSQL+ZFSで似たようなことをやっていた ファイルシステム pool/fs © 2024 LIFULL Co., Ltd. スナップショット pool/fs@1 クローン pool/fs-1 25

26.

git / ZFS ロールバック © 2024 LIFULL Co., Ltd. 26

27.

まとめ © 2024 LIFULL Co., Ltd. 27

28.

git / ZFS まとめ ● Macのファイルシステムの⼀部をZFSにした ○ ファイルで代⽤した場合、起動時のインポート処理に問題あり ● 構築ができれば、基本的な使い⽅は直感的で分かりやすい ● 真の意味でgit resetできる ● できなかったこと ○ 物理ディスクでの構成 ○ RAID-Z以外の構成(ファイルで試すだけなら未指定でよかった気がする) ○ git clone時のファイルシステム⾃動作成 ○ ファイル更新時の⾃動スナップショット ○ 古いsnapshotの⾃動削除(ChatGPTに設計はしてもらった) © 2024 LIFULL Co., Ltd. 28

29.

git / ZFS 参考 ● Common Development and Distribution License - Wikipedia ● ZFSを使ってみよう (基本編) ● ZFSを使ってみよう (応⽤編) ● ZFS on macOS | the working iron never rusts ● OpenZFSOnOSX - OpenZFS ○ https://openzfsonosx.org/wiki/ ● Appleシリコンを搭載したMacの起動ディスクのセキュリティ設定を変更する ● OpenZFS クラウドファイルシステム - Amazon FSx ● UbuntuでZFSを使ってみよう 第36回 ZFSのサブコマンドを再確認しよう(1) ● Postgres.AI ● © 2024 LIFULL Co., Ltd. 29