1. HOME
  2. Blog
  3. コラム
  4. 宮崎悟のUbuntuでZFSを使ってみよう

更新情報

NEWS

宮崎悟のUbuntuでZFSを使ってみよう

UnuntuでZFSを使ってみよう第6回「DRBDでZFS ボリュームを同期する」

前回では、ZFSのファイルシステムやボリュームを作成する方法を説明しました。今回は、Ubuntuという部分を全面に出して、DRBDで2つのサーバ間のZFSボリュームを動悸する方法を紹介したいと思います。 DRBDとは DRBD(Distributed Replicated Block Device)は、TCP/IPネットワークを通じて複数のサーバ間のHDD(パーティション)をミラーリング(複製)するソフトウェアで、HAクラスタでのディスク同期によく使用されます。DRBDは主なLinuxディストリビューションのみをサポートし、SolarisやBSD系のOSをサポートしません。 DRBDのインストール 今回Ubuntu18.04へインストールする際に、LinbitのDRBD9 stackを使用します。2台のUbuntu18.04+ZFSを用意し、以下の手順でPPAの追加、およびDRBDとlinstorというストレージの構成管理システムをインストールします。 今回は、以下の構成としています。 ホスト名 IPアドレス ubuntu-zfs01 192.168.33.12 ubuntu-zfs02 192.168.33.13 また、以下の設定を上記2台のホストに実施します。 rootユーザでの相互sshログオン可能な状態にする zfsとしてrpool/vol01 というZFSファイルシステムを作成する DRBDの設定 ubuntu-zfs01で以下の動作を行い、ノードの設定を行います。初期状態ではノードが登録されていないので、用意した2台を追加します。SATELLITEが、ディスクを提供するノードになります。 次に、ストレージプールpool1とボリュームvol1を追加します。 po1GBのvol1というリソースを作成したため、/dev/drbd1000 というデバイスが作成されました。 Primaryがubuntu-zfs01なので、/dev/drbd1000 はubuntu-zfs01から操作可能です。ubuntu-zfs02からはデバイスとして認識されません。 ファイルシステムの作成と同期の確認 作成したデバイスをxfsでmkfsしてマウントし、ファイルが書き込めることが確認できました。 それでは、ubuntu-zfs02へ切り替えてみます。手動でumountし、drbdadmでsecondary/primaryを切り替えます。 これで、ubuntu-zfs02でもvol1をマウントし、書き込めることが確認できました。ubuntu-zfs01へvol1を戻すときは、逆の手順を行うだけです。 DRBDとZFS 既にDRBDでは、ZFSをサポートしていることがわかったと思います。今回はDRBDの切替動作を手動で行いましたが、通常DRBDの切替動作はHeartbeatなどのHAクラスタソフトにより実施されます。DRBDには他にも様々な動作を行うことができますので、その詳細についてはLINBITのユーザガイドを参照ください。 次回からは、またZFSの機能について説明したいと思いますのでお楽しみに。 さて、このコラムを掲載いただいているデジタル・ヒュージ・テクノロジー社は老舗のOSSインテグレーターです。特にLinuxは強く、OSSを活用した業務システムの実績も多いです。興味がある方は以下のページもご覧ください。 DHT OSS導入コンサルティングサービスhttps://kusanagi.dht-jpn.co.jp/solutions/dht-oss-consulting/

Web更新

宮崎悟氏の「UbuntuでZFSを使ってみよう」第5回 「ZFSのファイルシステムとボリューム」

前回ではZFSのストレージプールについて説明しました。今回は、ZFSのストレージプールから作成される、ファイルシステムとボリュームについて説明したいと思います。 ZFSのファイルシステム ZFSはその名の通り、Ubuntuを始めとするOSからファイルシステムとして認識されます。zpoolコマンドでストレージプールを作成すると、デフォルトで作成されたストレージプールと同じ名前のファイルシステムが作成され、rootファイルシステム以下にマウントされます。これがZFSのファイルシステムとなります。 zfs create コマンドを使用して、既存のファイルシステムの下にファイルシステムを階層的に作成することも可能です。zfsでは、この様に作成したファイルシステム毎にいろいろな管理を行います。 zfsでは、ファイルシステム毎に attribute と呼ばれる属性が設定できます。mountpointもその属性の一つです。試しに、tank/abcのmountpointを変更します。 この様に、ファイルシステム毎に自動的にマウントポイントは作成されますが、手動で変更することも可能です。また、zfs作成時に、オプション指定により設定変更した状態でファイルシステムを作成することも可能です。 zfs listで表示されるUSEDとAVAILが、現在の使用しているディスクサイズと使用可能なディスクサイズなります。tank/abc に100MBのファイルを作成すると、tank/abcだけでなく、tankの使用量も増えます。子ファイルディスク全体の使用量および容量が、全ストレージプールで共用することになることに注意しましょう。 ZFSボリューム ZFSは、ファイルシステムだけではなく、ボリュームという仮想ディスクとして扱うことが出来るデバイスを作成することも可能です。zfs create -V サイズ ボリューム名 を実行すると、どこにもマウントされないZFSボリュームが作成されます。 このZFSボリュームは、/dev/zvol 以下のデバイスファイルとして作成されます。 ディスクデバイスとして、fdiskやgdiskで確認可能です。下記のように、フォーマットされていない200MBのディスクデバイスとして認識されます。 この領域は、フォーマットしてxfsなどのファイルシステムをその上に構築したり、swap領域に使用したりできます。Solaris11では、ZFSボリュームがswapとして標準的に使用されたり、iSCSI/FC/FCoE/Infinibandで共有されるボリュームとして使用されることがあります。UbuntuでもiSCSIターゲットにすることは可能なようです。 今回は、ファイルシステムとボリュームについて話しましたが、次回はボリュームのちょっと変わった使い方について述べようと思いますので、お楽しみに。 さて、このコラムを掲載いただいているデジタル・ヒュージ・テクノロジー社は老舗のOSSインテグレーターです。特にLinuxは強く、OSSを活用した業務システムの実績も多いです。興味がある方は以下のページもご覧ください。 DHT OSS導入コンサルティングサービス https://kusanagi.dht-jpn.co.jp/solutions/dht-oss-consulting/

コラム

宮崎悟氏のUbuntuでZFSを使ってみよう第四回「ZFSで使用できるストレージプールを確認しよう(2)」

前回のおさらい 前回はzpoolで基本的なRAID構成であるストライプとミラーが構成できることを説明しました。 さて今回は、zpoolで構築できる、RAID5以上のボリュームについて説明したいと思います。 RAIDZ RAIDZ(RAIDZ1とも呼びます)はいわゆるRAID5に相当する構成です。データはブロックサイズで分散してディスクに配置し、そのデータブロックのパリティ(誤り訂正補正)を他ディスクに分散して配置します。そのため、構成するディスク1台が故障してもディスクを交換すれば、パリティからデータを復旧することが可能になります。 今回は1GBのファイルを複数用意して、挙動を確認します。 RAIDZは以下のように作成します。RAID5と同様に、3つ以上のディスクで構成します。 zpoolでは2.9GBですが、zfsとしては1.8GBが確保されます。zpool/zfs合わせて200MBほどが管理領域として確保されます。 RAIDZ2、RAIDZ3 RAIDZ2はRAID6相当で、RAIDZがパリティ1つなのに対し2つのパリティを持ちます。また、3つのパリティを持つRAIDZ3もあります。RAIDZ2~3のパリティはそれぞれアルゴリズムが異なるものを使用し、パリティが破壊されても他アルゴリズムでの復旧を行うことで、さらに堅牢性をあげています。 RAIDZ2/RAIDZ3は以下のように作成します。RAIDZ2は4本以上、RAIDZ3は5本以上のディスクで構成します。 RAIDZ2、RAIDZ3ともに、zpool上では構成したディスクの本数に比例した容量を持ちますが、zfs上ではRAIDZと同じ1.8GBが有効な容量となります。 RAIDZのストライプ構成 RAIDZ1~3は、複数個束ねてストライプ構成にすることが可能です。いわゆるRAID50やRAID60のような構成です。RAIDZ1~3は、パリティ計算をCPUで行うことからストライプ幅(構成するディスク量)を多くしても遅くなりがちですが、RAIDZ1~3をストライプ構成することにより、高速化することが可能です。 これらの構成は、同じRAID構成であればストレージプールに追加可能ですが、ストライプ幅やRAID構成が異なるものを追加することは出来ません。それぞれ、以下のようにエラーが発生します。 今回はストレージプールについて説明いたしたが、いかがだったでしょうか。次回はストレージプールとZFSの関係について説明していきたいと思いますので、お楽しみに。 さて、このコラムを掲載いただいているデジタル・ヒュージ・テクノロジー社は老舗のOSSインテグレーターです。特にLinuxは強く、OSSを活用した業務システムの実績も多いです。興味がある方は以下のページもご覧ください。 DHT OSS導入コンサルティングサービス https://kusanagi.dht-jpn.co.jp/solutions/dht-oss-consulting/

Web更新

宮崎悟氏のUbuntuでZFSを使ってみよう第3回 「ZFSで使用できるストレージプールを確認しよう(1)」

前回のおさらい 前回は100MBのファイルを使用して、zpoolを作成してみました。指摘されて気づいたのですが、100MBの領域なのに、zpoolでは80MB、zfsでは40MBとかなり少なくなっています。 これは、zpoolおよびzfsの管理領域として、ある程度大きい領域を使用するためです。実際には数TBのzpoolを使うことが殆どで、その場合どれほど増やしても200MB程度でした。今回はテストのため、小さい領域を作ったためこのような減少が起きたのです。興味深いですね。 さて、今回は、zpoolで、色々なボリュームが作成できることを説明したいと思います。 ストライプ ストライプとは、いわゆるRAID0に辺りディスクに分散してファイルの読み書きを行うものです。ZFSでは正確にはストライプとは違うのですが、ストライプに近いことを行うことが出来ます。 # dd if=/dev/zero of=/tmp/disk1 bs=$((1024*1024)) count=1000 # dd if=/dev/zero of=/tmp/disk2 bs=$((1024*1024)) count=2000 # zpool create tank /tmp/disk1 /tmp/disk2 # zpool list tank NAME   SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT tank  2.91G   273K  2.91G         –     0%     0%  1.00x  ONLINE  – $ zpool status tank pool: tank state: ONLINE scan: none requested config:   NAME          STATE     READ WRITE CKSUM tank          ONLINE       0     0     0 /tmp/disk1  ONLINE       0    ...

Web更新

宮崎悟の「UbuntuでZFSを使ってみよう」第2回「UbuntuにZFSを入れてみよう」

UbuntuとZFSのライセンスについて さて、前回は色々と反響があったようで、大変嬉しく思います。その中で、UbuntuでZFSカーネルモジュールをバイナリ配布することに対する懸念を抱くご意見を多くいただきました。 UbuntuはGNU/Linuxのディストリビューションであり、LinuxカーネルはオープンソースライセンスであるGPLv2となっています(詳細はLinux Kernel license rules を参照ください)。一方、Ubuntuに含まれるOpenZFSは、Sun Microsystems(現在はOracleにより買収済み)がCDDLというオープンソースライセンスで公開されており、このCDDLはGPLと共存できないライセンスとなります。Linux著作権保持者は、UbuntuがLinuxカーネルモジュールとしてZFSをバイナリ配布することがライセンス違反であると声明を出しております。 UbuntuでのZFSカーネルモジュールのバイナリ配布は、この訴訟により中止になる可能性があることをご認識ください。 OpenZFSとは Ubuntuで配布されているZFSは、OpenZFSの成果を利用しています。OpenZFSは、CDDLで配布されたOpenSolarisのソースコードを元にしており、illumos(OpenSolarisベースのカーネル実装)、FreeBSD、Linux、Mac OSX用のソースコードを公開しています。 UbuntuでZFSを使用してみる では、早速UbuntuでZFSを使用してみましょう。 まずは、どこのご家庭にもあるUbuntu18.04LTSの仮想マシンもしくは物理マシンを用意します。 以下のコマンドで、パッケージを最新状態にした後、を実行することで、OpenZFSが使用できるようになります。 % sudo apt update % sudo apt upgrade –y % sudo apt install zfsutils-linux -y ZFSを実用で使う場合は、HDDやSSDを使用しますが、まずは100MBのファイルを使用してZFSの操作を試してみましょう。 zpool create コマンドを実行することで、ファイルdisk01を使用した、tank という名前のzpoolが作成されます。 % dd if=/dev/zero of=/tmp/disk01 bs=1024 count=102400 % ls -lh /tmp/disk01 -rw-r–r– 1 s-miyaza s-miyaza 100M 10月 29 20:49 /tmp/disk01 % sudo zpool create tank /tmp/disk01 % sudo zpool list NAME   SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH ...

宮崎悟のUbuntuでZFSを使ってみよう

宮崎悟の「UbuntuでZFSを使ってみよう」第1回 「Linuxのファイルシステムについて」

はじめに 皆様はじめまして、宮崎と申します。今回より、このコラムを始めさせていただくことになりました。よろしくお願いします。 さて、SolarisとZFSとZoneがダイスキな私ですが、今時のSolarisの不憫さのため、せめてZFSの良さを皆様にお伝えしたく、このコラム執筆を引き受けました。このコラムを書かせていただくからには、もうZFSから離れられない体にすべく布教に努めさせていただく所存でございます。 ファイルシステムとは さて、ZFSを語る前に、ファイルシステムとは何かというところをもう一度おさらいしてみましょう。 Wikipediaでは「コンピュータのリソースを操作するための、オペレーティングシステム (OS) が持つ機能の一つ」とあります。 その中には、HDDやSDDなどのストレージを扱うディスクファイルシステムや、デバイス・プロセス・カーネル内の情報を扱うprocfsのようなものがあります。 今回はディスクファイルシステムについて語るわけですが、現在Linuxで使用可能な主要ディスクファイルシステムについてまとめてみました。 名称 最大 ファイル名長 ディレクトリ名 使用文字種 最大 パス名長  最大 ファイル サイズ 最大 ボリューム サイズ Btrfs 255B 任意 バイト列 定義 無し 16EB 16EB ext2 255B 任意 バイト列 定義 無し 16GB~2TB 2TB~32TB ext3 255B 任意 バイト列 定義 無し 16GB~2TB 2TB~32TB ext4 255B 任意 バイト列 定義 無し 16GB~16TB 1EB FAT32 8.3形式(または255文字) 全Unicode 定義 無し 4GB 512MB~2TB JFS 255B 任意 バイト列 定義 無し 8EB 512TB~4PB NTFS 255文字 全Unicode Unicodeで32,767文字...

コラム