2015年9月27日日曜日

NASの自作 Part45

前回、Adaptec ASA-6805Hのファームウェアをアップデートした後に、Windows10が激遅になった問題ですが、記憶域スペースを削除することで解消しました。記憶域スペースに対する書き込みがあまりの遅いため、それに引きずられる形でWindowsが遅くなっていたのかもしれません。今日はOMVを再インストールしました。再インストールから設定の手順を通しでメモ書きしておきます。手順14を追加したことで最初のRAID構築の速度がかなり改善しました。


09. 各種ツールをインストール
apt-get update
# exFATをマウントできるようにする
apt-get install exfat-fuse exfat-utils
# unzipのインストール
apt-get install unzip
# Javaのインストール
apt-get install openjdk-7-jre
# vimのインストール
apt-get install vim vim-common
cp /usr/share/vim/vimrc ~/.vimrc
# syntax on を追記
vim ~/.vimrc
10. Adaptec ASA-6805Hのドライバのインストール
apt-get install linux-headers-$(uname -r) build-essential
apt-get install dkms
wget http://download.adaptec.com/sas/linux/adp80xx_linux_drivers_v1.2.0-10624.tgz
tar zxvf adp80xx_linux_drivers_v1.2.0-10624.tgz
cd debian_7.2/x64/
dpkg -i pm80xx-1.2.0-10624-debian64.deb
apt-get -f install
reboot
13. WOLの有効化
ethtool -s eth0 wol g
14. RAID構築のパフォーマンスチューニング
# /etc/sysctl.conf に以下の2行を追加。この設定でRAIDの構築時間を短縮できます
dev.raid.speed_limit_min = 50000
dev.raid.speed_limit_max = 5000000
16. RAIDの状態を確認(メモっておいたほうが良さげ)
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid6 sdm[9] sdl[8] sdk[7] sdj[6] sdi[5] sdh[4] sdg[3] sdf[2] sdd[1] sdc[0]
      23441080320 blocks super 1.2 level 6, 512k chunk, algorithm 2 [10/10] [UUUUUUUUUU]
      
unused devices: none

# mdadm --detail --scan
ARRAY /dev/md0 metadata=1.2 name=OMV-NODE804:RAID6 UUID=8002b7d3:4e1bb8d3:66b534b1:e7e9a90d

# cat /etc/mdadm/mdadm.conf
DEVICE partitions

CREATE owner=root group=disk mode=0660 auto=yes

HOMEHOST system

ARRAY /dev/md0 metadata=1.2 name=OMV-NODE804:RAID6 UUID=8002b7d3:4e1bb8d3:66b534b1:e7e9a90d


# mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Sun Sep 27 00:41:43 2015
     Raid Level : raid6
     Array Size : 23441080320 (22355.16 GiB 24003.67 GB)
  Used Dev Size : 2930135040 (2794.39 GiB 3000.46 GB)
   Raid Devices : 10
  Total Devices : 10
    Persistence : Superblock is persistent

    Update Time : Sun Sep 27 10:27:03 2015
          State : active
 Active Devices : 10
Working Devices : 10
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 512K

           Name : OMV-NODE804:RAID6  (local to host OMV-NODE804)
           UUID : 8002b7d3:4e1bb8d3:66b534b1:e7e9a90d
         Events : 18

    Number   Major   Minor   RaidDevice State
       0       8       32        0      active sync   /dev/sdc
       1       8       48        1      active sync   /dev/sdd
       2       8       80        2      active sync   /dev/sdf
       3       8       96        3      active sync   /dev/sdg
       4       8      112        4      active sync   /dev/sdh
       5       8      128        5      active sync   /dev/sdi
       6       8      144        6      active sync   /dev/sdj
       7       8      160        7      active sync   /dev/sdk
       8       8      176        8      active sync   /dev/sdl
       9       8      192        9      active sync   /dev/sdm

# fdisk -l
Disk /dev/sda: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders, total 234441648 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000d08cc

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048   224860159   112429056   83  Linux
/dev/sda2       224862206   234440703     4789249    5  Extended
/dev/sda5       224862208   234440703     4789248   82  Linux swap / Solaris

Disk /dev/sdd: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/sdd doesn't contain a valid partition table

Disk /dev/sdc: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/sdc doesn't contain a valid partition table

WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted.


Disk /dev/sdb: 256.1 GB, 256060514304 bytes
255 heads, 63 sectors/track, 31130 cylinders, total 500118192 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x61bb483d

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *        2048   500115455   250056704    7  HPFS/NTFS/exFAT

Disk /dev/sde: 31.3 GB, 31260704768 bytes
144 heads, 55 sectors/track, 7709 cylinders, total 61056064 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sde1            2048    61056063    30527008   83  Linux

Disk /dev/sdf: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/sdf doesn't contain a valid partition table

Disk /dev/sdh: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/sdh doesn't contain a valid partition table

Disk /dev/sdg: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/sdg doesn't contain a valid partition table

Disk /dev/sdi: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/sdi doesn't contain a valid partition table

Disk /dev/sdj: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/sdj doesn't contain a valid partition table

Disk /dev/sdk: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/sdk doesn't contain a valid partition table

Disk /dev/sdl: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/sdl doesn't contain a valid partition table

Disk /dev/sdm: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/sdm doesn't contain a valid partition table

Disk /dev/md0: 24003.7 GB, 24003666247680 bytes
2 heads, 4 sectors/track, -1 cylinders, total 46882160640 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 524288 bytes / 4194304 bytes
Disk identifier: 0x00000000

Disk /dev/md0 doesn't contain a valid partition table
18. ファイルシステムをマウント
max protocol = SMB2
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_SNDBUF=87600 SO_RCVBUF=87600
# /etc/rc.localに追加
echo 32768 > /sys/block/md0/md/stripe_cache_size

2015年9月26日土曜日

NASの自作 Part44

ADAPTEC ASA-6805HとWindowsの記憶域スペースの相性が最悪だった件で、Windowsのドライバのバージョンなどを調べていたら、ADAPTEC ASA-6805Hのファームウェアが古いことに気づきました。もしかしたらファームウェアが古いのが原因の可能性もゼロではないので、アップデートしてみます。
まずAdaptecのページから最新のファームウェアをダウンロードします。ダウロードしたzipファイルを解凍すると、ファームウェア本体(8081.bin)とプラットフォーム毎に更新用のツール(Adp80xxapp)が含まれているので、それを/lib/firmwareの直下にコピーします。最初、/lib/firmwareの下にディレクトリを作成してアップデートを試みましたが失敗しました。必ず/lib/firmware直下にファイルを配置しないとダメなようです。
現在のファームウェアのバージョンを確認してみます。

./Adp80xxapp info
=============================================
Adp80xxapp Copyright 2014 PMC-Sierra
=============================================
Adaptec HBA Adp80xxapp 1.2.0.10624
(c) 1998-2014 PMC-Sierra, Inc. All Rights Reserved

Number of controllers = 1
CONTROLLER_ADDRESS | VENDOR_ID | DEVICE_ID | FIRMWARE_REVISION | BIOS_VERSION
0000:01:00.0          0x9005        0x8081     01.14.05.00    1.2.0.0234

なんかホームページに書かれているファームウェアのバージョン体系と全然違っていて、古いのか新しいかよく分かりません。。。とりあえずアップデートしてみます。

./Adp80xxapp fwflash 0000:01:00.0 8081.bin
=============================================
Adp80xxapp Copyright 2014 PMC-Sierra
=============================================
Adaptec HBA Adp80xxapp 1.2.0.10624
(c) 1998-2014 PMC-Sierra, Inc. All Rights Reserved

Number of controllers = 1
CONTROLLER_ADDRESS | VENDOR_ID | DEVICE_ID | FIRMWARE_REVISION | BIOS_VERSION
0000:01:00.0          0x9005        0x8081     01.14.05.00    1.2.0.0234
FIRMWARE DOWNLOAD COMPLETE. REBOOT THE SYSTEM

再起動しろとのことなので、再起動して再度、ファームウェアのバージョンを確認してみます。

./Adp80xxapp info
=============================================
Adp80xxapp Copyright 2014 PMC-Sierra
=============================================
Adaptec HBA Adp80xxapp 1.2.0.10624
(c) 1998-2014 PMC-Sierra, Inc. All Rights Reserved

Number of controllers = 1
CONTROLLER_ADDRESS | VENDOR_ID | DEVICE_ID | FIRMWARE_REVISION | BIOS_VERSION
0000:01:00.0          0x9005        0x8081     01.14.07.00    1.2.0.10624

FIRMWARE_REVISIONとBIOS_VERSIONが上がっているようなので、ファームウェアの更新に成功したようです。もう一度Windowsの記憶域スペースのパフォーマンスを計測すべくWindows10を起動してみます。。。
。。。。。
起動はしたのですが、動作がモッサリしています。キーボードでの操作はできるのですが、マウスがまともに動きません(全く反応しないわけではない)。なんなんだこの不安定な糞OSはorz
何度か再起動してみましたが全く改善する気配はありません。またOSの再インストールをしないとダメそうな感じです。マジWindows10は糞だわ。

2015年9月25日金曜日

NASの自作 Part43

今日はOMVではなくWindows10の記憶域スペースとやらを試してみます。複数のHDDをまとめて冗長性を持たせる機能で、なんでも通常のRAIDより優れている点が多いようです。ただこのブログを読む限り私の使ってるADAPTEC ASA-6805Hだと使い物にならないほど遅いらしいです。Windows10になって改善された可能性もゼロではないのでダメ元で試してみます。

HDD10台をフォーマットして、[コントロールパネル]->[システムとセキュリティ]->[記憶域の管理]を選択

WS000000

新しいプールと記憶域の作成を選択

WS000001

10台のディスクを選択

WS000002

ファイルシステムをNTFSにして、回復性の種類をパリティにします。RAID6相当のデュアルパリティもサポートしているとの情報もあったのですがWindows10では使用できないようです。またRAID5相当ならサイズ(最大)は18.1TBではなく24.48TBのはずなのですが、どんな計算で18.1TBなのかさっぱり分かりません。これじゃデュアルパリティよりも容量が少ないのですが。。。

WS000003

設定を終えるとフォーマット処理が実行されますが、1時間ぐらいで完了しました。これはOMVのRAIDに比べて速くて素晴らしいです。

WS000004

さっそくベンチマークを測ってみると、ブログに書いてあったとおり書き込み速度が激遅です。まったく使い物になりません。

WS000005

やはりAdaptec ASA-6805H Singleを購入した時点でWindowsの記憶域という選択肢は無いようです。頑張ってOMVを極めようと思います。

Android Serverの実装 Part01

以前、ルーターを超えてWOLを実現すべく購入したAndoer MK808B プラス HD ですが、現在、Androidアプリを開発中でWOLのマジックパケットをブロードキャストIPアドレス宛に送る機能とSSHで接続して任意のコマンドを送る機能を実装しました。これを利用してNASの起動と停止を外から制御できるようになりました。
そして今日、注文していたIrdroid USB IR Transceiverが届きました。これを使って外らかエアコンを制御する機能を実装しようと思ってます。勢いで注文したものの技術的な調査は全くやってないので、これから少しづつ調べながら実装できたらと思います。日本語の情報は皆無なので、実装方法については詳しく書きたいと思ってます。


おそらくロシアあたりから届いたようです。ちなみに日本円で送料込みで4,726円でした。

IMG 0559

マニュアルはロシア語じゃなくて英語でした。

IMG 0560

基盤が見えてて作りは安っぽいです。

IMG 0561

IMG 0562

Andoer MK808B プラス HDに接続したところ。ただこれだと接続部分が電源と干渉してしまいます。

IMG 0563

なので、使うときはこんな感じになると思います。ちょっとカッコ悪いですね。。。

IMG 0564

2015年9月24日木曜日

NASの自作 Part42

昨夜テストしたRAIDのディスク交換後の再ビルドが無事に終わって、10台構成の正常なRAID6に復旧して喜んだのもつかの間、OMVを再起動してみると2台見失った8台構成に戻ってしまいます。。。OMVからは以下の様なメールが届きます。

This is an automatically generated mail message from mdadm
running on OMV-NODE804

A SparesMissing event had been detected on md device /dev/md0.

Faithfully yours, etc.

P.S. The /proc/mdstat file currently contains the following:

Personalities : [raid6] [raid5] [raid4]
md0 : inactive sdd[1]
     2930135512 blocks super 1.2

unused devices: none
コマンドで確認してみると、昨日のHDDをフォーマットした直後とほぼ同じ状態になっています。変わったのはactiveなデバイスが/dev/sdfから/dev/sdhになっています。
cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid6 sdd[1] sdg[9] sdm[7] sdh[6] sdi[5] sdl[4] sdj[3] sdk[2]
      23441080320 blocks super 1.2 level 6, 512k chunk, algorithm 2 [10/8] [_UUUUUUU_U]
      
unused devices: none

mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Wed Aug 19 23:22:08 2015
     Raid Level : raid6
     Array Size : 23441080320 (22355.16 GiB 24003.67 GB)
  Used Dev Size : 2930135040 (2794.39 GiB 3000.46 GB)
   Raid Devices : 10
  Total Devices : 8
    Persistence : Superblock is persistent

    Update Time : Fri Sep 25 07:33:03 2015
          State : clean, degraded
 Active Devices : 8
Working Devices : 8
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 512K

           Name : OMV-NODE804:10DisksRAID6  (local to host OMV-NODE804)
           UUID : 22a559e2:1d468c1e:75c0ffeb:2b2e8494
         Events : 1141

    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       8       48        1      active sync   /dev/sdd
       2       8      160        2      active sync   /dev/sdk
       3       8      144        3      active sync   /dev/sdj
       4       8      176        4      active sync   /dev/sdl
       5       8      128        5      active sync   /dev/sdi
       6       8      112        6      active sync   /dev/sdh
       7       8      192        7      active sync   /dev/sdm
       8       0        0        8      removed
       9       8       96        9      active sync   /dev/sdg
OMVのフォーラムに書いてあった方法ででデバイスを指定して強制的にRAIDを再構築してみます。
# デバイスの一覧を取得
fdisk -l

Disk /dev/sda: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders, total 234441648 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0002dce1

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048   224860159   112429056   83  Linux
/dev/sda2       224862206   234440703     4789249    5  Extended
/dev/sda5       224862208   234440703     4789248   82  Linux swap / Solaris

WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted.


Disk /dev/sdb: 256.1 GB, 256060514304 bytes
255 heads, 63 sectors/track, 31130 cylinders, total 500118192 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x61bb483d

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *        2048   500115455   250056704    7  HPFS/NTFS/exFAT

Disk /dev/sdd: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0xa854a854

Disk /dev/sdd doesn't contain a valid partition table

WARNING: GPT (GUID Partition Table) detected on '/dev/sdc'! The util fdisk doesn't support GPT. Use GNU Parted.


Disk /dev/sdc: 3000.6 GB, 3000592982016 bytes
256 heads, 63 sectors/track, 363376 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1  4294967295  2147483647+  ee  GPT
Partition 1 does not start on physical sector boundary.

Disk /dev/sde: 31.3 GB, 31260704768 bytes
144 heads, 55 sectors/track, 7709 cylinders, total 61056064 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sde1            2048    61056063    30527008   83  Linux

WARNING: GPT (GUID Partition Table) detected on '/dev/sdf'! The util fdisk doesn't support GPT. Use GNU Parted.


Disk /dev/sdf: 3000.6 GB, 3000592982016 bytes
256 heads, 63 sectors/track, 363376 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdf1               1  4294967295  2147483647+  ee  GPT
Partition 1 does not start on physical sector boundary.

Disk /dev/sdg: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/sdg doesn't contain a valid partition table

Disk /dev/sdh: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0xa856a856

Disk /dev/sdh doesn't contain a valid partition table

Disk /dev/sdi: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/sdi doesn't contain a valid partition table

Disk /dev/sdj: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0xa855a856

Disk /dev/sdj doesn't contain a valid partition table

Disk /dev/sdk: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/sdk doesn't contain a valid partition table

Disk /dev/sdl: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0xa854a855

Disk /dev/sdl doesn't contain a valid partition table

Disk /dev/sdm: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000

Disk /dev/sdm doesn't contain a valid partition table

Disk /dev/md0: 24003.7 GB, 24003666247680 bytes
2 heads, 4 sectors/track, -1 cylinders, total 46882160640 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 524288 bytes / 4194304 bytes
Disk identifier: 0x00000000

Disk /dev/md0 doesn't contain a valid partition table
# RAIDアレイをアンマウント
umount /dev/md0
# RAIDを停止
mdadm --stop /dev/md0
# デバイスを指定して強制的にRAIDを構築(エラーになりますorz)
mdadm --assemble /dev/md0 /dev/sd[cdfghijklm] --verbose --force

dadm: looking for devices for /dev/md0
mdadm: Cannot assemble mbr metadata on /dev/sdc
mdadm: /dev/sdc has no superblock - assembly aborted
うーん。エラーの原因がよくわからない。さらなる調査が必要なようです。


追記:復旧しようと試行錯誤していたら、間違って生き残っている8台のうち1台に対して 'mdadm --zero-superblock /dev/sdh' でRAIDの構成情報を削除してしまいました。。。これで3台がFAILした状態になったので終了です。。。
# RAID6で3台がFAILした状態でRAID構築できず\(^o^)/
mdadm --assemble --scan
mdadm: /dev/md0 assembled from 7 drives - not enough to start the array.
これが実運用中だと思ったらシャレにならないオペミスですね。。。とりあえず一からOMVを構築しなおすとして、ちょっとWindowsの記憶域スペースとやらを試してみようかと思います。

NASの自作 Part41

今日はRAIDの復旧をテストしてみます。いざHDDが壊れた時にオペミスでデータを失っては身も蓋もないないので、テストは重要です。昨日、ComicCafeの移行テストで使用した自炊ファイルを使って検証します。HDDを壊す前に今あるファイルのMD5ハッシュを計算しておきます。
# 自炊ファイルが保存してあるディレクトリに移動
cd /media/74a33bfa-edae-4b56-92cc-33fa5c44ba82/shared
# 私の自炊ファイルは全てzipファイルです。
find . -type f -name "*.zip" -exec md5sum {} \; | sort -k 1
次にデュアルブートのWindows10を起動して、任意の2台のHDDをフォーマットします。


001

002

003

今回はなんとなく2と5のディスクを初期化してみました。初期化後にOMVを起動してRAIDの状態を確認してみます。
# 10台中8台でRAIDが構成されている
cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid6 sdd[1] sdf[9] sdk[7] sdg[6] sdl[5] sdi[4] sdj[3] sdm[2]
      23441080320 blocks super 1.2 level 6, 512k chunk, algorithm 2 [10/8] [_UUUUUUU_U]
      
unused devices: none

# 2台のHDDがremovedになっている
mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Wed Aug 19 23:22:08 2015
     Raid Level : raid6
     Array Size : 23441080320 (22355.16 GiB 24003.67 GB)
  Used Dev Size : 2930135040 (2794.39 GiB 3000.46 GB)
   Raid Devices : 10
  Total Devices : 8
    Persistence : Superblock is persistent

    Update Time : Thu Sep 24 09:13:50 2015
          State : clean, degraded
 Active Devices : 8
Working Devices : 8
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 512K

           Name : OMV-NODE804:10DisksRAID6  (local to host OMV-NODE804)
           UUID : 22a559e2:1d468c1e:75c0ffeb:2b2e8494
         Events : 145

    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       8       48        1      active sync   /dev/sdd
       2       8      192        2      active sync   /dev/sdm
       3       8      144        3      active sync   /dev/sdj
       4       8      128        4      active sync   /dev/sdi
       5       8      176        5      active sync   /dev/sdl
       6       8       96        6      active sync   /dev/sdg
       7       8      160        7      active sync   /dev/sdk
       8       0        0        8      removed
       9       8       80        9      active sync   /dev/sdf
2台のHDDに障害が発生している状態でもRAID6なので、データは失われていないはずです。先ほどと同じコマンドでハッシュ値を計算して比較し、ファイルの無事を確認できました。次にHDDを復旧させてみます。実運用では新しいHDDを買って差し替えることになりますが、今回はHDDはそのままで復旧作業をしてみます。
# kernel が認識しているパーティションテーブル一覧を取得
cat /proc/partitions
major minor  #blocks  name

   8       16  250059096 sdb
   8       17  250056704 sdb1
   8        0  117220824 sda
   8        1  112429056 sda1
   8        2          1 sda2
   8        5    4789248 sda5
   8       32 2930266584 sdc
   8       33     131072 sdc1
   8       48 2930266584 sdd
   8       64   30528032 sde
   8       65   30527008 sde1
   8       80 2930266584 sdf
   8       96 2930266584 sdg
   8      128 2930266584 sdi
   8      112 2930266584 sdh
   8      113     131072 sdh1
   8      144 2930266584 sdj
   8      160 2930266584 sdk
   8      176 2930266584 sdl
   8      192 2930266584 sdm
   9        0 23441080320 md0
# 先ほどのRAIDの状態確認で表示されなかったsdcとsdhが破損していることが分かる
本来なら障害時には以下の様なコマンドでデバイスの状態をFailにして、RAIDからデバイスを取り除く作業が必要のようですが、今回はWindowsからフォーマットしたせいか既にremovedの状態になっているので、このまま復旧作業をすることにします。
# 故障したデバイスをFailにする
mdadm /dev/md0 -f /dev/sdc1
mdadm /dev/md0 -f /dev/sdh1
# 故障したデバイスをRAIDから取り除く
mdadm /dev/md0 -r /dev/sdc1
mdadm /dev/md0 -r /dev/sdh1
復旧はWebの管理画面から[RAID Management]->[Recover]で簡単に実行できるようです。

AccessMenuBarApps 0
交換したデバイスを指定します。

AccessMenuBarApps 2
設定を保存するとRAIDのリビルドが自動的に実行されます。これは初回のRAID構築時と同じで8時間ぐらいかかりそうです。
AccessMenuBarApps 3

リビルドが必要になるので復旧作業にはかなり時間がかかりそうですが、Webの管理画面から簡単に復旧できるのは素晴らしいの一言です。

2015年9月22日火曜日

NASの自作 Part40

今日はComicCafeのインストールとMacからの移行をテストしようと思います。
なにわともあれJavaをインストールします。開発ではOracleのJDKを使っているので、今回はOpenJDKをインストールしてみます。

# 開発はしないので実行環境のみをインストール
apt-get install openjdk-7-jre
# インストールしたJavaのバージョンの確認
java -version
java version "1.7.0_79"
OpenJDK Runtime Environment (IcedTea 2.5.6) (7u79-2.5.6-1~deb7u1)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)

ComicCafeサーバーはここにあるjarファイルをダウンロードすればOKなのですが、今回は開発中のまだリリースしてないバージョンを使います。
Macで運用しているComicCafeからOMVに移行する時に問題になりそうな懸念事項は2つあります。
  1. MacではファイルシステムにHFS+を使っているのですが、これはLinuxを生みの親であるLinus Torvalds氏が怒るぐらいファイル名の扱いなどが特殊です。これが原因でComicCafeがファイルを正しく認識できない可能性があります。
  2. Macでは外付けHDDを使って自炊ファイルを保存していたので、今回OMVにあたって自炊ファイルのパス(保存ドライブ)が変わります。ComicCafeではDBにファイルのパスを保持しているのでDBのデータを書き換える必要があります。

この2つの問題をパスすることができれば、移行後に自炊ファイルを再インポートしないですみます。今回はテストなので、Mac上に100ファイルぐらいの自炊ファイルをインポートしたComicCafeサーバーを用意して、それをOMVに移行してみたいと思います。
まず、Mac上でComicCafeサーバーを起動して、外付けHDDに保存されている自炊ファイルをインポートします。Mac上でのパスは以下になります。
/Volumes/SiliconPower-1TB/漫画

インポート後にComicCafeクライアントから自炊ファイルが読めることを確認します。次に漫画ディレクトリをOMVにコピーします。そしてOMV上のパスを確認します。
# RAIDがマウントされているパスを確認(md0)
df
Filesystem                                               1K-blocks    Used   Available Use% Mounted on
rootfs                                                   110664528 1819608   103223468   2% /
udev                                                         10240       0       10240   0% /dev
tmpfs                                                      3297064     796     3296268   1% /run
/dev/disk/by-uuid/6445948c-2f87-4c3c-a949-38a617780bc8   110664528 1819608   103223468   2% /
tmpfs                                                         5120       0        5120   0% /run/lock
tmpfs                                                      7551960       0     7551960   0% /run/shm
/dev/md0                                               23347791696 8943868 23338847828   1% /media/74a33bfa-edae-4b56-92cc-33fa5c44ba82
# sharedディレクトリ配下に先ほどコピーした漫画ディレクトリが存在することを確認
ls /media/74a33bfa-edae-4b56-92cc-33fa5c44ba82/shared
漫画

OMV上でComicCafeサーバーを起動してWeb画面にアクセスできるか確認します。動作確認後にComicCafeを停止します。comic-cafe-server.jarと同じディレクトリにcacheとh2dbというディレクトリが作成されているはずなので削除します。
# ComicCafeを起動する
java -Xms512M -Xmx1024M -jar ./comic-cafe-server.jar &
# ComicCafeのプロセスIDを検索
ps -ef | grep java
root      4401     1 56 07:46 pts/0    00:01:05 java -Xms512M -Xmx1024M -jar ./comic-cafe-server.jar
root      4519  4082  0 07:48 pts/0    00:00:00 grep java
# プロセスを停止
kill -9 4401
# cacheディレクトリとh2dbディレクトリが作成されているのを確認
ls -l
total 57440
drwxrwsrwx+ 2 root   users     4096 Sep 23 07:46 cache
-rw-rw-rw-+ 1 root   users     7815 Sep 23 07:46 comic-cafe.log
-rwxrwxr-x+ 1 nobody users 58795543 Apr 21 00:00 comic-cafe-server.jar
drwxrwsrwx+ 2 root   users     4096 Sep 23 07:46 h2db
-rwxrwxr-x+ 1 nobody users       72 Sep 22 22:43 launch.sh
# ディレクトリを削除する
rm -rf cache
rm -rf h2db

つづいてMac上のComicCafeサーバーのデータベースの内容を書き換えます。ここを参考にしてMac上のH2DBに接続して以下のSQLでパスをOMV用に更新します。この作業の前に念のためH2DBディレクトリ丸ごとバックアップしておいたほうがいいと思います。

update CATEGORY set PATH = REPLACE(PATH, '/Volumes/SiliconPower-1TB/', '/media/74a33bfa-edae-4b56-92cc-33fa5c44ba82/shared/');
update SERIES set PATH = REPLACE(PATH, '/Volumes/SiliconPower-1TB/', '/media/74a33bfa-edae-4b56-92cc-33fa5c44ba82/shared/');
update BOOK set FILE_PATH = REPLACE(FILE_PATH, '/Volumes/SiliconPower-1TB/', '/media/74a33bfa-edae-4b56-92cc-33fa5c44ba82/shared/');
update IGNORE_FILE set FILE_PATH = REPLACE(FILE_PATH, '/Volumes/SiliconPower-1TB/', '/media/74a33bfa-edae-4b56-92cc-33fa5c44ba82/shared/');
commit;

SQLでパスを書き換えたら、Mac上のComicCafeとH2DBを停止して、h2dbディレクトリをOMVのcomic-cafe-server.jarと同じディレクトリにコピーします。cacheディレクトリはコピーする必要はありません。OMV上のComicCafeサーバーを起動後、自炊ファイルが読めることを確認できました。懸念してた濁点を含むファイル名なども問題なく移行できたようです。この移行方法はPCを買い換えた時や外付けHDDを変えた場合などにも使えるテクニックなので参考になれば幸いです。

2015年9月19日土曜日

NASの自作 Part39

今日は前回に引き続き、OpenMediaVaultのバックアップの設定をしました。まずBackupの画面に7個のタブがある件ですが、ググってみるとタブ1つ1つがLinux用のバックアップ/ファイル復元ツールのようです。どうやらopenmediavault-backupというプラグインはバックアップをやってくれるわけではなく、バックアップするためのツールのインストールや起動を手伝ってくれるだけのようです。


1 Clonezilla HDDやパーティションのクローンやイメージを作成してくれるLinuxベースのツール(OS)
2 SystemRescuecd HDDやパーティションのクローンやイメージを作成してくれるLinuxベースのツール(OS)
3 GParted パーティションを操作するツール。バックアップ機能があるかは不明
4 Parted Magic ディスクのパーティション操作、クローン作成、消去ツール
5 PhotoRec 壊れたディスクからビデオや画像などメディアファイルをサルベージするためのツール
6 Extundelete 削除済みファイルの復元ツール
7 System Backup OMVの機能で指定したディレクトリを共有フォルダにコピー


AccessMenuBarApps 11

それぞれのツールを調べてみると1〜4がバックアップ用で、5,6はデータの復元、サルベージ用のようです。唯一、7だけがこのプラグインの機能のようでOSがインストールされているディスクの指定したディレクトリを共有フォルダにバックアップしてくれる機能のようです。無駄に選択肢が多くてどれを使うのが良いのか迷ってしまいますねこれは。。。とりあえず今回はOMVのフォーラムでよくオススメされているClonezillaを使ってバックアップしてみようと思います。まずClonezillaをインストールします。Webの管理画面からボタンを押すだけで完了します。


AccessMenuBarApps 13

インストールと言っても、OSのISOファイルを/bootにダウンロードしているだけのようです。次にClonezillaボタンを押して再起動します。Clonezillaボタンを押すことで次に起動する時にOMVの代わりにClonezillaが勝手に起動するようになります。
# インストール前
root@OMV-NODE804:/boot# ls -lrt
total 35496
-rw-r--r-- 1 root root  2842400 Aug  5 08:21 vmlinuz-3.2.0-4-amd64
-rw-r--r-- 1 root root  2114623 Aug  5 08:27 System.map-3.2.0-4-amd64
-rw-r--r-- 1 root root   129281 Aug  5 08:27 config-3.2.0-4-amd64
drwxr-xr-x 3 root root    12288 Aug 18 22:50 grub
-rw-r--r-- 1 root root 15622006 Aug 18 23:57 initrd.img-3.2.0-4-amd64.old-dkms
-rw-r--r-- 1 root root 15621734 Sep  7 03:38 initrd.img-3.2.0-4-amd64

# インストール後
root@OMV-NODE804:/boot# ls -lrt
total 201384
-rw-rw-rw- 1 root root 169869312 Dec  8  2014 clonezilla-live-2.3.1-18-i686-pae.iso
-rw-r--r-- 1 root root   2842400 Aug  5 08:21 vmlinuz-3.2.0-4-amd64
-rw-r--r-- 1 root root   2114623 Aug  5 08:27 System.map-3.2.0-4-amd64
-rw-r--r-- 1 root root    129281 Aug  5 08:27 config-3.2.0-4-amd64
-rw-r--r-- 1 root root  15622006 Aug 18 23:57 initrd.img-3.2.0-4-amd64.old-dkms
-rw-r--r-- 1 root root  15621734 Sep  7 03:38 initrd.img-3.2.0-4-amd64
drwxr-xr-x 3 root root     12288 Sep 18 07:49 grub


Clonezillaの操作はここを参考にしました。コマンドライン、SSHでも操作可能なようですが、初回なのでClonezillaのUIを使って設定します。ウィザード形式なので質問に答えていくだけでバックアップがとれます。私の場合は以下のように選択しました。
  1. 「日本語」を選択
  2. 「キーマップをいじらない」を選択
  3. 「Clonezillaを開始します」を選択
  4. 「device-image」を選択
  5. 「local_dev」を選択
  6. 「sdi1(USBメモリ)」を選択
  7. 「ローカルデバイスの最上位ディレクトリ」を選択
  8. 「初心者モード」を選択
  9. 「ローカルディスクをイメージに保存」を選択
  10.  イメージのファイル名を入力「2015-09-18-21-img-OMV」
  11.  バックアップするHDD/SSDを選択 「OMVがインストールされている sdj 120GB_Samsung_SSD_840」
  12. 「元ファイルシステムのチェック/修復をスキップする」を選択
  13. 「はい、保存イメージをチェックします」を選択

参考にしたページだと選択項目にリストアの項目があったのですが、私の場合は表示されませんでした。もしかしたら誤ってリストア操作しないようにOMV用にカスタマイズされたOSイメージなのかもしれません。

# USBメモリの内容を確認
root@debian:/mnt/usb# ls -lrt
total 20
drwx------ 2 root root 16384 Sep 18 22:34 lost+found
drwxr-xr-x 2 root root  4096 Sep 18 22:57 2015-09-18-22-img-OMV
# バックアップイメージ本体は圧縮されて700MBぐらいになっているようです
root@debian:/mnt/usb# ls -lrth 2015-09-18-22-img-OMV/
total 710M
-rw-r--r-- 1 root root 2.9K Sep 18 22:54 blkdev.list
-rw-r--r-- 1 root root 2.0K Sep 18 22:54 blkid.list
-rw-r--r-- 1 root root  310 Sep 18 22:54 sdi-pt.sf
-rw-r--r-- 1 root root   37 Sep 18 22:54 sdi-chs.sf
-rw-r--r-- 1 root root  413 Sep 18 22:54 sdi-pt.parted
-rw-r--r-- 1 root root  356 Sep 18 22:54 sdi-pt.parted.compact
-rw-r--r-- 1 root root 1.0M Sep 18 22:54 sdi-hidden-data-after-mbr
-rw-r--r-- 1 root root  512 Sep 18 22:54 sdi-mbr
-rw------- 1 root root 709M Sep 18 22:56 sdi1.ext4-ptcl-img.gz.aa
-rw-r--r-- 1 root root  24K Sep 18 22:57 Info-lshw.txt
-rw-r--r-- 1 root root  12K Sep 18 22:57 Info-dmi.txt
-rw-r--r-- 1 root root 2.3K Sep 18 22:57 Info-lspci.txt
-rw-r--r-- 1 root root    5 Sep 18 22:57 parts
-rw-r--r-- 1 root root  172 Sep 18 22:57 Info-packages.txt
-rw-r--r-- 1 root root   53 Sep 18 22:57 swappt-sdi5.info
-rw-r--r-- 1 root root    4 Sep 18 22:57 disk
-rw-r--r-- 1 root root   84 Sep 18 22:57 Info-saved-by-cmd.txt
-rw-r--r-- 1 root root 4.5K Sep 18 22:57 clonezilla-img
# /tem以下に今回のバックアップの内容をコマンドラインで実行する場合のコマンドが出力されている
root@debian:/mnt/usb# cat /tmp/ocs-2015-09-18-22-img-OMV-2015-09-18-22-52
/usr/sbin/ocs-sr -q2 -c -j2 -z1p -i 2000 -p true savedisk 2015-09-18-22-img-OMV sdi

かなり面倒でしたが、無事にバックアップをとることができました。復元する時はClonezillaをDVDなどに焼いて起動し、先ほどのバックアップイメージを復元するようです。これはRAIDのディスク交換を試すときにやろうと思います。個人的にはもっと手軽にバックアップを取りたい感じはしますが、ディスク全体のバックアップなので、OMVとは関係のないJavaやComicCafeなども一緒にバックアップできるメリットは大きいですね。次回からはSSHで繋いでコマンド一発でバックアップが取れるはずなので、トータルで見ると悪くないバックアップ方法だと思います。
ちなみにSSHで繋ぐ場合は、OMVとIPは同じなのに実は違うサーバーという状態になるのでSSHコマンドが失敗します。以下のコマンドでOMVのエントリを削除すれば接続できるようになります。またOMVに接続するときも同様です。これは少し面倒で嫌だな。。。
ssh-keygen -R x.x.x.x

2015年9月17日木曜日

NASの自作 Part38

今日はOpenMediaVaultのバックアップの設定をしようと思います。RAIDのバックアップではなくOSのバックアップです。OpenMediaVault自体は1.5GB程度なのでバックアップ先はUSBメモリでも大丈夫そうです。今回はCruzer Fit CZ33 32GB を購入しました。容量的には8GBでも十分だと思いますが、32GBでも値段は1300円と安いので、大は小を兼ねるっ。基本的に挿しっぱなしにしておくので小型のUSBメモリは使い勝手がいいです。


IMG 0551

さっそくUSBメモリを挿してOMVを起動します。

AccessMenuBarApps 0

問題なく認識されます。つづいてバックアップ用のプラグインをインストールします。

AccessMenuBarApps 1

AccessMenuBarApps 2

AccessMenuBarApps 3

んっ!?なんか設定項目を見ると、このプラグインは共有フォルダをUSBメモリにバックアップするツールみたいです。。。。他にバックアップ系のプラグインは無いようだし、標準のメニューにもバックアップの項目はありません。
ググってみると、どうやらOMVにはOMV-extras pluginという標準でないプラグインがあるようです。プラグインの一覧を見てみるとたしかにそれっぽいプラグインがありました。


AccessMenuBarApps 4

なんで標準で用意してないのか分かりませんが、とりあえずインストールしてみます。まず、ここからopenmediavault-omvextrasorg_latest_all.debをダウンロードします。ダウンロードしたファイルをプラグインの画面でアップロードします。


AccessMenuBarApps 5

AccessMenuBarApps 6

アップロードが成功するとプラグインの一覧にopenmediavault-omvextrasorgが追加されるのでインストールします。


AccessMenuBarApps 7

よく分からないエラーが発生しましたorz


AccessMenuBarApps 8

エラーは発生しましたが、右側のメニューにOMV-Extras.orgが新しく追加されたのでインストール自体はできたようです。


AccessMenuBarApps 9

OMV-Extras.orgのメニューにはプラグインの一覧ではなく、リポジトリの一覧が表示されているようです。よく見るとZFSのリポジトリもあります。どうやらこのリポジトリを選択して保存すると、インストール可能なプラグインが増えるようです。プラグインの画面に戻ってみると先ほどまで一覧になかったバックアップ系のプラグインが追加されていました。さっそくopenmediavault-backupをインストールします。


AccessMenuBarApps 10

今度はメニューにBackupという項目が追加されました。


AccessMenuBarApps 11

うーん。なんかタブが多くて設定する項目が多そうな感じです。。。とりあえず今日はここまでにしようと思います。

2015年9月16日水曜日

NASの自作 Part37

Windows10を再インストールしてから、今までが嘘だったかのように順調です。やはりBoot Camp アシスタントでインストールディスクを作成したのがまずかったのかもしれません。
今日はWindows10からOMVで作成したLVM(RAID6)にアクセスしてみます。ググってみるとツールは何種類かあるようで、このブログによると、どれもまともにアクセスできないという結果のようですorz ただ記事が2011年と古いので2015年9月現在の最新バージョンで試してみます。
どれも名前が似てて分かりにくいですが、結果はExt2ReadExplore2fsは全くダメでした。HDDすら認識しません。
つづいてExt2fsdですが、このアプリはファイルシステムドライバなので他のアプリとは異なり、ドライブをマウントして他のアプリからもアクセスできるようにするタイプです。しかし結果はEXT4は認識できるものの、LVMは認識できませんでした。よくホームページを読んでみるとここFeatures Ext2Fsd doesn’t support:LVM and Linux raid (md)って丁寧に書いてありますねorz


WS000001



最後に試したLinux Reader for Windowsは全てのドライブ、LVMを認識することができました。読み取り専用で書き込むことはできませんが、LVMからWindowsのインストールされているSSDにファイルをコピーすることもできます。ただコピーの速度は遅いです。このアプリはExploreに似たUIを持つファイルマネージャで、マウントしてドライブとして認識するわけではないので、残念ながら他のアプリからLVMにアクセスすることはできません。ツールの安定性は未知数ですがちょっとしたサルベージには使えそうな感じです。素晴らしいです。


WS000000

結果的には2011年当時と比較してツールもかなり進化しているようです。ファイルシステムドライバであるExt2fsdも、いまだに開発が行われているようなので、いつかLVMをサポートする日が来るのを祈ってます。

2015年9月15日火曜日

NASの自作 Part36

今日はWindows10からLVMを参照できるかテストしてみたいと思ったのですが、久しぶりにBIOSのブートメニューからWindows10を選択すると・・・起動しませんorz
GIGABYTEのロゴが表示されて、読込中の円が表示された状態で止まってしまい、どれだけ待っても起動する気配がありません。数回トライしてみるも全く起動しません。そして画面には一瞬ですが自動修復を準備していますというメッセージが表示されるようになりました。どうやらWindowsは3回以上連続で起動に失敗した場合に自動修復なる機能が有効になるようです。このままではらちが明かないので、再インストールしてみることにします。
前回Boot Camp アシスタントというツールで起動ディスクをUSBメモリに作成しましたが、この方法だとBoot Camp用のツールもインストールイメージに追加されるようなので、今回はMicrosoftからダウンロードしたisoをそのままDVDに焼いて試してみます。

1回目:DVDをセットしてインストール -> 新しいシステムパーティションを作成できなかったか、既存のシステムパーティションは見つかりませんでした。 -> やはりWindows10でも不要なドライブは外さないといけないのか。。。
2回目:BIOSの設定でWindows10をインストールするSSD以外のSATAを全て無効 -> DVDをセットしてインストール -> 新しいシステムパーティションを作成できなかったか、既存のシステムパーティションは見つかりませんでした。 -> やはり同じくSASカードも無効にしないとダメなようだ。
3回目:BIOSの設定でWindows10をインストールするSSD以外のSATAを全て無効 -> PCI Express Slotを全て無効 -> DVDをセットしてインストール -> Your PC ran into a problem and needs to restart -> うーん。。。PCI Express Slotが認識できないとWindowsはPCの異常と判断するようだ。BIOSの設定だけで回避できれば楽でいいのにな。
4回目:BIOSの設定でWindows10をインストールするSSD以外のSATAを全て無効 -> SASカードが挿さっているPCI Express Slotのみ無効 -> DVDをセットしてインストール -> Your PC ran into a problem and needs to restart -> PCI Express Slotは1つでも無効だとダメなのかorz
5回目:BIOSの設定でWindows10をインストールするSSD以外のSATAを全て無効 -> SASカードに繋がっている8台のHDDの電源ケーブルを全て抜く -> DVDをセットしてインストール -> 無事にインストールできました!!!

仕組みはよく分かりませんが、マザーボードに直接接続されているドライブはBIOSで無効にし、PCIeに接続されているドライブはSATA電源ケーブルを抜くことでインストールできるようです。マザーボードのケーブルを抜くのは結構大変ですが、右チャンバーの電源を抜くのは容易なのでこれは私にとっては朗報です。今回の再インストールしてから数回Windowsを再起動しましたが今のところフリーズする問題は発生していません。これでやっとWindowsからLVMへのアクセスが試せそうです。
ちなみに次また同じようにWindowsがフリーズするようになったら、SSD勿体無いけどもうWindowsは諦めます。

2015年9月12日土曜日

NASの自作 Part35

前回発覚した外からWOL(Wake-on-LAN)でNASサーバーを起動できない問題ですが、無事に解決することができました。
今回の問題をあらためて整理すると
  1. WOLでPCを起動するにはブロードキャストアドレス宛にMagicPacketを送る必要がる。PCが起動してないということは当然IPも割り振られていない状態なので特定のIPを指定してMagicPacketは送ることはできない。よってブロードキャストアドレス宛(LAN内の全てのデバイス)にMagicPacketを送らないとダメ。
  2. 同じLANに参加しているMac book airからWOLでNASを起動することはできる。Mac book airはブロードキャストアドレス宛にMagicPacket送っているので何の問題も無い
  3. 携帯の4G回線等、LANの外からWOLを利用する場合、ルーターを経由する必要がある。ルーターでポートフォワーディングの設定を行い、特定のポートにアクセスがあったらIP XXXに転送するみたいな設定をするのだが、ルーター(AirMac)ではその転送する宛先をブロードキャストアドレス宛に設定できない。基本的にブロードキャストはネットワークに負荷がかかる処理なので、セキュリティ的にこの振る舞いは妥当と言うこともできる。

そして、この問題を解決する方法は2つです。
  1. ブロードキャストアドレス宛へのポートフォワーディングをサポートしているルーターを購入する。
  2. LAN内に常時起動させておくマシンを用意して、そのマシンからブロードキャストアドレス宛にMagicPacketを送ってもらう。
1の方法はそこそこハイスペックな安定したルーターが必要で、予算的に厳しいと判断し今回は2の方法を選択しました。
次に問題になるのは常時起動しておくマシンの選定です。今回の用途では単にパケットの送受信ができれば良いのでハイスペックである必要は全くありません。求められるのは低価格、コンパクト、低消費電力、プログラミングの容易性、の4つぐらいのものです。当初、最近流行ってるRaspberry Piにしようと思ったのですが、調べてみると本体以外にケースやらSDカードやら初期導入コストが結構かかるようで合計で1万円弱ってところでしょうか。技術的には興味深いのですがちょっと高い気がします。結局いろいろ悩んだはてに選択したのはスティックタイプのAndroid端末です。Andoer MK808B プラス HD お値段4840円ぽっきりです。Androidなので開発するのも簡単です。


IMG 0547

IMG 0548

数あるスティックタイプのAndroid端末からこれを選んだ理由は、HDMI端子が出っ張ってないからです。今回の用途では電源だけ常に供給してディスプレイには繋がないのでHDMI端子の出っ張りは邪魔なだけです。
この端末を使ってみて気づいたことは
  1. GooglePlayが標準で使える
  2. USBマウスとUSBキーボードで操作可能なのでスマホ向けのアプリも普通に使用可能
  3. PCと接続してもデバッグすることはできない。Mac book airと接続しても電源すら入らなかった。。。
  4. 野良apkはメール経由でインストール可能
  5. 本体は結構発熱する。
発熱はちょっと気になりますが、今回の用途にはうってつけの端末ですねこれは。サーバーアプリはRestletを使って6時間ぐらいでベータ版が完成しました。
HTTPサーバーとして動作してるので、サーバーに対して以下の様なリクエストを投げると、MagicPacketを指定したブロードキャストアドレス宛に投げてくれます。このHTTPリクエストを投げられるのであれば、クライアントはWindows、Android、iOSでもなんでもOKです。
# 宛先はAirMacのグローバルアドレス。9998ポートはポートフォワーディングの設定でAndoer MK808Bにマッピング
curl -v -X POST http://xxx.xxx.xxx.xxx:9998/wol \
-d '{
        "target_ip":"10.0.1.255",          # ブロードキャストアドレス
        "target_port_no":"7",              # WOLはUDP 7か9らしいです。
        "mac_address":"XX:XX:XX:XX:XX:XX"  # NASのマックアドレス
    }'
上記リクエストを投げるクライアント用のAndroidアプリを開発したら、サーバーアプリとセットでGooglePlayに公開しようかと考えています。あと時間があったらこれを買って外出先から家のエアコンを操作できるようにしたいです。S.M.A.R.TでHDDの温度の異常を検知したら、外からエアコンの起動するみたいな

2015年9月8日火曜日

NASの自作 Part34

HDDの寿命を伸ばすには誰も使わない時間帯には電源を切ることも必要だと思うので、今日はWOL(Wake-on-LAN)を設定をしようと思います。
まず、OMV側の設定を行います。OMVにはデフォルトでWOLを使うためのethtoolがインストールされているようです。BIOSの設定も私の環境ではデフォルトで有効になっていました。さっそく以下のコマンドで設定を有効にしてみます。

# ethtoolがインストールされているか確認
which ethtool
/sbin/ethtool
# Wakeup On LANを有効化
ethtool -s eth0 wol g
# 設定を確認
ethtool eth0
Settings for eth0:
	Supported ports: [ TP ]
	Supported link modes:   10baseT/Half 10baseT/Full
	                        100baseT/Half 100baseT/Full
	                        1000baseT/Full
	Supported pause frame use: Symmetric
	Supports auto-negotiation: Yes
	Advertised link modes:  10baseT/Half 10baseT/Full
	                        100baseT/Half 100baseT/Full
	                        1000baseT/Full
	Advertised pause frame use: Symmetric
	Advertised auto-negotiation: Yes
	Speed: 1000Mb/s
	Duplex: Full
	Port: Twisted Pair
	PHYAD: 1
	Transceiver: internal
	Auto-negotiation: on
	MDI-X: Unknown
	Supports Wake-on: pumbg
	Wake-on: g
	Current message level: 0x00000007 (7)
			       drv probe link
	Link detected: yes
# NICのMACアドレスを確認 (HWaddrの部分がMACアドレス)
ifconfig | grep eth0
eth0      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX

次にMacから起動するためにクライアントをインストールします。App StoreにもWOL用のクライアントはあるようですが有料なので、今回は無料で使えるWakeOnLanというソフトを使います。
アプリを起動するとネットワーク上のコンピュータを検索してくれます。先ほどメモったMacアドレスを選択して[Wake Up!]ボタンを押すとOMVが起動できました。思ってたよりずっと簡単で少し拍子抜けした感じです。


AccessMenuBarApps 17

続けて外出先からも起動できるようにしたいと思ったのですが、AirMac Extremeは残念なことにブロードキャストアドレス宛のポートフォワードをサポートしていないようなので、対応しているルーターを買うか、Raspberry Piなどを使ってAirMac Extremeの代わりにブロードキャストアドレスにパケットを送信する仕組みを作るしかなさそうです。WOLは外出先からでも電源を入れられることに意味があると思うのですが、とりあえず今回は保留にしてNASが完成してから検討したいと思います。

2015年9月6日日曜日

NASの自作 Part33

今日はHDDの監視の設定をしてみます。まずはS.M.A.R.Tの設定です。監視間隔はデフォルトの30分、モードはSleepを選択しました。(スリープしてる時は監視しない) Differenceはどの程度の温度変化が異常なのかわからないので未設定。InformalとCriticalの違いはよくわかりませんが、おそらく前者が警告、後者がエラーみたいな扱いなんだと思います。ここを参考にとりあえず、50度と60度に設定してみます。


AccessMenuBarApps 7

さらに各HDD毎にS.M.A.R.Tの設定を有効にする必要があるようです。


AccessMenuBarApps 8

AccessMenuBarApps 9

AccessMenuBarApps 10

複数選択してまとめて設定できないのがちょっと面倒ですね。OSをインストールしているSSD以外の10台全てを有効にしました。これまでの設定はモニタリングの設定でしたが、次はS.M.A.R.Tのテストの設定です。テストの種類はShort self-test, Long self-test, Conveyance self-test, Offline immediate testの4種類あるようです。今回は2分ぐらいで終わるShort self-testを選択しました。Long self-testはおそらく数時間かかるので毎日実行するテストとしては適切でないと思われます。テストの種類については、ここここを参考にしました。テストする時間は誰もアクセスしてないと思われる毎日午前3時に設定しました。半年に1回ぐらいの頻度であればLong self-testを実行するのもアリなのかもしれませんね。ちなみにこの設定もHDD1台づつ設定する必要があり面倒です。


AccessMenuBarApps 11

AccessMenuBarApps 12

AccessMenuBarApps 13

これでS.M.A.R.Tの設定は完了です。次は異常を検出した時にメールで通知するように設定したいと思います。Gmailのサーバーとポートの設定を入力して対象のメールアドレスを入力するだけで簡単に設定できました。テストメールを送ってみましたが正常に受信できました。メールが送信されるイベントは細かく設定できるようですがデフォルトで全て有効になっているようです。とりあえずデフォルトで運用して、メールが頻繁に送信されるようであれば除外しようと思います。


AccessMenuBarApps 15

AccessMenuBarApps 16