大容量データをすばやくコピー

テラバイト(TB)レベルのデータを共有するには…

タブレットやスマートフォンをはじめ、日常生活でデジタルデータを扱う機会は年々増えているのではないでしょうか。例えば「見たいテレビ番組をHDDに録画する」とか「ダウンロードした電子書籍を電車の中で読む」ということは日常的に行われています。ここ数年では、CPUやストレージの性能向上に比例して、手軽に扱えるデータ量も数十GB、数百GBから数TBまで変化してきています。そのため、音楽や映像など代表的な大容量データでは、コピーや転送に時間がかかります。保存に際しては、光学メディアでは容量不足となってしまうこともしばしばあります。

そうだ、NAS作ろう。

NASとは

NASの辞書的な意味についてはこちら

NASはTeraStationなどのメーカー製品もありますが、作ることもできます。「RAID」という複数台のハードディスクを組み合わせることで、仮想的な1台のハードディスクとして運用する技術を使います。RAIDを構築すれば、例えば1台のハードディスクが壊れても使い続けることができます。ハードディスクの容量はテラバイト(ギガバイトの約1000倍)単位のものを使えば大容量になります。

LANに高速大容量のNASを構築して、データをすばやく共有できるようにしてみた

筆者が普段WordやExcelで作ったファイルを社内でやりとりする分には、メール転送でもほぼ問題ありません。しかし、音楽や映像の専門業務レベルでは、数百GBのデータをやり取りする過程で、「HDDなど記録容量が大きいストレージ製品を手軽に持ち運べたら便利なのに…」と考えることもあるかもしれません(特にHDD納品など)。そんな時、データを読み込む装置(パソコンなど)とデータを記憶する装置(HDDなど)が独立していれば、簡単に取り外せて気軽にデータを持ち運ぶことができます。今回はそれを可能にするシステムを作ることにしました。(…といっても材料はどこにでもあるものです)

たどり着いたのが、CentOSとファイルサーバSambaを使ったデータ共有システムです。Sambaはファイルサーバ機能を持つオープンソースソフトウェアです。

samba-swat

SambaのGUI設定ツールsamba-swat

先週の記事では、Pogoplugを使って、いつでもどこでも遠隔地のデータにアクセスできる仕組みを紹介しました。今回は有線GbEthernetで構築された、高速なLAN環境でのデータ共有に焦点を絞りました。

企画主旨

今週の企画主旨

目指すもの

以下の3点です。

データの読み書きが速い
幅広い環境・用途で使える
低予算で高品質を実現する

今回使ったもの

Samba用のLinuxサーバ(スペックはこちら)、4Bay RAIDケース、4TB HDD×4、LANケーブル2本(サーバNICの冗長化用)

※Linux上では4TB×4のHDDが最大15TBまでしか認識されませんでした。それでも最大で約23TBのNASを作ることができます!(サーバ内蔵HDD 4TB×2+RAIDケース接続HDD 4TB×4)

ハードの見た目は小さい箱が2つくっついている感じです。写真左側が4Bay RAIDケース、写真右側がSambaサーバです。

自作NASシステム

仕組みとして必要な要件とは?

  1. 手動マウント式でHDDとRAIDケースが分離できること(手で「ガチャッ」と外せる)
  2. RAIDケースとパソコンの接続、取り外しが簡単にできること
  3. 手間や時間をかけずにHDDの持ち運びができること
  4. WindowsでもMacでも読み書きできること
  5. HDDは入手しやすいSATA接続であること
  6. データの転送速度が速いこと

数百GB、数TB単位のデータでもOK!

現在WindowsとMacの両方で読み書きできるフォーマット形式は、FAT32かexFATのどちらかです。しかし、FAT32ではファイルサイズの制限が4GBまで、さらにWindows上からは32GBまでの領域しかフォーマットできない欠点があります。そこで、4Bay RAIDケースに入れるHDDのフォーマット形式にはexFATを採用します。exFATはSDXCメモリカード等では標準的なファイルシステムとして採用されています。ただし注意点として、SP1未適用のVistaやexFATパッチ・アップデートを適用していないXPでは読み書きできません。

exFATをサポートするOSについてはSANDISK社が公開していますので、そちらをご覧ください。(以下、SANDISK社へリンク)
http://kb-jp.sandisk.com/app/answers/detail/a_id/5324/~/exfat%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%92%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E3%81%99%E3%82%8Bos

※もちろんCentOS標準のext4でフォーマットしても良いのですが、その場合データを読み出す拠点にもext4をマウントできるSambaサーバを立てる必要があります。

【CentOS 6.4にexFAT形式のHDDをマウントする方法】

exFATでフォーマットされたHDDは、そのままではCentOSにマウントできません。そのため、マウントするために以下の具体的な準備が必要になります。なお、必要なソフトウェアは下記サイトからダウンロードして下さい。また、WindowsやMacでexFATのHDDを作ることもできますが、ここでは割愛します。
http://download1.rpmfusion.org/free/el/updates/6/x86_64/repoview/index.html
①fuse-exfat-1.0.1-1.el6.x86_64.rpm
②exfat-utils-1.0.1-1.el6.x86_64.rpm

  1. ①をダウンロードします
  2. ②をダウンロードします
  3. rpmコマンドで①と②をインストールします
    # rpm -ivh fuse-exfat-1.0.1-1.el6.x86_64.rpm
    # rpm -ivh exfat-utils-1.0.1-1.el6.x86_64.rpm
  4. fdiskコマンドでフォーマットしたいHDDのデバイス情報を確認
    # fdisk -l
  5. exFATでHDDをフォーマットします。(以下は、/dev/sdcをexFATでフォーマットした例です。ご自身の環境に置き換えて実行して下さい)
    # mkfs.exfat /dev/sdc
  6. 最後に、mount.exfat-fuseコマンドで、任意のディレクトリにexFATでフォーマットしたHDDをマウントします(以下は、/exfat [権限777] 以下に/dev/sdcをマウントした例です。ご自身の環境に置き換えて実行して下さい)
    # mount.exfat-fuse -o umask=000 -o uid=500 /dev/sdc /exfat/
    ⇒これで/exfat以下にマウントされるので、smb.confに共有領域の設定を行えば、Linux上でもデータの読み書きができるようになります。(なお、exFATではLinux上で所有権や所有者を変更することができないので、作成した共有領域は自動的に所有者が「root」、所有権が「755」になります。これを外すために上記のオプションを使用しています。オプションを付加することで、Sambaユーザ権限での読み書きができるようになります。

※しかし、実験してみてわかったことですが、exFATでフォーマットしたHDDをSamba共有領域に設定した場合、半角英数ファイル名の場合では正常に読み書きできますが、マルチバイト文字(日本語)が含まれるファイル 名では書き込むことができませんでした。(ext4でフォーマットしたHDDではLinux上で日本語ファイルの読み書きが可能です)

Sambaを使うメリット

  • 導入コストが低い(オープンソースのため実質フリー)
  • ハードウェアスペックを自由に選択できる(特に高性能なCPUと大容量メモリを採用できる)
  • 豊富なSambaのパラメータを利用できる(メーカー製のNASではできない細かな設定ができる)
  • 用意したLinuxサーバにLANポートが複数ある場合、ネットワークインターフェイスを冗長化(並行して負荷分散も)できる
  • 余っているリソースで別目的のサーバを立てることもできる
  • Samba4では最新のActive Directory機能を使うことができる
  • ファイル共有領域を異なる運用ポリシーで使える
  • 共有領域にゴミ箱を設置したり、リポジトリを作成できる

今回用意したLinuxサーバでは、

メモリ16GB、CPU Intel Core17-2600S、LANポート×3、USB3.0×2を搭載しています。
ネットワークインターフェイスを冗長化して、4Bay RAIDケースとはUSB3.0接続のため、信頼性の確保と転送速度の低下防止ができます。

【ネットワークインターフェイスを冗長化して、データの高速転送を実現する方法】

TeraStation等でサポートされている製品もあるようですが、ここでは手作業で組んでしまいます。NICを冗長化することを「ボンディング」といったりもします。

ネットワークの分野で、コンピュータに装着された複数のネットワークアダプタ(NIC)を束ねて一つのアダプタとして運用し、負荷分散や帯域向上、耐障害性の向上を図る技術のことを「チャネルボンディング」(channel bonding)あるいは単にボンディングという。「チーミング」(teaming)とも呼ばれる。(IT用語辞典 e-Wordsより引用)

以下の手順で設定していきましょう。設定方法はこちらのブログを参照させていただきました。

  1. NetworkManagerを無効化する
    # /etc/init.d/NetworkManager stop
  2. NetworkManagerの自動起動を停止
    # chkconfig NetworkManager off
  3. /etc/modprobe.d/bonding.confの設定(無い場合は新規作成します)
    # vi bonding.conf
    alias bond0 bonding
    options bonding mode=0 miimon=100

    (ここでは「mode0」を指定していますが、お好みの設定でOKです。modeについては、こちらのブログで非常に詳しく解説されています )
  4. /etc/sysconfig/network-scripts/ifcfg-eth1の設定(ネットワークデバイス名とIPアドレス等はお使いの環境に置き換えて下さい)
    # vi ifcfg-eth1
    DEVICE=”bond0″
    BOOTPROTO=”static”
    IPADDR=”192.168.X.XXX”
    NETWORK=”192.168.X.X”
    NETMASK=”255.255.255.0″
    ONBOOT=”yes”
    BONDING_OPTS=”mode=0 primary=eth1 miimon=100″
    GATEWAY=”192.168.X.X”
    ⇒このあと同様に/etc/sysconfig/network-scripts/ifcfg-eth2も設定します。
  5. /etc/sysconfig/network-scripts/ifcfg-bond0の設定(IPアドレス等はお使いの環境に置き換えて下さい)
    # vi ifcfg-bond0
    DEVICE=”bond0″
    BOOTPROTO=”static”
    IPADDR=”192.168.Y.Y”
    NETWORK=”192.168.Y.Y”
    NETMASK=”255.255.255.0″
    ONBOOT=”yes”
    BONDING_OPTS=”mode=0 primary=eth1 miimon=100″
    GATEWAY=”192.168.Y.Y”
  6. ネットワークの再起動を行います
    # /etc/init.d/network restart
  7. ボンディング設定の状態確認(以下は表示例です)
    # cat /proc/net/bonding/bond0
    Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)

    Bonding Mode: load balancing (round-robin)
    MII Status: up
    MII Polling Interval (ms): 100
    Up Delay (ms): 0
    Down Delay (ms): 0

    Slave Interface: eth1
    MII Status: up
    Speed: 1000 Mbps
    Duplex: full
    Link Failure Count: 3
    Permanent HW addr: 68:05:ca:0b:61:26
    Slave queue ID: 0

    Slave Interface: eth2
    MII Status: down
    Speed: Unknown
    Duplex: Unknown
    Link Failure Count: 4
    Permanent HW addr: 68:05:ca:0b:61:27
    Slave queue ID: 0
    ⇒後はLANケーブル2本をハブに接続すればNICを冗長化したSambaファイルサーバの完成です!

RAIDケース(キット製品)を使うメリット

  • 市販のHDDや余っているHDDを使うことができる(メーカー完成品の場合、ストレージの交換はメーカー保証が切れてしまう。)
  • 気軽に取り外しができる
  • 手間や時間をかけずにHDDの持ち運びができる

実験に使用したFireRack RAID 4Bay USB3.0は、7つのモードから選択可能な「RAID機能」を搭載し、取り付けた4台のドライブを様々な方法で活用できます。

FireRack RAID 4Bay USB3.0についてはこちら
https://www.amulet.co.jp/products/RebDrive/SATA/FireRACKRAID_4Bay_USB30.html

ベンチマークテスト結果

CentOSをインストールした内蔵HDD(ext4、SATA接続)、RAIDケースに入れたHDD(ext4&exFAT、USB3.0接続)、および2.5″ 外付けHDD(exFAT、USB3.0接続)の4つのパターンでSamba共有領域を作り、速度の違いが出るか計測してみました。今回の実験では、速度性能を測るために、ext4ではRAID0モードを、exFATではSPANモードを使用しています。実際にファイルサーバとして使う場合には、RAID1やJBOD(RAIDなし)等が向いていると思います。(ただいま実験中です)
2.5″ 外付けHDD(USB3.0接続)は実験目的で付属的に行いましたが、パソコンにUSB3.0ポートがあれば、当然Mac、Windows、Linuxの全てで読み書き可能です。ポケットサイズなので可搬性は抜群です!
ベンチマークツールにはCrystalDiskMark 3.0.2を使用しました。

ext4フォーマットのHDD
(サーバ内蔵 SATA接続 RAID1)

CentOS用内蔵ext4フォーマット

ext4フォーマットのHDD
(外付け4Bay RAIDケース+USB3.0接続 RAID0)

RAIDケースext4フォーマット

GbEで転送しているだけあって、それなりの速度が出ています。外付けRAIDケースはUSB3.0接続のため、内蔵SATA HDDとほぼ同等の性能です。実際にGB単位のデータをコピーしてみると、おおよそこの結果通り100MB/s位の書き込み速度でした。

exFATフォーマットのHDD
2.5″ 外付けHDDケース+USB3.0接続 HDD単体)

2.5インチexFATフォーマット-USB3.0接続

exFATフォーマットでは、4KB単位のランダムアクセスが極端に遅くなっているようです。しかし、シーケンシャルアクセスはext4とほぼ同等で、実際に3GBのファイルをコピーしてみたところ、30秒前後で終了し、同じく100MB/s位の書き込み速度でした。

exFATフォーマットのHDD
(外付け4Bay RAIDケース+USB3.0接続 SPAN)

RAIDケース内蔵exFATフォーマット-USB3.0接続-SPAN

4Bay RAIDケースでexFATフォーマットした場合のパフォーマンスは、2.5″外付けHDD単体とほとんど変わりませんでした。10TBを超えるスペースでデータを共有したい場合にはRAIDケースを使ってJBODやSPANで組むと便利そうですね。どれも似通った値が出ていますが、現段階ではLinux上での限界なのではないかと推測しています。(Windows7に直接つないで測ると、それぞれ異なった値が出てきました)

まとめ

今回作ったシステムなら、以下の3つを実現できます!

高速性 高速CPU+ボンディングで、大容量データを高速かつOSの違いを気にせずに共有できる(GB単位のデータもOK!)
拡張性 LAN内に溜まったデータは、HDDごと取り外して簡単に持ち運べる(メディアが自由に広がっていけるイメージ)
低価格 メーカー製のNASと比べて低予算で業務効率をアップできる
可搬性とコストを重視する場合は、2.5″ 1TB HDDをUSB3.0接続で使うのもオススメです。

また、いざとなったらHDDごと持ち歩いた方が、インターネット経由で転送するより早い場合があります。「新宿から渋谷まで30分以内にウンTBのデータを渡さないといけない!」という時には、山手線に揺られて(あるいはタクシーで)物理的に運べます。データ共有イメージとしてはこんな感じです。

データの移動イメージ

ちょっと頑張らないといけないこと

  • ファイル共有システム構築のためにはLinuxの知識が必要
  • 管理者がいないとメンテナンス性に欠ける

しかし、ここを乗り越えれば低価格で高品質なシステムを作れることは確かです。特に少人数でも大容量のデータを共有したい場合に威力を発揮します!

大容量商用NASをご検討中の方や、今回ご紹介したシステムにご興味のある方はお問い合わせフォーム、または下記までお気軽にお問い合わせ下さい。
solutions@amulet.co.jp

☆関連商品のご購入はこちらから!
FireRACK RAID 4Bay USB3.0 16TB アミュレットから購入 Amazon.co.jpから購入
FireRACK RAID 4Bay USB3.0 8TB:アミュレットから購入 Amazon.co.jpから購入
FireRACK RAID 4Bay USB3.0
アミュレットから購入 Amazon.co.jpから購入

来週4/15(月)〜4/26(金)までの2週間、記事でご紹介したシステムの店頭デモ展示を行います。是非お越しください。