Opendedupという重複排除機能搭載のLinux/Windows向けファイルシステム

2024/04/23追記

2024年4月現在、Opendedupのサイト自体は存続している。

githubでの開発状況を見ると2022年8月の修正が最後で、またまとめた形でのリリースは2016年8月のver 3.2.1が最後となっているようだが、メインサイトの”Changes“には「ver 3.5.7」、”Download“では「The most current version is 3.10.8.0」という記述があるので、開発は続いている模様。

とはいえ、サイト上の対応OS記述がUbuntu 14.04やWindows Server 2012だったりするあたりでちょっと怪しい・・・


Opendedupという重複排除機能搭載のファイルシステムを発見した。

ファイルシステム層はCで作られているが、そこより下層の重複排除処理やデータ書き込み処理部分についてはJavaで作られているとのこと。

重複排除以外にも、レプリケーション機能もあるようだ。
(SDFS Volume Replication)

Cloud Based Deduplication Quick Start Guideを見ると、Amazon S3や、Windows Azureのストレージを、Opendedupeで直接利用できるようだ。

Linux環境では、FUSEを使ってマウントする。

Windows環境では、Dokan(以前は http://dokan-dev.net/ だったが2021年時点では消滅)というWindows版FUSEみたいなのを使うが、Opendedup配布パッケージに組み込み済みなので別途インストールする必要はない。
なお、Dokanは「土管」が語源のようです。(Dokanライブラリの説明 http://dokan-dev.net/about/ )

OpenDedup Deduplication NAS ApplianceというOVFテンプレートの仮想マシンも用意されている。

こっちにはSDFS Manager というWeb GUIプログラムが同梱されているようなのだが、スクリーンショットを見る限りでは、かなりちゃんとしている雰囲気が・・・

SSD+SATAのハイブリッドストレージ Nimble Storageについて調べてみた

Nimble Storageというストレージプロダクトがあるらしい。
それについて調べたことを書いてみる。
うたい文句をみるとTintri VMstoreと似てる感じがするなぁ・・・と思いつつ内容を調査した。

なお、これは以前書いた「Nimble Storage」という記事についてのアップデートです。
簡単に言えば、書いた記事には誤りがあったための更新ついでに、競合との比較です。

Tintri VMstoreと大きく違う点

・Nimble StorageはiSCSIストレージ
 汎用的に使えるiSCSIストレージ
 VMware/Hyper-V/通常のWindows/Citrixで使える
 TintriはNFSストレージで、さらにVMware以外は公式にサポートしない

・SSDはRead Cacheとして使用
 実体は全てSATA HDD上に置かれている
 Tintriは、SSDとSATA HDDのどちらかに置かれており、必要に応じて自動的に移動する

・Web GUI以外の管理手法が完備されている
 SNMP MIB、CLI操作が使える
 Tintriは、Web GUI以外に無い

・vSphere関連のプラグインが一通り揃っている
 VAAI, vSphere Client plugin, SRM pluginがある。
 2013年5月現在TintriはVAAIのみ

・VSS連携も可
 WindowsのVolume Shadowcopy Serviceとの連携も可能

・レプリケーション機能を初期リリースからサポート
 Tintriは、最新のver2.0でサポートのはずだが、2013年5月現在入手できず。

・容量拡張手法がいくつかある
 容量が足らない→Shelf増加(パフォーマンス低下は無い)
 パフォーマンスが足らない1→SSDの容量アップ(オンラインで実施可能)
 パフォーマンスが足らない2→システム追加+クラスタ化
 Tintriの場合、「システム追加」しかない

・複数システムをクラスタ化できる
 複数のNimble Storageを1システムの様に取り扱うことができる
 ユーザはNimbleを使い分ける、ということを意識する必要は無い
 Tintriの場合、明示的に使い分ける必要がある。

・Web GUIからシステムアップデートができる
 Web GUIからシステムアップデートができる、というのは良くあるが
 アップデートするバージョンを複数から選択できる、というのは珍しい。
 最新は嫌、とか、導入済みのものと合わせたい、という場合に便利。
 Tintriは、本体にキーボードとUSBメモリを取り付けて、コンソール操作でのアップデート。

細かな話

・実データをHDDに書くけど遅いんじゃないの?
もちろん、まともに書くと遅いので、うまくごまかしています。

書き込まれたデータはある一定サイズになるまで、メモリ(NVRAM)上にため込まれます。
既定サイズを超えたら、データ圧縮をおこない、HDDに書き込みます。
ここで既定されているサイズは、SATA HDD 11本で構成されたRAID6に書き込む際に、最速シーケンシャルwriteになるように設定されている。(以降「writing block」と呼びます。なおこの表記はオフィシャルではありません)
つまり、速度が落ちるランダムwriteを排除している、ということになる。

・データ書き換え時ってどうしてるの?
データが書き換えられた時は、書き換え後のデータは通常のwriteデータと共にメモリ上にため込まれます。
そして、通常の書き込みプロセスと同様にwriting block単位で圧縮書き込みされます。
書き換え前のデータは不要になりますが、これはひとまず、メタデータ上のみで無効化されます。
その後、システム負荷を見計らいつつ、データ再配置処理がおこなわれ、空き領域が回収されます。

・え?データは圧縮されてるのに、再配置ってどうやるの?
はい、データが圧縮書き込みされているので、単純な再配置処理ではありません。
再配置は、不要になったデータが含まれているwriting block単位でおこなわれます。
まず、writing block内にある有効なデータをメモリ上に読み込みます。
この読み込んだデータと、通常のwriteデータを合わせて、新規のwriting blockとして、ディスクに書き込みをおこないます。
その後に、元々のwriting blockを無効化し、再利用可能状態にします。

・SSDを冗長化してないけどいいの?
キャッシュでしかないので問題ない。
壊れたらそのSSDを使わなくなるだけで、他のSSDを使って改めてキャッシュされる。
SSDを交換したら、改めて使用される。

・いろいろモデルがあるけどどういう違い?
CS2xxとCS4xxは、CPUの違い
CS220/240/260およびCS420/440/460は、それぞれSATA HDDの容量の違い。
Baseモデルとx2 Flashモデル、x4 Flashモデルの違いは、4本入っているSSDの容量の違い。
例えば、CS220のBaseモデルだったら80GB SSDが4本で320GB、という感じ。

・複数Shelfとかクラスタを組んだ時とかってデータ配置どうなるの?
初期配置としては、均等になるようばらばらに割り振る。
使っていくうちにデータ使用量の偏りが出てくる。
そのような場合は、Re-balance処理が実施され、均等になるように再配置される。
Re-balance処理は低プライオリティで実行されるためパフォーマンス影響は少ない。

・いい資料が見付からないんだけど
Nimble storage Communityを探すといろいろ出てくるよ。

IBM版LTFSをRHEL5で使ってみた

IBMのLTOチェンジャーを使ってLTFSを構築することになったので、やってみた。

用意するもの
・Linux用LTOドライバ lin_tape
 配布はlin_tape-バージョン.src.rpmという形のsource rpmなので、rpmbuildでコンパイルする
・IBM版LTFS LE(Library Edition)
 IBMページを起点に入手・・・と行きたいところだが、実際には気軽に入手できないので注意。
 IBM LTOチェンジャーを買うと、IBM営業経由でSoftware CDを入手することができる。
 Webで入手できるのはCDに対するアップデータで、ベースがないと動作しない。

手順

1. lin_tapeをインストール
 インストール後、/dev/st0、/dev/nst0という形だったLTOドライブは
 /dev/IBMTape0という名前になる。
2. 現状のデバイス名確認
 # ls -l /dev/IBM*
 「IBMChanger0」はLTOチェンジャー部分のデバイス
 「IBMtape0」はLTOテープドライブ分のデバイス
3. LTFS LEをインストール
 まぁ、普通にRPMをインストール

・LTFS LEの起動
チェンジャーデバイスが「/dev/IBMchanger0」
LTFSのマウントポイントを「/ltfs」とする場合、以下の様に起動する。

[root@ltfs ~]# ltfs /ltfs -o changer_devname=/dev/IBMchanger0
LTFS14000I LTFS starting, LTFS version 2.1.2.0 (2501), log level 2
LTFS14058I LTFS Format Specification version 2.1.0
LTFS14104I Launched by "ltfs /ltfs -o changer_devname=/dev/IBMchanger0"
LTFS14105I This binary is built for Linux (x86_64)
LTFS14106I GCC version is 4.1.2 20080704 (Red Hat 4.1.2-52)
LTFS17087I Kernel version: Linux version 2.6.18-194.el5 (mockbuild@x86-005.build.bos.redhat.com) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)) #1 SMP Tue Mar 16 21:52:39 EDT 2010 x86_64
LTFS17089I Distribution: Red Hat Enterprise Linux Server release 5.5 (Tikanga)
LTFS14063I Sync type is "time", Sync time is 300 sec
LTFS17085I Plugin: Loading "ibmtape" driver
LTFS17085I Plugin: Loading "unified" iosched
LTFS17085I Plugin: Loading "ibmtape" changer
LTFS17085I Plugin: Loading "ondemand" dcache
LTFS11593I LTFS starts with a product license version (20120712_1200)
LTFS12165I lin_tape version is 1.74.0
LTFS12118I Changer identification is '3572-TL         '
LTFS12162I Vendor ID is IBM
LTFS12159I Firmware revision is 0021
LTFS12160I Changer serial is 00000XXXXXXXXXXX
LTFS12196E IOCTL: INQUIRY PAGE -1056947426 failed -20501 (err 22) 00000XXXXXXXXXXX
LTFS12165I lin_tape version is 1.74.0
LTFS12158I Opening a device through ibmtape driver (/dev/IBMtape0)
LTFS12118I Drive identification is 'ULT3580-HH5     '
LTFS12162I Vendor ID is IBM
LTFS12159I Firmware revision is BBNF
LTFS12160I Drive serial is 1068082305
LTFS17160I Maximum device block size is 1048576
LTFS13500I On-demand dentry cache is initialized
LTFS11545I Rebuilding the cartridge inventory
LTFS14506I LTFS admin server is listening on port 2112
LTFS14111I Initial setup completed successfully
LTFS14112I Invoke 'mount' command to check the result of final setup
LTFS14113I Specified mount point is listed if succeeded
[root@ltfs ~]# 

注意:自動起動してくれないので、サーバを起動するたびに実行する必要がある。

・LTFSでのデバイス認識状況を確認

[root@ltfs ~]# ltfsadmintool -I
1068082305 -> Device: /dev/IBMtape0 [ULT3580-HH5] , Library address: 257, Status: Available
[root@ltfs ~]# 

ドライブが1台であるばあい、こんな風に表示される。

・LTFS上のテープメディア認識状況を確認
「ltfsadmintool -i」で確認します。

[root@ltfs ~]# ltfsadmintool -i
BMV157L5 -> Location: Medium storage element,    Address: 4095, Capacity:   0GB, Remaining:      0GB, Status: Unknown
BMV156L5 -> Location: Medium storage element,   Address: 4097, Capacity:   0GB, Remaining:      0GB, Status: Unknown
BMV158L5 -> Location: Medium storage element,   Address: 4099, Capacity:      0GB, Remaining:      0GB, Status: Unknown
[root@ltfs ~]# 

「Status: Unknown」となっている場合は、まだフォーマットされていないか、一度の読み込まれたことがないテープです。

・LTFSで利用するLTOテープをフォーマットする

[root@ltfs ~]# ltfsadmintool -t BMV157L5 -f 
LTFS15000I Starting mkltfs, LTFS version 2.1.2.0 (2501), log level 2
LTFS15041I Launched by "/opt/IBM/ltfs/bin/mkltfs -d /dev/IBMtape0 -s BMV157"
LTFS15042I This binary is built for Linux (x86_64)
LTFS15043I GCC version is 4.1.2 20080704 (Red Hat 4.1.2-52)
LTFS17087I Kernel version: Linux version 2.6.18-194.el5 (mockbuild@x86-005.build.bos.redhat.com) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)) #1 SMP Tue Mar 16 21:52:39 EDT 2010 x86_64
LTFS17089I Distribution: Red Hat Enterprise Linux Server release 5.5 (Tikanga)
LTFS15003I Formatting device '/dev/IBMtape0'
LTFS15004I LTFS volume blocksize: 524288
LTFS15005I Index partition placement policy: None
LTFS17085I Plugin: Loading "ibmtape" driver
LTFS12165I lin_tape version is 1.74.0
LTFS12158I Opening a device through ibmtape driver (/dev/IBMtape0)
LTFS12118I Drive identification is 'ULT3580-HH5     '
LTFS12162I Vendor ID is IBM
LTFS12159I Firmware revision is BBNF
LTFS12160I Drive serial is XXXXXXXXXX
LTFS17160I Maximum device block size is 1048576
LTFS17157I Changing the drive setting to write-anywhere mode
LTFS15010I Creating data partition b on SCSI partition 1
LTFS15011I Creating index partition a on SCSI partition 0
LTFS12207I Logical block protection is disabled
LTFS17165I Resetting the medium's capacity proportion
LTFS11097I Partitioning the medium
LTFS11100I Writing label to partition b
LTFS11278I Writing index to partition b
LTFS11100I Writing label to partition a
LTFS11278I Writing index to partition a
LTFS15013I Volume UUID is: ae724b01-e9ce-40b8-8786-573eab051801
LTFS15019I Volume capacity is 1425 GB
LTFS12207I Logical block protection is disabled
LTFS15024I Medium formatted successfully
Tape BMV157L5 successfully formatted or unformatted.
[root@ltfs ~]# 

なお、一度、LTFSでフォーマットしたことがあるメディアは、上記のコマンドではフォーマットできない。
「ltfsadmintool -t BMV157L5 -f — -f」というふうに「– -f」というオプションをつける必要がある。

・LTFSでフォーマットされ、認識されたことを確認
下記は、BMV157L5 とBMV156L5をフォーマットした後の表示です。

[root@ltfs ~]# ltfsadmintool -i
BMV157L5 -> Location: Data transfer element,    Address:  257, Capacity:   1327GB, Remaining:   1296GB, Status: Valid LTFS
BMV156L5 -> Location: Medium storage element,   Address: 4097, Capacity:   1327GB, Remaining:   1296GB, Status: Valid LTFS
BMV158L5 -> Location: Medium storage element,   Address: 4099, Capacity:      0GB, Remaining:      0GB, Status: Unknown
[root@ltfs ~]# 

・テープへの書き込み

/ltfs/の下を覗くと、バーコードラベルのディレクトリが表示されます。
そこにcdコマンドで移動したり、cpのコピー先として指定したりすることで
通常のファイルシステムと、ほぼ同等に使うことができます。

ネットワークストレージ業界の標準ハードウェアSupermicro 6036ST-6LR

ここ2年ぐらいの間に、いろんな形でのSSD/FlashとHDDを組み合わせた形で高速化を図っているネットワークストレージ(NFS/iSCSI)の製品が出ています。

以前、うちのblogでも紹介したTintri VMstoreNimbleStorageがそんな感じの製品です。

で・・・Tintri VMstoreは特徴がそのままだったので、すぐにわかったのですが、
NimbleStorageも、よくよく調べてみれば情報があり、正体がわかってきました・・・

どっちも、Supermicro社のSuper Storage Bridge Bay (SBB)シリーズSYS-6036ST-6LRでした。(日本の代理店ページ)

まぁ、マザーボードを2枚積んで、両方のシステムからストレージベイにアクセス出来るようなサーバ筐体で、汎用的な製品が他にないので、こうならざるおえないですけどね。

1筐体にマザーボードが2枚積まれていますが、マザーボード間は10GbpsのNIC 2組でクロス接続されており、そこを使ってアクティブ/スタンバイ監視をおこなったり、キャッシュ情報のやりとりなどをおこなったりします。
(まぁ、そこらへんは、ソフトウェア実装に依存しますが)

また、マザーボードには拡張スロットが3つ(PCIe x8が1,PCIe x4が2)と、SASポートが1つあるので、拡張性という面でもまずまずなところです。

Tintri VMstore T540の方は、拡張筐体をサポートしていませんが、
NimbleStorage CS2xxシリーズの方は、拡張筐体をサポートしています。

まぁ、肝心なのは上に載せるソフトウェアの問題なので、ハードウェアが一緒であったとしても、違いが出せれば問題ないですけどね

SoftNASという仮想マシンとして立てるCentOS+ZFSのNAS

2021/02/10追記

2020/04/21にSoftNAS社Buurst社となっていた(Learn the new rules of cloud storage)。
プロダクトとしては引き続きSoftNASという名称のままである。

2021年1月にCentOS8.2ベースにsamba 4.12を載せたSoftNAS 5がリリースされていた(Announcing SoftNAS 5 – a Modern Approach to Cloud NAS)。

これまでのリリースノート一覧ドキュメントなども見やすい形で公開されるようになっていた。

ただ、以前あったDeveloper Editionは消えて、Demo版がAWSAzure上で展開できる、という形がメインになっている模様で、ローカルのvSphere上で展開する用のファイル提供の入手は面倒になっているようだ。



2019/01/23追記

2019年1月現在、SoftNAS Essentialsは有償プランの1つとなり、無償で使えるものは「SoftNAS Developer Edition」となった。使用可能容量も250GBまでと大きく制限されている。Amazon AWS, Microsoft Azureのマーケットプレイスにイメージが並んでいるので、そこからデプロイできる他、スタンドアローンのvSphere上にデプロイするためにSoftNAS-4.0.1.ovaが提供されている。

以下は2013年3月記載の古い記述となります。


SoftNASというものがあるらしい。

・CentOS6ベース
・ファイルシステムはZFS
・vSphereやHyper-Vの上に仮想マシンとして動作させる
・Amazon EC2用も用意されている
・検証用にVMware Workstation 8.xもサポート
・割り当てるCPUリソースは2vCPU~8vCPU
・割り当てるメモリリソースは2GB~32GB
・Dedupe機能あり(1TBにつきメインメモリ1GB追加使用)
・Thinprovisionおよび圧縮
・NFS/CIFS/iSCSIを提供できる
・Volumeスナップショット
・レプリケーション機能あり
  → Amazon EC2上に立てたサーバにレプリケーションできる
・ZFS L2ARCを利用したSSD利用の高速化

SoftNAS Essentials」という機能限定版は無償利用可能。
限定の内容の抜粋
・1TBまで
・以下の機能が使えない
 ・SSD利用の高速化
 ・iSCSI機能
 ・レプリケーション
 ・スナップショットのスケジューリング

詳細の違い

まぁ、おもしろそうではあるので、ちょっと試しに使ってみるかな


インストールしてみた

・CentOS 6.3 x86_64
・kernelはCentOS標準を利用している
ZFS on Linux利用
zfs-0.6.0-rc14.x86_64, zfs-modules-dkms,zfs-dracut,zfs-test
・独自Web GUI+Webmin
・NFSやCIFS設定はWebmin画面という感じ
・独自Web GUIは、iconCubeを使って暗号化処理をおこなっている
・独自Web GUIは多言語対応を考慮に入れてないっぽい
・LinuxはGUIログイン
・Chromeインストール&yum repo登録済
・sysctlに特にコレといったパラメータが入れられてない
・/etc/sysconfig/nfsとか/etc/init.d/nfsにも特にパラメータが入ってない
・「Software Updates」は、あくまでSoftNASに関するモジュールのみで、CentOS自体のアップデートは対象外


微妙だなぁ、と感じた、もっとも大きな点は、管理UIの不徹底です。

新規で使う際、以下の順序で操作をおこなっていきます。

1. Webにログイン
main-001
独自のAJAXなUIです。

2. 「Disk Devices」にて空きディスクにパーテーション設定

この画面はWebminそのままです。

3. 「Storage Pools」にてディスクの登録

独自のAJAXなUIです。

4. 「Volumes and LUNs」にてボリューム作成

独自のAJAXなUIです。
ここでボリュームを作成すると、マウントされるようになります。

5. 「NFS Exports」にてNFSマウントの設定

この画面はWebminそのままです。
NFSv4対応のwebmin設定画面はPseudofilesystemの関連でちょっとわかりにくいのですが、放置です。

6. 「CIFS Shares」にてCIFS関連設定

この画面もWebminそのままです。
なお、説明書を見ると、CIFS設定は、別途コマンドおよびファイル編集が必要、と書いてあります。

というわけで、使いやすそうな雰囲気がするGUIのわりに、手を抜いてる場所が結構あるせいで、操作感の統一がされておらず、説明も足りてないので、非常に使いにくい感じになっています。

はたして、これは修正されていくのでしょうか・・・???

モバイルバージョンを終了