今回は GEOM によるネットワーク経由のデバイス共有の仕組みである GATE について纏めてみたいと思います.
- GEOM に関するお話
- FreeBSD GEOM 再々学習
- GEOM CONCAT (ディスクの連結) を使ってみる
- GEOM STRIPE (ストライプ/RAID0) を使ってみる
- GEOM MIRROR (ミラーリング/RAID1) を使ってみる (1)
- GEOM MIRROR (ミラーリング/RAID1) を使ってみる (2)
- GEOM STRIPE + MIRROR で RAID10 を構成してみる
- GEOM RAID3を使ってみる
- GEOM CACHE を使ってみる
- GEOM GVIRSTORを使ってみる
- GEOM GATE を使ってみる
- GEOM LABEL で名前による管理を行う
- GEOM PART でディスクパーティションの管理を行う
- GEOM MULTIPATH でマルチパスを構成する (1)
- GEOM MULTIPATH でマルチパスを構成する (2)
GEOM GATE のイメージ
GATE のイメージはこのような形です.gates が GEOM GATE でデバイスを提供する側 (サーバー) で,gatec が GEOM GATE でデバイスを提供される側 (クライアント) です.
サーバーではハードディスクである da1 と CD-ROM ドライブである cd0 を提供し,クライアントがネットワーク経由でマウントする.というイメージになります.
GEOM の利用 (サーバー側)
前準備として,カーネルモジュールのロードおよびサーバーデーモンの起動が必要になります.
server # kldload geom_gate.ko server # kldstat Id Refs Address Size Name 1 11 0xffffffff80200000 1f3e2d0 kernel 2 1 0xffffffff82319000 3218 intpm.ko 3 1 0xffffffff8231d000 2180 smbus.ko 4 1 0xffffffff82320000 7490 vmci.ko 5 1 0xffffffff82328000 4538 geom_gate.ko
再起動後も有効とするために /boot/loader.conf にも記載しましょう.
server # cat /boot/loader.conf geom_gate_load="YES"
続いて,NFS で利用する /etc/exports のようなファイルを作成する必要があります.ファイルは /etc/gg.exports です.
構文も NFS の exports に似ている構文となります.
アクセスを許可するクライアント RW/RO 提供するデバイス
上図イメージのとおり,da1 と cd0 を提供する gg.exports は次のとおりです.
192.168.241.41 RW /dev/da1 192.168.241.41 RO /dev/cd0
gg.exports ファイルの作成が終わったら,ggated デーモンを起動します.rc スクリプトになっていない為手動でプログラムを実行します.
server # ggated /etc/gg.exports ggated /etc/gg.exports 8292 0 S+ 0:00.00 grep ggate
以上でサーバー側の準備は完了です.
GEOM の利用 (クライアント側)
クライアント側もサーバーと同様に前準備として,カーネルモジュールのロードおよびサーバーデーモンの起動が必要になります.
client # kldload geom_gate.ko client # kldstat Id Refs Address Size Name 1 11 0xffffffff80200000 1f3e2d0 kernel 2 1 0xffffffff82319000 3218 intpm.ko 3 1 0xffffffff8231d000 2180 smbus.ko 4 1 0xffffffff82320000 7490 vmci.ko 5 1 0xffffffff82328000 4538 geom_gate.ko
再起動後も有効とするために /boot/loader.conf にも記載しましょう.
client # cat /boot/loader.conf geom_gate_load="YES"
ハードディスクをマウントする
ggatec コマンドを利用して,サーバーのリソースをつかみます.
mount コマンドに似た構文となります.
create で GEOM GATE デバイスを生成します
-o は RW/RO/WO が指定可能です.
サーバーのアドレスおよび提供しているデバイス名を指定します.
成功すると ggate[x] というデバイスが作成されます.
client # ggatec create -o rw 192.168.241.43 /dev/da1 ggate0
ハードディスクを ggate0 というデバイスで接続出来たので,フォーマットしてマウントしてみます.
client # newfs /dev/ggate0 /dev/ggate0: 102400.0MB (209715200 sectors) block size 32768, fragment size 4096 using 164 cylinder groups of 625.22MB, 20007 blks, 80128 inodes. super-block backups (for fsck_ffs -b #) at: 192, 1280640, 2561088, 3841536, 5121984, 6402432, 7682880, 8963328, 10243776, 11524224, 12804672, 14085120, 15365568, 16646016, 17926464, 19206912, 20487360, 21767808, 23048256, 24328704, 25609152, 26889600, 28170048, 29450496, 30730944, 32011392, 33291840, 34572288, 35852736, 37133184, 38413632, 39694080, 40974528, 42254976, 43535424, 44815872, 46096320, client # mount /dev/ggate0 /mnt client # df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/da0p2 19279260 3140820 14596100 18% / devfs 1 1 0 100% /dev /dev/ggate0 101561756 8 93436808 0% /mnt
このように,通常のハードディスクと同様に扱う事が可能です.
実際にデータを置いてみます.
client # dd if=/dev/random of=/mnt/random.img bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 9.699479 secs (110700980 bytes/sec) client # ls -l /mnt total 1048868 drwxrwxr-x 2 root operator 512 Dec 8 20:10 .snap -rw-r--r-- 1 root wheel 1073741824 Dec 8 20:12 random.img
これをアンマウントし,サーバー側でディスクをマウントしてみて実際にデータが置かれているのか確認してみましょう.
まずはクライアント側でアンマウントし,そして ggate0 デバイスを削除します.
client # umount /mnt client # ggatec destroy -u 0
サーバー側で確認してみる
サーバー側でも ggated を止めた方がいいのですが,掴まれていない場合は止めなくても扱えます.
このように,クライアント側で読み書きしたデータが確認できます.
server # mount /dev/da1 /mnt server # ls -l /mnt total 1048868 drwxrwxr-x 2 root operator 512 Dec 8 20:10 .snap -rw-r--r-- 1 root wheel 1073741824 Dec 8 20:12 random.img server # umount /mnt
CD ドライブをマウントする
クライアントにて /dev/cd0 を指定して ggatec コマンドを実行します.
(イメージと合わせる為ハードディスクは再度マウントしています)
client # ggatec create -o rw 192.168.241.43 /dev/da1 ggate0 client # ggatec create -o ro 192.168.241.43 /dev/cd0 ggate1
ggate1 が CD ドライブとなりますので,これをマウントしてみます.
サーバー側の CD ドライブには,FreeBSD のインストーラーをセット済みでした.ls で見てみるとメディアの内容が表示されており,CD ドライブとしての利用が可能であることがわかります.
client # mount_cd9660 /dev/ggate1 /mnt client # ls -l /mnt total 92 -rw-r--r-- 2 root wheel 1023 Apr 7 2023 .cshrc -rw-r--r-- 2 root wheel 507 Apr 7 2023 .profile drwxr-xr-x 3 root wheel 2048 Apr 7 2023 .rr_moved -r--r--r-- 1 root wheel 6109 Apr 7 2023 COPYRIGHT drwxr-xr-x 2 root wheel 6144 Apr 7 2023 bin drwxr-xr-x 14 root wheel 10240 Apr 7 2023 boot dr-xr-xr-x 2 root wheel 2048 Apr 7 2023 dev drwxr-xr-x 29 root wheel 14336 Apr 7 2023 etc drwxr-xr-x 5 root wheel 10240 Apr 7 2023 lib drwxr-xr-x 3 root wheel 2048 Apr 7 2023 libexec drwxr-xr-x 2 root wheel 2048 Apr 7 2023 media drwxr-xr-x 2 root wheel 2048 Apr 7 2023 mnt drwxr-xr-x 2 root wheel 2048 Apr 7 2023 net dr-xr-xr-x 2 root wheel 2048 Apr 7 2023 proc drwxr-xr-x 2 root wheel 2048 Apr 7 2023 rescue drwxr-xr-x 2 root wheel 2048 Apr 7 2023 root drwxr-xr-x 2 root wheel 20480 Apr 7 2023 sbin drwxrwxrwt 2 root wheel 2048 Apr 7 2023 tmp drwxr-xr-x 13 root wheel 2048 Apr 7 2023 usr drwxr-xr-x 24 root wheel 4096 Apr 7 2023 var
注意点
このように,簡単にネットワーク越しにデバイスを共有できるのですが,いくつか注意点があります.
- rc.d スクリプトが用意されていない
- ネットワークの暗号化はされていない
- 提供したデバイスを接続できるクライアントは1台のみ
rc.d スクリプトが用意されていない
起動・停止にあたり /etc/rc.conf および rc.d スクリプトがない為,自前で起動時,停止・再起動時の処理を書く必要があります.
サーバー側は rc.local に先のコマンドを記載するだけで大丈夫ですが,クライアント側はマウント処理が終わり次第,必要なサービスを起動させる等の対処が必要となります.
ネットワークの暗号化はされていない
NFS も同様なのであまり気にするポイントではないかもしれませんが,盗聴のリスクがある事は理解しておく必要があります.
必要に応じて IPSec 張る等を考えなければなりません
提供したデバイスを接続できるクライアントは1台のみ
複数のクライアントに同じデバイスを提供,複数のクライアントが同時に接続する事はできません.
一番最初に掴んだクライアントが優先され,以降のクライアントは接続に失敗します.
iSCSI 経由のディスクマウントと同じような利用方法はできません.
FreeBSD 10.0 より,iSCSI Target が標準で利用できるようになっている為,GEOM GATE の出番はほぼ無いと思います.が,簡単に共有ができるのでちょっとしたデバイスの論理的な移動を行いたい場合には使いようはあるかと思います.
以上で GEOM GATE についての解説を終了します.
コメント