スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

アセットアロケーション管理ツール更新

以前に作ったものを手直して、足りないアセットの額も表示するようにしました。

特徴
投資信託、国内株/ETF、米国株/ETFに対応
手前味噌ですが、海外ETFに対応しているアセアロ管理ツールは珍しいと思います。例えばMONEX Visionβは対応していないです。

Windows,MacOSX,iPhone,Androidに対応
google Documentを使用しているので大抵のスマートフォンやパソコンで使えます。Excelなど表計算ソフトは必要ありません。

目標比率との差分から、買うべきアセットの額がわかる
目標の資産比率と現在の比率を比較して、届いていないアセットがいくらぐらい足りないかを算出します。

セキュリティ面で安全
一般的なアカウントアグリゲーション機能を使っていませんのであなたは自分の証券会社のログイン名やパスワードを入力する必要はありません。


使用方法
1. ファイルをコピーする
こちらから更新されたファイルを参照してください。
ファイルは共有状態で私以外へ変更できないので、[ファイル]→[コピーを作成]でご自分のgoogleアカウントにコピーを作成してください。

2.目標アセットアロケーションを入力する
コピーしたファイルを開いて「メイン」シートの「目標」列の数字を修正します。事前に入力してある数字はあくまで例なので、ご自分の目標アセットアロケーションに基づいて入力してください。入力の必要がないセルは灰色になっていますので、白地の部分だけ入力してください。

3. 手持ちのアセットを入力する
現在手持ちのアセット(有価証券)を入力してください。日本株がsheet1,先進国株がsheet2..というように対応しています。

入力するのは「名前」「証券コード」「口数」です。

名前

アセットの名前です。特にツールの動作に影響はないので、ご自分で分かりやすい名前をいれてください。

証券コード

株やETFの場合は銘柄コード(4桁数字)で、米国株ETFはティッカーコードです。投資信託の場合は協会コードを使います。協会コードは銘柄コードやティッカーに比べてなじみが薄いですが、Yahooファイナンスを投信名で検索してでてくる8桁の英数字がそれです。

口数

そのまま、アセットの口数です。



事前にサンプルとして名前の知れたインデックスファンドやETFを入力してあります。持っていない銘柄については消してしまってもかまいません。

4. メインシートで乖離率を確認する
全部のアセットの入力が終わったらメインシートに戻ってください。アセットごとに「割合」「目標」「乖離率」が一目瞭然です。

応用編
国債など生債券も入力したい
評価額のところに評価額を直接書き込んでしまってください。

アセットの分け方をかえたい
シート左上(A1)をかえればメインシートにも反映されます。

行数が足りない
必要に応じて追加してください。基準価格列と評価額列が肝なので、追加した行にはD列E列をコピーしてください。
スポンサーサイト

テーマ : 資産運用
ジャンル : 株式・投資・マネー

Building DroboFS like storage with Ubuntu


Goal
Using Ubuntu to building a drobo like NAS storage, which can
use some different sized drives together as one large storage tank with 1 drive fault tolerance
expand total capacity by adding drives with data stored.

Idea

Basic idea, BeyondRAID , key technology of Drobo
is described in wikipedia
and following figure is suitable to understand.


Drives
| 100 GB | 200 GB | 400 GB | 500 GB |

----------
| x | unusable space (100 GB)
----------
-------------------
| A1 | A1 | RAID 1 set (2× 100 GB)
-------------------
-------------------
| B1 | B1 | RAID 1 set (2× 100 GB)
-------------------
----------------------------
| C1 | C2 | Cp | RAID 5 array (3× 100 GB)
----------------------------
-------------------------------------
| D1 | D2 | D3 | Dp | RAID 5 array (4× 100 GB)
-------------------------------------




We have two open source technology, mdadm and LVM. We can

  1. Make partitions from drives. These partitions make role as A1, B1, C1,C2,Cp D1,D2,D3,Dp.
  2. Build RAID array/set with mdadm. We can get md devices.
  3. Concatinate md devices to one large storage with LVM.


the original idea is ZFS_and_FreeNAS_expansion.
I've succeeded with ZFS/FreeNAS, but It seems to be more flexible
when building with mdadm and LVM.




Prepare

  1. Three or more disks which can be different size and interface. I have 80GB,160GB,500GB SATA disks.

  2. PC server. I have proliant Microserver.

  3. Installed Linux distro. I installed "Ubuntu 10.10 amd 64 desktop edition" to USB stick memory.


How to build

On Ubuntu 10.10, when I use apt-get to install mdadm, the installed binary is not up to date,
so I installed from source code. Parted is also necessary to make partition.

$ sudo apt-get update
$ sudo apt-get install lvm2
$ wget http://www.kernel.org/pub/linux/utils/raid/mdadm/mdadm-3.1.4.tar.gz
$ tar xzf mdadm-3.1.4.tar.gz
$ cd mdadm-3.1.4
$ make
$ sudo make install


At first, I confirmed my drives. Drive sde is boot disk.

$ sudo parted /dev/sda print devices
/dev/sda (80.0GB)
/dev/sdb (160GB)/dev/sdc (500GB)
/dev/sde (16.0GB)



There are three drives, we will finaly get following structure.


Drives
| 80 GB | 160 GB | 500 GB |
----------
| x | unusable space (340 GB)
----------
-------------------
| sdb2 | sdc2 | RAID 1 (2× 80 GB) -> md2 (80GB)
-------------------
----------------------------
| sda1 | sdb1 | sdc1 | RAID 5 (3× 80 GB) -> md1 (160GB)
----------------------------
Total: 240 GB





Initializing drive as GPT label.

$ sudo parted -s /dev/sda mklabel gpt
$ sudo parted -s /dev/sdb mklabel gpt
$ sudo parted -s /dev/sdc mklabel gpt


Making partitions.

$ sudo parted -s /dev/sda mkpart md1 2048s 80GB
$ sudo parted -s /dev/sdb mkpart md1 2048s 80GB
$ sudo parted -s /dev/sdc mkpart md1 2048s 80GB



Building RAID5 array

$ sudo mdadm --create --assume-clean /dev/md1 \
--level=5 --metadata=1 --raid-devices=3 /dev/sda1 /dev/sdb1 /dev/sdc1



Repeat on md2

$ sudo parted -s /dev/sdb mkpart md2 80GB 160GB
$ sudo parted -s /dev/sdc mkpart md2 80GB 160GB
$ sudo mdadm --create --assume-clean /dev/md2 \
--level=1 --metadata=1 --raid-devices=2 /dev/sdb2 /dev/sdc2


Make md devices as PV. Makeing VG from PV

$ sudo pvcreate -Z y -M2 /dev/md1
$ sudo pvcreate -Z y -M2 /dev/md2
$ sudo vgcreate Storage /dev/md1 /dev/md2



Confirm how many PEs we have. Build LV with all PEs.

$ sudo vgdisplay Storage | grep Free
Free PE / Size 57218 / 223.51 GiB
$sudo lvcreate -l 57218 Storage
Logical volume "lvol0" created


Making fs on LV and mount.

$ sudo mkfs -t ext4 -T largefile /dev/Storage/lvol0
$ sudo mkdir -p /Storage
$ sudo mount -t ext4 /dev/Storage/lvol0 /Storage
$ df -h
/dev/mapper/Storage-lvol0
224G 188M 213G 1% /Storage


Now we can share /Storage with samba. It looks Drobo FS, isn't it?


Adding a drive to expand capacity

Proliant MicroServer I have can drive four internal drives,
I am going to add a 1TB drive and expanding /Storage as following:


Drives
| 80 GB | 160 GB | 500 GB | 1TB |
----------
| x | 500GB unusable space
----------
-------------------
| sdc3 | sdd3 | RAID 1 (2× 340 GB) -> md3 (340 GB)
-------------------
----------------------------
| sdb2 | sdc2 | sdd2 | RAID 5 (3× 80 GB) -> md2 (160 GB)
----------------------------
-------------------------------------
| sda1 | sdb1 | sdc1 | sdd1 | RAID 5 (4× 80 GB) -> md1 (240 GB)
-------------------------------------
Total: 740 GB




Creating partition and adding to md1

$ sudo parted -s /dev/sdd mklabel gpt
$ sudo parted -s /dev/sdd mkpart md1 2048s 80GB
$ sudo mdadm --add /dev/md1 /dev/sdd1


When adding partiton, its role is "spare".
So expanding md1 using all drives.

$sudo mdadm --grow --level=5 --raid-devices=4 /dev/md1



Above operation take large time.
Confirming when it finish.

$ cat /proc/mdstat
md2 : active raid1 sdc2[1] sdb2[0]
78123960 blocks super 1.2 [2/2] [UU]

md1 : active raid5 sdd1[3] sdc1[2] sdb1[1] sda1[0]
156244992 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]
[>....................] reshape = 0.6% (505856/78122496) finish=66.4min speed=19456K/sec


While rehaping, repeat to md2.

$ sudo parted -s /dev/sdd mkpart md2 80GB 160GB
$ sudo mdadm --add /dev/md2 /dev/sdd2
$ sudo mdadm --grow --level=5 --raid-devices=3 /dev/md2



Confirming how reshapring. md2 is DELAYED. When finishing md1, md2's resharpe will work.

$ cat /proc/mdstat
md2 : active raid5 sdd2[2] sdc2[1] sdb2[0]
78123960 blocks super 1.2 level 5, 8k chunk, algorithm 2 [3/3] [UUU]
resync=DELAYED

md1 : active raid5 sdd1[3] sdc1[2] sdb1[1] sda1[0]
156244992 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]
[>....................] reshape = 2.5% (1958912/78122496) finish=76.5min speed=16571K/sec


While rehaping, making md3. It's same way when we make md2.

$ sudo parted -s /dev/sdc mkpart md3 160GB 500GB
$ sudo parted -s /dev/sdd mkpart md3 160GB 500GB
$ sudo mdadm --create --assume-clean /dev/md3 \
--level=1 --metadata=1 --raid-devices=2 /dev/sdc3 /dev/sdd3
$ sudo pvcreate -Z y -M2 /dev/md3



Now we already have VG, so created PV should be add to the VG

$ sudo vgextend Storage /dev/md3


Confirming we got new free space

$ sudo vgdisplay Storage | grep Free
Free PE / Size 19073 / 74.50 GiB


Few hour later, all resharpes have finished.

$ cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [raid1]
md3 : active raid1 sdc3[0] sdd3[1]
332029816 blocks super 1.2 [2/2] [UU]

md2 : active raid5 sdc2[1] sdd2[2] sdb2[0]
156247920 blocks super 1.2 level 5, 8k chunk, algorithm 2 [3/3] [UUU]

md1 : active raid5 sda1[0] sdc1[2] sdd1[3] sdb1[1]
234367488 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]


Telling LVM md1 and md2 are expanded.

$ sudo pvdisplay /dev/md1 | grep "PV Size"
PV Size 74.50 GiB / not usable 3.93 MiB

$ sudo pvresize /dev/md1
Physical volume "/dev/md1" changed
1 physical volume(s) resized / 0 physical volume(s) not resized

$ sudo pvdisplay /dev/md1 | grep Size
PV Size 149.01 GiB / not usable 3.67 MiB

$ sudo pvresize /dev/md2


Expanding LV

$ sudo lvdisplay | grep "LV Size"
LV Size 223.51 GiB

$ sudo vgdisplay Storage | grep Free
Free PE / Size 119207 / 465.65 GiB

$ sudo lvextend -l +119207 /dev/Storage/lvol0

$ sudo lvdisplay | grep "LV Size"
LV Size 689.16 GiB


Finaly, expanding filesyste.

$ df -h
/dev/mapper/Storage-lvol0
224G 188M 213G 1% /Storage

$ sudo resize2fs /dev/Storage/lvol0

$ df -h
/dev/mapper/Storage-lvol0
689G 197M 655G 1% /Storage


Now we got expanded capacity.


Replacing drive to larger one

I am going to replace 80GB drive to 2TB drive. Arrays will be following:


Drives
| 2TB | 160 GB | 500 GB | 1TB |

----------
| x | ----------------------------> unusable space 1TB
----------
---------- ----------
| sda4 | | sdd4 | RAID 1 (2x 500 GB) -> md4 (500 GB)
---------- ----------
---------- -------------------
| sda3 | | sdc3 | sdd3 | RAID 5 (3× 340 GB) -> md3 (680 GB)
---------- -------------------
--------------------------------------
| sda2 | sdb2 | sdc2 | sdd2 | RAID 5 (4× 80 GB) -> md2 (240 GB)
-------------------------------------
-------------------------------------
| sda1 | sdb1 | sdc1 | sdd1 | RAID 5 (4× 80 GB) -> md1 (240 GB)
-------------------------------------
total: 1.6 TB




At first detach sda from md devices.
now only md1 contains sda, sda1 should be detached.

$ sudo mdadm /dev/md1 --fail /dev/sda1

$ cat /proc/mdstat
md1 : active raid5 sda1[0](F) sdc1[2] sdd1[3] sdb1[1]
234367488 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [_UUU]


Shuting down server and replacing sda as 2TB drive.
Already md1 device has no sda.

$ cat /proc/mdstat
md1 : active raid5 sdd1[2] sdc1[1] sde1[3]
234367488 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [_UUU]
$ sudo parted -s /dev/sda print devices
/dev/sda (2000GB)
/dev/sdb (16.0GB)
/dev/sdc (160GB)
/dev/sdd (500GB)
/dev/sde (1000GB)
/dev/mapper/Storage-lvol0 (740GB)
/dev/md1 (240GB)
/dev/md2 (160GB)
/dev/md3 (340GB)


Now we have new drive sda.
Checking 2th large drive to decide the new (largest) drive's partition size.


$ sudo parted -s /dev/sde print free
モデル: ATA SAMSUNG HD103UJ (scsi)
ディスク /dev/sde: 1000GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt

番号 開始 終了 サイズ ファイルシステム 名前 フラグ
17.4kB 1049kB 1031kB 空き容量
1 1049kB 80.0GB 80.0GB md1
2 80.0GB 160GB 80.0GB md2
3 160GB 500GB 340GB md3
500GB 1000GB 500GB 空き容量


Just make partions same size of 2th large drive to new drive.


$ sudo parted -s /dev/sda mklabel gpt
$ sudo parted -s /dev/sda mkpart md1 2048s 80GB
$ sudo parted -s /dev/sda mkpart md2 80GB 160GB
$ sudo parted -s /dev/sda mkpart md3 160GB 500GB


Adding partitions to md devices.

$ sudo mdadm --add /dev/md1 /dev/sda1
$ sudo mdadm --add /dev/md2 /dev/sda2
$ sudo mdadm --add /dev/md3 /dev/sda3


md1 is degrade mode, so as soon as adding, rebuild is started.

$ cat /proc/mdstat
md3 : active raid1 sda3[2](S) sdd3[0] sde3[1]
332029816 blocks super 1.2 [2/2] [UU]

md2 : active raid5 sda2[3](S) sdd2[1] sde2[2] sdc2[0]
156247920 blocks super 1.2 level 5, 8k chunk, algorithm 2 [3/3] [UUU]

md1 : active raid5 sda1[4] sdd1[2] sdc1[1] sde1[3]
234367488 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [_UUU]
[>....................] recovery = 4.3% (3367748/78122496) finish=19.6min speed=63416K/sec


Expanding md2 and md2 like when we add a drive.

$ sudo mdadm --grow --level=5 --raid-devices=4 /dev/md2
$ sudo mdadm --grow --level=5 --raid-devices=3 /dev/md3


When resharp has finished, telling lvm md's were expanded.

$ sudo pvresize /dev/md2
$ sudo pvresize /dev/md3


As we have unused capacity on sdd and sda, they should be used as mirrored device.

$ sudo parted -s /dev/sdd mkpart md4 500GB 1000GB
$ sudo parted -s /dev/sda mkpart md4 500GB 1000GB
$ sudo mdadm --create --assume-clean /dev/md4 --level=1 --metadata=1 --raid-devices=2 /dev/sda4 /dev/sdd4
$ sudo pvcreate -Z y -M2 /dev/md4
$ sudo vgextend Storage /dev/md4


Expanding LV as we have new free PEs.

$ sudo vgdisplay Storage | grep Free
Free PE / Size 119208 / 465.66 GiB
$ sudo lvextend -l +119208 /dev/Storage/lvol0


Finally, expanding file system.

$ sudo umount /Storage
$ sudo resize2fs /dev/Storage/lvol0
$ df -h
/dev/mapper/Storage-lvol0
1.6T 197M 1.5T 1% /Storage



conclusion

I know above operation is quite complex than Drobo.
If you want easy storage, you should buy Drobo. It may be good storage.
But you can also get Drobo-like storage cheaper.
And it is important the storage far from blackbox and vendor-lock-in.

UbuntuでDrobo風なNASを作る

前書き

前のエントリでは、FreeNASでDroboFS風なNASストレージを作りましたが、
Linuxのmd+LVMのほうがより柔軟で簡単に作れるので、Linuxでやり直しました。

繰り返しになりますが、目指すのはこんな条件のNASストレージです:


  1. 異なる容量のHDDを集約して、ひとつの仮想ディスクを作る
  2. 小容量HDDを大容量のものに挿し換えることで、データを保持したまま仮想ディスクの容量を増やせる




準備するもの

  1. HDD 3本以上: 異なる容量でOK。USB,PATA,SATAなどインターフェースが違っても大丈夫。
    今回は80GB,160GB,500GBのディスクを準備しました。

  2. PCサーバ:当然、準備したHDDがすべて挿せる構成である必要があります。
    私は前エントリに引き続き、Proliant MicroServerを使用します。こいつは4本
    ディスクをさすことができます。
  3. Linuxディストリ: ここではUbuntu 10.10 amd64 desktopを使用しました。USBメモリにインストールしています。


原理

これも前のエントリと変わらないのですが、
wikipediaのBeyondRAIDの図が分かりやすいので
同じような書き方をしてみます。


Drives
| 80 GB | 160 GB | 500 GB |
----------
| x | 未使用領域 (340 GB)
----------
-------------------
| sdb2 | sdc2 | RAID 1 (2× 80 GB) -> md2 (80GB)
-------------------
----------------------------
| sda1 | sdb1 | sdc1 | RAID 5 (3× 80 GB) -> md1 (160GB)
----------------------------
計: 240 GB



ディスクをパーティションに分割して、パーティションごとにRAIDを組み、
それらを結合させる形です。mdadmでRAIDを組み、LVMで結合させます。


RAID構築

LVM2とmdadmを使用しますのでそれぞれインストールします。
ubuntu 10.10のmdadmはapt-getで入るmdadmはバージョンが古かったため
最新をソースからmakeしています。partedも使うのでもし
入っていないディストリなら最新を入れておいてください。


$ sudo apt-get update
$ sudo apt-get install lvm2
$ wget http://www.kernel.org/pub/linux/utils/raid/mdadm/mdadm-3.1.4.tar.gz
$ tar xzf mdadm-3.1.4.tar.gz
$ cd mdadm-3.1.4
$ make
$ sudo make install


手持ちのディスクを確認します。
sdeはブートディスク(USB)ですから触りません。


$ sudo parted /dev/sda print devices
/dev/sda (80.0GB)
/dev/sdb (160GB)
/dev/sdc (500GB)
/dev/sdd (1000GB)
/dev/sde (16.0GB)



使用するディスクをGPTでディスクラベルを作ります。
DOSでなくGPTを使うのは、パーティションの数の制限が緩いためです。

$ sudo parted -s /dev/sda mklabel gpt
$ sudo parted -s /dev/sdb mklabel gpt
$ sudo parted -s /dev/sdc mklabel gpt



RAIDを作るパーティションを切り出します。AFT対応のためか、
partedがアライメントのワーニングを出すので、先頭を64sや34sでなく2048sからはじめています。

$ sudo parted -s /dev/sda mkpart md1 2048s 80GB
$ sudo parted -s /dev/sdb mkpart md1 2048s 80GB
$ sudo parted -s /dev/sdc mkpart md1 2048s 80GB


RAID5なMDデバイスを作成します。

$ sudo mdadm --create --assume-clean /dev/md1 \
--level=5 --metadata=1 --raid-devices=3 /dev/sda1 /dev/sdb1 /dev/sdc1


同様の方法でもうひとつMDデバイスを作ります。

$ sudo parted -s /dev/sdb mkpart md2 80GB 160GB
$ sudo parted -s /dev/sdc mkpart md2 80GB 160GB
$ sudo mdadm --create --assume-clean /dev/md2 \
--level=1 --metadata=1 --raid-devices=2 /dev/sdb2 /dev/sdc2


できた二つのMDデバイスをLVMのPVとして登録します。

$ sudo pvcreate -Z y -M2 /dev/md1
$ sudo pvcreate -Z y -M2 /dev/md2


PVからVGを作成します。PEが57218個つくられたことが分かります。

$ sudo vgcreate Storage /dev/md1 /dev/md2
$ sudo vgdisplay Storage | grep Free
Free PE / Size 57218 / 223.51 GiB


できたPE全てを使ってLVを作成します。

$sudo lvcreate -l 57218 Storage
Logical volume "lvol0" created


作成されたLVをmkfsしてマウントします。

$ sudo mkfs -t ext4 -T largefile /dev/Storage/lvol0
$ sudo mkdir -p /Storage
$ sudo mount -t ext4 /dev/Storage/lvol0 /Storage
$ df -h
ファイルシステム Size Used Avail Use% マウント位置
/dev/mapper/Storage-lvol0
224G 188M 213G 1% /Storage


あとはsambaで/Storageを共有してやれば、NASになります。


ディスク増設

Proliant MicroServerには4本ディスクが入りますので
もう一本追加増設して、容量を拡張します。
もともと sdd に 1TBのディスクが入っていますので、これをRAIDに組み込みます。
イメージとしてはこんな感じです。md1とmd2にはパーティションを新しく
追加して容量を増加させます。特にmd2は元々RAID1だったのでRAID5に変更します。
sdcにあまっていた340GBもミラー相手ができたので、新しくmd3として作成します。


Drives
| 80 GB | 160 GB | 500 GB | 1TB |
----------
| x | 500GB 未使用領域
----------
-------------------
| sdc3 | sdd3 | RAID 1 (2× 340 GB) -> md3 (340 GB)
-------------------
----------------------------
| sdb2 | sdc2 | sdd2 | RAID 5 (3× 80 GB) -> md2 (160 GB)
----------------------------
-------------------------------------
| sda1 | sdb1 | sdc1 | sdd1 | RAID 5 (4× 80 GB) -> md1 (240 GB)
-------------------------------------
計: 740 GB



新規ディスク(sdd)からパーティションを作成してmd1に追加します。

$ sudo parted -s /dev/sdd mklabel gpt
$ sudo parted -s /dev/sdd mkpart md1 2048s 80GB
$ sudo mdadm --add /dev/md1 /dev/sdd1


追加しただけではスペアディスク扱いになるため
容量拡張を指示します。

$sudo mdadm --grow --level=5 --raid-devices=4 /dev/md1


MDデバイスのステータスを確認します。
reshape中で、現在進捗は0.6%で残り66.4分です。待ち。


$ cat /proc/mdstat
md2 : active raid1 sdc2[1] sdb2[0]
78123960 blocks super 1.2 [2/2] [UU]

md1 : active raid5 sdd1[3] sdc1[2] sdb1[1] sda1[0]
156244992 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]
[>....................] reshape = 0.6% (505856/78122496) finish=66.4min speed=19456K/sec


待ちの間に、md2に対しても同様に拡張を行います。
md2の場合はもともとRAID1だったのですが
mdadmコマンドの引数指定で RAID 5に変更しています。


$ sudo parted -s /dev/sdd mkpart md2 80GB 160GB
$ sudo mdadm --add /dev/md2 /dev/sdd2
$ sudo mdadm --grow --level=5 --raid-devices=3 /dev/md2


ステータスを見ると md2 の処理は DELAYEDとなっていて
md1の終了待ちであることが分かります。md1が終われば自動的に始まります。
なんだか終了時間が前より延びてる...


$ cat /proc/mdstat
md2 : active raid5 sdd2[2] sdc2[1] sdb2[0]
78123960 blocks super 1.2 level 5, 8k chunk, algorithm 2 [3/3] [UUU]
resync=DELAYED

md1 : active raid5 sdd1[3] sdc1[2] sdb1[1] sda1[0]
156244992 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]
[>....................] reshape = 2.5% (1958912/78122496) finish=76.5min speed=16571K/sec


その間に md3 を作ってしまいます。構築時にmd2でやったことと同じです。

$ sudo parted -s /dev/sdc mkpart md3 160GB 500GB
$ sudo parted -s /dev/sdd mkpart md3 160GB 500GB
$ sudo mdadm --create --assume-clean /dev/md3 \
--level=1 --metadata=1 --raid-devices=2 /dev/sdc3 /dev/sdd3

$ sudo pvcreate -Z y -M2 /dev/md3



作ったPVをVGに追加登録します。

$ sudo vgextend Storage /dev/md3


未使用なPEが増えていることを確認します。

$ sudo vgdisplay Storage | grep Free
Free PE / Size 19073 / 74.50 GiB


数時間放置したところ。md1もmd2もreshape処理は終わりました。

$ cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [raid1]
md3 : active raid1 sdc3[0] sdd3[1]
332029816 blocks super 1.2 [2/2] [UU]

md2 : active raid5 sdc2[1] sdd2[2] sdb2[0]
156247920 blocks super 1.2 level 5, 8k chunk, algorithm 2 [3/3] [UUU]

md1 : active raid5 sda1[0] sdc1[2] sdd1[3] sdb1[1]
234367488 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]


md1/md2の拡張処理が終わったら、容量が増えたことをLVMに認識させます。

$ sudo pvdisplay /dev/md1 | grep "PV Size"
PV Size 74.50 GiB / not usable 3.93 MiB
$ sudo pvresize /dev/md1
Physical volume "/dev/md1" changed
1 physical volume(s) resized / 0 physical volume(s) not resized
$ sudo pvdisplay /dev/md1 | grep Size
PV Size 149.01 GiB / not usable 3.67 MiB

$ sudo pvresize /dev/md2


VGの余裕が増えたはずなので、LVも増加させます。

$ sudo lvdisplay | grep "LV Size"
LV Size 223.51 GiB

$ sudo vgdisplay Storage | grep Free
Free PE / Size 119207 / 465.65 GiB

$ sudo lvextend -l +119207 /dev/Storage/lvol0

$ sudo lvdisplay | grep "LV Size"
LV Size 689.16 GiB


今度はファイルシステムを拡張します。レイヤーがいくつもあって面倒ですけど、これが最後です。

$ df -h
/dev/mapper/Storage-lvol0
224G 188M 213G 1% /Storage

$ sudo resize2fs /dev/Storage/lvol0

$ df -h
/dev/mapper/Storage-lvol0
689G 197M 655G 1% /Storage


お疲れ様でした。無事に拡張することができました。


ディスク交換

80GB(sda)を交換します。実は2テラのディスクが手元にあるので、これに交換します。


Drives
| 2TB | 160 GB | 500 GB | 1TB |

----------
| x | ----------------------------> 未使用領域 1TB
----------
---------- ----------
| sda4 | | sdd4 | RAID 1 (2x 500 GB) -> md4 (500 GB)
---------- ----------
---------- -------------------
| sda3 | | sdc3 | sdd3 | RAID 5 (3× 340 GB) -> md3 (680 GB)
---------- -------------------
--------------------------------------
| sda2 | sdb2 | sdc2 | sdd2 | RAID 5 (4× 80 GB) -> md2 (240 GB)
-------------------------------------
-------------------------------------
| sda1 | sdb1 | sdc1 | sdd1 | RAID 5 (4× 80 GB) -> md1 (240 GB)
-------------------------------------
計: 1.6 TB



まず sdaが参加しているMDデバイスから切り離します。
現在 sda はmd1のみに組み込まれているので、md1から切り離します。


$ sudo mdadm /dev/md1 --fail /dev/sda1

$ cat /proc/mdstat
md1 : active raid5 sda1[0](F) sdc1[2] sdd1[3] sdb1[1]
234367488 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [_UUU]


フェイルフラグが立っていますね。
いったんシャットダウンして 80GBディスクを2Tディスクに交換して起動しなおします。
OS起動後、md1からsdaがいなくなりました。


$ cat /proc/mdstat
md1 : active raid5 sdd1[2] sdc1[1] sde1[3]
234367488 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [_UUU]


交換したディスクは、そのままではRAIDに組み込まれません。手作業でパーティションを切る
ところからはじめなければなりません。
ディスク交換はディスクが壊れたり容量が足りなくなった頃に行いますから
その頃にはきっとパーティション構成は忘れているでしょう。
そのため、現存するディスクの中でいちばん大きいディスクのパーティションを参考にします。
今回の場合は sdeですね。
(OS再起動のタイミングでブートディスクが sdeからsdbになってしまっています)


$ sudo parted -s /dev/sda print devices
/dev/sda (2000GB)
/dev/sdb (16.0GB)
/dev/sdc (160GB)
/dev/sdd (500GB)
/dev/sde (1000GB)
/dev/mapper/Storage-lvol0 (740GB)
/dev/md1 (240GB)
/dev/md2 (160GB)
/dev/md3 (340GB)

$ sudo parted -s /dev/sde print free
モデル: ATA SAMSUNG HD103UJ (scsi)
ディスク /dev/sde: 1000GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt

番号 開始 終了 サイズ ファイルシステム 名前 フラグ
17.4kB 1049kB 1031kB 空き容量
1 1049kB 80.0GB 80.0GB md1
2 80.0GB 160GB 80.0GB md2
3 160GB 500GB 340GB md3
500GB 1000GB 500GB 空き容量


これに準じて、交換したsdaにもパーティションを切ります。


$ sudo parted -s /dev/sda mklabel gpt
$ sudo parted -s /dev/sda mkpart md1 2048s 80GB
$ sudo parted -s /dev/sda mkpart md2 80GB 160GB
$ sudo parted -s /dev/sda mkpart md3 160GB 500GB


切ったパーティションをMDデバイスに組み込みます。
先ほどのディスク追加と同じです。

$ sudo mdadm --add /dev/md1 /dev/sda1
$ sudo mdadm --add /dev/md2 /dev/sda2
$ sudo mdadm --add /dev/md3 /dev/sda3


もともと md1 は sda1が外された縮退状態だったため、リビルドが始まりました

$ cat /proc/mdstat
md3 : active raid1 sda3[2](S) sdd3[0] sde3[1]
332029816 blocks super 1.2 [2/2] [UU]

md2 : active raid5 sda2[3](S) sdd2[1] sde2[2] sdc2[0]
156247920 blocks super 1.2 level 5, 8k chunk, algorithm 2 [3/3] [UUU]

md1 : active raid5 sda1[4] sdd1[2] sdc1[1] sde1[3]
234367488 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [_UUU]
[>....................] recovery = 4.3% (3367748/78122496) finish=19.6min speed=63416K/sec


残りのmd2/md3も、以前と同様に容量拡張を行います。

$ sudo mdadm --grow --level=5 --raid-devices=4 /dev/md2
$ sudo mdadm --grow --level=5 --raid-devices=3 /dev/md3


resharpが終わるのを待ってから、lvmに拡張されたことを通知します。
md1は縮退状態からの復旧ですので拡張はありません。

$ sudo pvresize /dev/md2
$ sudo pvresize /dev/md3


あまっていたディスク容量を使ってミラーデバイスmd4を作成し追加します。

$ sudo parted -s /dev/sdd mkpart md4 500GB 1000GB
$ sudo parted -s /dev/sda mkpart md4 500GB 1000GB
$ sudo mdadm --create --assume-clean /dev/md4 --level=1 --metadata=1 --raid-devices=2 /dev/sda4 /dev/sdd4
$ sudo pvcreate -Z y -M2 /dev/md4
$ sudo vgextend Storage /dev/md4


増加したVG上のPEを確認してLVを拡張します。

$ sudo vgdisplay Storage | grep Free
Free PE / Size 119208 / 465.66 GiB
$ sudo lvextend -l +119208 /dev/Storage/lvol0
$ sudo resize2fs /dev/Storage/lvol0


最後、ファイルシステムを拡張してようやく完了です。
速そうだったのでアンマウントしてやってみました。

$ sudo umount /Storage
$ sudo e2fsck -f /dev/mapper/Storage-lvol0
$ sudo resize2fs /dev/mapper/Storage-lvol0
$ sudo mount /Storage
$ df -h
/dev/mapper/Storage-lvol0
1.6T 197M 1.5T 1% /Storage


無事、大きくなってますね。

まとめ
Droboっぽいものを作りたいという目的は達しました。
1.6Tもあればしばらく足りなくなることはないはずですが
足りなくなったら160GBディスクをそのとき一番コストパフォーマンスのよい
ディスクに買い換えます。

FreeNASでDrobo風なNASを作る

Droboとは

Droboについてはitmediaの記事に紹介されています。

個人ユーザーこそ使ってみよう──RAIDより簡単なストレージアレイ「Drobo」の実力検証(前編) (1/3)

便利そうなディスク装置ですが、特に以下の点が個人的に魅力です。

  1. 異なる容量のディスクを集約して、ひとつの仮想ディスクを作る
  2. ファイルを保持したまま仮想ディスクの容量を増やせる(小容量ディスクを大容量のものに挿し換える)
  3. ディスク増設が簡単(挿し替えるだけ)

とっても便利そうなDroboですが、ちょっと値が張ります(価格コムで4万円切るくらい)。
なんとか安く似たようなものが作れないものか。
ググったところ、Glen’s WeblogZFS & FreeNAS – A poor (and very geeky) man’s Drobo setup!
というエントリで、FreeNASでDrobo風なNASを作る方法が紹介されているのを見つけました。

FreeNASで実現できること
具体的には以下のことが実現できます。

  1. 異なる容量のHDDを集約して、ひとつの仮想ディスクを作る
  2. を保持したまま仮想ディスクの容量を増やせる(小容量HDDを大容量のものに挿し換える)

つまり、簡単操作という点以外は個人的にDroboでいいなあと思っているところが全部できています。
ちょっと元ネタブログで紹介されている方法が難しかったので、まとめてみました。

簡単な原理

作り方の紹介の前に、原理を簡単に紹介します。

なぜ異なる容量のディスクを組み合わせられるか?
物理ディスクを複数のサイズのパーティションに切って、同一サイズのパーティション同士でRAID5を作るからです。
作られたRAIDを連結して単一ディスク領域にしています。
もちろん、大容量のディスクには未使用領域が残りますが、そこは諦めてください。
そのあたりの事情はDroboも同様のはずです。
なぜ容量拡張できるの?
FreeNASが採用しているZFSが容量拡張に対応しているから。


普通にFreeNASでRAIDを組むだけではDroboっぽくはなりません。
以下の面倒な作業が必要です。

作り方

ここで紹介する方法は私を始め誰も動作保証してくれません。あくまで自己責任でお願いします。
なにか問題があっても、私は責任をおえませんし、助言する義務もおいません。

1.FreeNASが使える環境を準備する

4本ディスクが入るPCにFreeNAS最新版(現在0.7.2)をインストールしてください。
USBメモリにインストールするとディスクを無駄にしません。
私は4G USBメモリにフルインストールしてHP ProLiant MicroServerで使用しています。
以後ログなどはHP ProLiant MicroServerrのものです。
ちなみにHP ProLiant MicroServerは税込35,700円です。
なんとかDroboよりは安くなっています。

FreeNASがインストールできたら、SSHでログインできるようにしておいてください。
作業は殆どコマンドラインで行ないます。

2. 使用するディスクのデバイス名と容量を調べる

rootユーザでdmesgコマンドとgptコマンドを使って各ディスクのデバイス名と容量(セクタ数)を調べます。
以下の赤字のところです。

freenas:~# dmesg | grep "^ad"
ad4: 1907729MB at ata2-master SATA300
ad6: 152627MB at ata3-master SATA300
ad8: 476940MB at ata4-master SATA300
ad10: 152627MB at ata5-master SATA150

freenas:~# gpt -v show ad4 > /dev/null
gpt show: ad4: mediasize=2000398934016; sectorsize=512; blocks=3907029168
freenas:~# gpt -v show ad6 > /dev/null
gpt show: ad6: mediasize=160041885696; sectorsize=512; blocks=312581808
freenas:~# gpt -v show ad8 > /dev/null
gpt show: ad8: mediasize=500107862016; sectorsize=512; blocks=976773168
freenas:~# gpt -v show ad10 > /dev/null
gpt show: ad10: mediasize=160041885696; sectorsize=512; blocks=312581808


3. Googleドキュメントで仮想ディスク作成スクリプトを作る

Drobo風にNASを作るために、パーティションサイズの計算が必要なのですが
計算しやすくするためにGoogle spreadsheetで表を作りました。
以下URLから参照してください。
https://spreadsheets.google.com/ccc?key=0AufEgCg-Sy76dDh4ZkRIQ2JVT3FzMzNVdnlsVURzMEE&hl=ja&authkey=CPSmrNUI

参照はできますが編集はできませんので「ファイル」メニューから「コピーを作成」して自分のgoogleアカウントにコピーしてください。

コピーしたドキュメントの緑色のセルに先程確認した情報を入力します。
こんな感じですね


before.jpg



このあと、ソルバーを使ってパーティションの容量配分を計算します。「ツール」メニューから「ソルバー」を選択して、下記のように入力します。
solver.jpg

ソルバーボタンをクリックすると、Total: というセルの数字が変わるはずです。この数字が、実際に構築される仮想ディスクの容量になります。表の下に仮想ディスク作成スクリプトが作成されます。


4. 作成スクリプトを実行する

あとは生成されたスクリプトをコピペするだけです。
作成後にdf -hできちんと作成されているか確認してください。

私の環境ではこんな感じでした。容量としては 2T, 160G, 500G, 160G の4本で500Gくらいです。

freenas:~# df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/da0s1a 3.6G 247M 3.0G 7% /
devfs 1.0K 1.0K 0B 100% /dev
procfs 4.0K 4.0K 0B 100% /proc

freenas:~# dmesg | grep "^ad"
ad4: 1907729MB at ata2-master SATA300
ad6: 152627MB at ata3-master SATA300
ad8: 476940MB at ata4-master SATA300
ad10: 152627MB at ata5-master SATA150
freenas:~#
freenas:~# gpt -v show ad4 > /dev/null
gpt show: ad4: mediasize=2000398934016; sectorsize=512; blocks=3907029168
freenas:~# gpt -v show ad6 > /dev/null
gpt show: ad6: mediasize=160041885696; sectorsize=512; blocks=312581808
freenas:~# gpt -v show ad8 > /dev/null
gpt show: ad8: mediasize=500107862016; sectorsize=512; blocks=976773168
freenas:~# gpt -v show ad10 > /dev/null
gpt show: ad10: mediasize=160041885696; sectorsize=512; blocks=312581808

freenas:~# gpt destroy ad4 ; gpt create -f ad4
freenas:~# gpt destroy ad6 ; gpt create -f ad6
freenas:~# gpt destroy ad8 ; gpt create -f ad8
freenas:~# gpt destroy ad10 ; gpt create -f ad10
freenas:~#
freenas:~# gpt add -i 1 -s 131072 ad4
freenas:~# gpt add -i 1 -s 131072 ad6
freenas:~# gpt add -i 1 -s 131072 ad8
freenas:~# gpt add -i 1 -s 131072 ad10
freenas:~# gpt add -i 2 -s 312188525 ad4
freenas:~# gpt add -i 2 -s 312188525 ad6
freenas:~# gpt add -i 2 -s 312188525 ad8
freenas:~# gpt add -i 3 -s 131072 ad4
freenas:~# gpt add -i 3 -s 131072 ad6
freenas:~# gpt add -i 3 -s 131072 ad10
freenas:~# gpt add -i 4 -s 312188525 ad4
freenas:~# gpt add -i 4 -s 312188525 ad8
freenas:~# gpt add -i 4 -s 312188525 ad10
freenas:~# gpt add -i 5 -s 131072 ad6
freenas:~# gpt add -i 5 -s 131072 ad8
freenas:~# gpt add -i 5 -s 131072 ad10

freenas:~# zpool create -f -m /mnt/tank tank raidz1 /dev/ad4p1 /dev/ad6p1 /dev/ad8p1 /dev/ad10p1
freenas:~# zpool add -f tank raidz1 /dev/ad4p2 /dev/ad6p2 /dev/ad8p2
freenas:~# zpool add -f tank raidz1 /dev/ad4p3 /dev/ad6p3 /dev/ad10p3
freenas:~# zpool add -f tank raidz1 /dev/ad4p4 /dev/ad8p4 /dev/ad10p4
freenas:~# zpool add -f tank raidz1 /dev/ad6p5 /dev/ad8p5 /dev/ad10p5
freenas:~#
freenas:~# df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/da0s1a 3.6G 247M 3.0G 7% /
devfs 1.0K 1.0K 0B 100% /dev
procfs 4.0K 4.0K 0B 100% /proc
tank 583G 0B 583G 0% /mnt/tank
freenas:~#
freenas:~# zpool status
pool: tank
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p1 ONLINE 0 0 0
ad6p1 ONLINE 0 0 0
ad8p1 ONLINE 0 0 0
ad10p1 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p2 ONLINE 0 0 0
ad6p2 ONLINE 0 0 0
ad8p2 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p3 ONLINE 0 0 0
ad6p3 ONLINE 0 0 0
ad10p3 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p4 ONLINE 0 0 0
ad8p4 ONLINE 0 0 0
ad10p4 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad6p5 ONLINE 0 0 0
ad8p5 ONLINE 0 0 0
ad10p5 ONLINE 0 0 0

errors: No known data errors

あとは /mnt/tank をsambaなりNFSなりで共有すればDrobo風NASサーバの完成です。


領域拡張

ディスクを大容量のものに入れ替えて仮想ディスクの容量を増やします。
これがまた面倒なので、詳細はまた後日書きますが、私の環境でのログを貼り付けておきます。
作業前のdf -hの結果が583G で作業後には913Gになっています。
電源OFFして160Gのディスク(ad10)を1Tに交換して起動したところから。



freenas:~# dmesg | grep "^ad"
ad4: 1907729MB at ata2-master SATA300
ad6: 152627MB at ata3-master SATA300
ad8: 476940MB at ata4-master SATA300
ad10: 953869MB at ata5-master SATA300
freenas:~#
freenas:~# zpool status
pool: tank
state: DEGRADED
status: One or more devices could not be used because the label is missing or
invalid. Sufficient replicas exist for the pool to continue
functioning in a degraded state.
action: Replace the device using 'zpool replace'.
see: http://www.sun.com/msg/ZFS-8000-4J
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
tank DEGRADED 0 0 0
raidz1 DEGRADED 0 0 0
ad4p1 ONLINE 0 0 0
ad6p1 ONLINE 0 0 0
ad8p1 ONLINE 0 0 0
ad10p1 FAULTED 0 0 0 corrupted data
raidz1 ONLINE 0 0 0
ad4p2 ONLINE 0 0 0
ad6p2 ONLINE 0 0 0
ad8p2 ONLINE 0 0 0
raidz1 DEGRADED 0 0 0
ad4p3 ONLINE 0 0 0
ad6p3 ONLINE 0 0 0
ad10p3 FAULTED 0 0 0 corrupted data
raidz1 DEGRADED 0 0 0
ad4p4 ONLINE 0 0 0
ad8p4 ONLINE 0 0 0
ad10p4 FAULTED 0 0 0 corrupted data
raidz1 DEGRADED 0 0 0
ad6p5 ONLINE 0 0 0
ad8p5 ONLINE 0 0 0
ad10p5 FAULTED 0 0 0 corrupted data

errors: No known data errors
freenas:~#
freenas:~#
freenas:~# gpart show ad4
=> 34 3907029101 ad4 GPT (1.8T)
34 131072 1 freebsd-ufs (64M)
131106 312188525 2 freebsd-ufs (149G)
312319631 131072 3 freebsd-ufs (64M)
312450703 312188525 4 freebsd-ufs (149G)
624639228 3282389907 - free - (1.5T)

freenas:~# df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/da0s1a 3.6G 247M 3.0G 7% /
devfs 1.0K 1.0K 0B 100% /dev
procfs 4.0K 4.0K 0B 100% /proc
tank 583G 0B 583G 0% /mnt/tank
freenas:~#
freenas:~# gpt -v show ad10
gpt show: ad10: mediasize=1000204886016; sectorsize=512; blocks=1953525168
start size index contents
0 1 PMBR
1 1 Pri GPT header
2 32 Pri GPT table
34 131072 1 GPT part - FreeBSD UFS/UFS2
131106 131072 3 GPT part - FreeBSD UFS/UFS2
262178 664322432 4 GPT part - FreeBSD UFS/UFS2
664584610 131072 5 GPT part - FreeBSD UFS/UFS2
664715682 1288809453
1953525135 32 Sec GPT table
1953525167 1 Sec GPT header
freenas:~#
freenas:~#
freenas:~# gpart add -b 664715682 -s 131072 -t freebsd-ufs -i 11 ad4
ad4p11 added
freenas:~# gpart show ad4 | tail -2
664846754 3242182381 - free - (1.5T)

freenas:~# gpart add -b 664846754 -s 312188525 -t freebsd-ufs -i 12 ad4
ad4p12 added
freenas:~# gpart show ad4 | tail -2
977035279 2929993856 - free - (1.4T)

freenas:~# gpart add -b 977035279 -s 131072 -t freebsd-ufs -i 13 ad4
ad4p13 added
freenas:~# gpart show ad4 | tail -2
977166351 2929862784 - free - (1.4T)

freenas:~# gpart add -b 977166351 -s 664322432 -t freebsd-ufs -i 14 ad4
ad4p14 added
freenas:~# gpart show ad4 | tail -2
1641488783 2265540352 - free - (1.1T)

freenas:~# gpart add -b 1641488783 -s 131072 -t freebsd-ufs -i 15 ad4
ad4p15 added
freenas:~#
freenas:~# zpool status
pool: tank
state: DEGRADED
status: One or more devices could not be used because the label is missing or
invalid. Sufficient replicas exist for the pool to continue
functioning in a degraded state.
action: Replace the device using 'zpool replace'.
see: http://www.sun.com/msg/ZFS-8000-4J
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
tank DEGRADED 0 0 0
raidz1 DEGRADED 0 0 0
ad4p1 ONLINE 0 0 0
ad6p1 ONLINE 0 0 0
ad8p1 ONLINE 0 0 0
ad10p1 FAULTED 0 0 0 corrupted data
raidz1 ONLINE 0 0 0
ad4p2 ONLINE 0 0 0
ad6p2 ONLINE 0 0 0
ad8p2 ONLINE 0 0 0
raidz1 DEGRADED 0 0 0
ad4p3 ONLINE 0 0 0
ad6p3 ONLINE 0 0 0
ad10p3 FAULTED 0 0 0 corrupted data
raidz1 DEGRADED 0 0 0
ad4p4 ONLINE 0 0 0
ad8p4 ONLINE 0 0 0
ad10p4 FAULTED 0 0 0 corrupted data
raidz1 DEGRADED 0 0 0
ad6p5 ONLINE 0 0 0
ad8p5 ONLINE 0 0 0
ad10p5 FAULTED 0 0 0 corrupted data

errors: No known data errors
freenas:~# zpool replace -f tank ad10p1 ad4p11
freenas:~# zpool replace -f tank ad10p3 ad4p13
freenas:~# zpool replace -f tank ad10p4 ad4p14
freenas:~# zpool replace -f tank ad10p5 ad4p15
freenas:~#
freenas:~# zpool status
pool: tank
state: ONLINE
scrub: scrub completed after 0h0m with 0 errors on Mon Nov 8 00:36:45 2010
config:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p1 ONLINE 0 0 0
ad6p1 ONLINE 0 0 0
ad8p1 ONLINE 0 0 0
ad4p11 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p2 ONLINE 0 0 0
ad6p2 ONLINE 0 0 0
ad8p2 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p3 ONLINE 0 0 0
ad6p3 ONLINE 0 0 0
ad4p13 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p4 ONLINE 0 0 0
ad8p4 ONLINE 0 0 0
ad4p14 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad6p5 ONLINE 0 0 0
ad8p5 ONLINE 0 0 0
ad4p15 ONLINE 0 0 0

errors: No known data errors
freenas:~#
freenas:~# zpool export tank
freenas:~# gpt destroy ad10
freenas:~# gpt create -f ad10
freenas:~# gpt add -i 1 -s 131072 ad10
freenas:~# gpt add -i 3 -s 131072 ad10
freenas:~# gpt add -i 4 -s 664322432 ad10
freenas:~# gpt add -i 5 -s 131072 ad10
freenas:~# zpool import tank
cannot import 'tank': more than one matching pool
import by numeric ID instead
freenas:~# zpool import
pool: tank
id: 9270976627868517511
state: UNAVAIL
status: One or more devices contains corrupted data.
action: The pool cannot be imported due to damaged devices or data.
see: http://www.sun.com/msg/ZFS-8000-5E
config:

tank UNAVAIL insufficient replicas
raidz1 ONLINE
ad4p1 ONLINE
ad6p1 ONLINE
ad8p1 ONLINE
ad10p1 ONLINE
raidz1 ONLINE
ad4p3 ONLINE
ad6p3 ONLINE
ad10p3 ONLINE
raidz1 UNAVAIL corrupted data
ad4p4 ONLINE
ad8p4 ONLINE
ad10p4 ONLINE
raidz1 ONLINE
ad6p5 ONLINE
ad8p5 ONLINE
ad10p5 ONLINE

pool: tank
id: 2323966863493414263
state: ONLINE
action: The pool can be imported using its name or numeric identifier.
config:

tank ONLINE
raidz1 ONLINE
ad4p1 ONLINE
ad6p1 ONLINE
ad8p1 ONLINE
ad4p11 ONLINE
raidz1 ONLINE
ad4p2 ONLINE
ad6p2 ONLINE
ad8p2 ONLINE
raidz1 ONLINE
ad4p3 ONLINE
ad6p3 ONLINE
ad4p13 ONLINE
raidz1 ONLINE
ad4p4 ONLINE
ad8p4 ONLINE
ad4p14 ONLINE
raidz1 ONLINE
ad6p5 ONLINE
ad8p5 ONLINE
ad4p15 ONLINE
freenas:~# gpt destroy ad10
freenas:~# zpool import tank
freenas:~# zpool status
pool: tank
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p1 ONLINE 0 0 0
ad6p1 ONLINE 0 0 0
ad8p1 ONLINE 0 0 0
ad4p11 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p2 ONLINE 0 0 0
ad6p2 ONLINE 0 0 0
ad8p2 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p3 ONLINE 0 0 0
ad6p3 ONLINE 0 0 0
ad4p13 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p4 ONLINE 0 0 0
ad8p4 ONLINE 0 0 0
ad4p14 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad6p5 ONLINE 0 0 0
ad8p5 ONLINE 0 0 0
ad4p15 ONLINE 0 0 0

errors: No known data errors
freenas:~# gpt create -f ad10
freenas:~# gpt add -i 1 -s 131072 ad10
freenas:~# gpt add -i 3 -s 131072 ad10
freenas:~# gpt add -i 4 -s 664322432 ad10
freenas:~# gpt add -i 5 -s 131072 ad10
freenas:~# zpool replace -f tank ad4p11 ad10p1
freenas:~# zpool replace -f tank ad4p13 ad10p3
freenas:~# zpool replace -f tank ad4p14 ad10p4
freenas:~# zpool replace -f tank ad4p15 ad10p5
freenas:~#
freenas:~# zpool export tank
freenas:~# gpt destroy ad8
freenas:~# zpool import tank
freenas:~# zpool status
pool: tank
state: DEGRADED
status: One or more devices could not be opened. Sufficient replicas exist for
the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
see: http://www.sun.com/msg/ZFS-8000-2Q
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
tank DEGRADED 0 0 0
raidz1 DEGRADED 0 0 0
ad4p1 ONLINE 0 0 0
ad6p1 ONLINE 0 0 0
1434089966366771512 UNAVAIL 0 0 0 was /dev/ad8p1
ad10p1 ONLINE 0 0 0
raidz1 DEGRADED 0 0 0
ad4p2 ONLINE 0 0 0
ad6p2 ONLINE 0 0 0
7672230464381230151 UNAVAIL 0 0 0 was /dev/ad8p2
raidz1 ONLINE 0 0 0
ad4p3 ONLINE 0 0 0
ad6p3 ONLINE 0 0 0
ad10p3 ONLINE 0 0 0
raidz1 DEGRADED 0 0 0
ad4p4 ONLINE 0 0 0
15824696584317871971 REMOVED 0 0 0 was /dev/ad8p4
ad10p4 ONLINE 0 0 0
raidz1 DEGRADED 0 0 0
ad6p5 ONLINE 0 0 0
1662115052024520418 REMOVED 0 0 0 was /dev/ad8p5
ad10p5 ONLINE 0 0 0

errors: No known data errors
freenas:~#
freenas:~# zpool replace -f tank ad8p1 ad4p11
freenas:~# zpool replace -f tank ad8p2 ad4p12
freenas:~# zpool replace -f tank ad8p4 ad4p14
freenas:~# zpool replace -f tank ad8p5 ad4p15
freenas:~# zpool status
pool: tank
state: ONLINE
scrub: resilver completed after 0h0m with 0 errors on Mon Nov 8 00:47:39 2010
config:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p1 ONLINE 0 0 0
ad6p1 ONLINE 0 0 0
ad4p11 ONLINE 0 0 0
ad10p1 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p2 ONLINE 0 0 0
ad6p2 ONLINE 0 0 0
ad4p12 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p3 ONLINE 0 0 0
ad6p3 ONLINE 0 0 0
ad10p3 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p4 ONLINE 0 0 0
ad4p14 ONLINE 0 0 0
ad10p4 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad6p5 ONLINE 0 0 0 512 resilvered
ad4p15 ONLINE 0 0 0 512 resilvered
ad10p5 ONLINE 0 0 0

errors: No known data errors
freenas:~# gpt add -i 1 -s 131072 ad8
gpt add: ad8: error: no primary GPT header; run create or recover
ad8p1 added
freenas:~# gpt create -f ad8
freenas:~# gpt add -i 1 -s 131072 ad8
freenas:~# gpt add -i 2 -s 312188525 ad8
freenas:~# gpt add -i 4 -s 664322432 ad8
freenas:~# gpt add -i 5 -s 131072 ad8
freenas:~#
freenas:~# zpool replace -f tank ad4p11 ad8p1
freenas:~# zpool replace -f tank ad4p12 ad8p2
freenas:~# zpool replace -f tank ad4p14 ad8p4
freenas:~# zpool replace -f tank ad4p15 ad8p5
freenas:~# zpool status
pool: tank
state: ONLINE
scrub: resilver completed after 0h0m with 0 errors on Mon Nov 8 00:50:01 2010
config:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p1 ONLINE 0 0 0
ad6p1 ONLINE 0 0 0
ad8p1 ONLINE 0 0 0
ad10p1 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p2 ONLINE 0 0 0
ad6p2 ONLINE 0 0 0
ad8p2 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p3 ONLINE 0 0 0
ad6p3 ONLINE 0 0 0
ad10p3 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p4 ONLINE 0 0 0
ad8p4 ONLINE 0 0 0
ad10p4 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad6p5 ONLINE 0 0 0 14.5K resilvered
ad8p5 ONLINE 0 0 0 14.5K resilvered
ad10p5 ONLINE 0 0 0 14K resilvered

errors: No known data errors
freenas:~# zpool export tank
freenas:~# gpt destroy ad6
freenas:~# gpt create -f ad6
freenas:~# zpool import tank
freenas:~# zpool status
pool: tank
state: DEGRADED
status: One or more devices could not be opened. Sufficient replicas exist for
the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
see: http://www.sun.com/msg/ZFS-8000-2Q
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
tank DEGRADED 0 0 0
raidz1 DEGRADED 0 0 0
ad4p1 ONLINE 0 0 0
15100179404678663866 REMOVED 0 0 0 was /dev/ad6p1
ad8p1 ONLINE 0 0 0
ad10p1 ONLINE 0 0 0
raidz1 DEGRADED 0 0 0
ad4p2 ONLINE 0 0 0
12038723168089769348 UNAVAIL 0 0 0 was /dev/ad6p2
ad8p2 ONLINE 0 0 0
raidz1 DEGRADED 0 0 0
ad4p3 ONLINE 0 0 0
7159896418724073791 UNAVAIL 0 0 0 was /dev/ad6p3
ad10p3 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p4 ONLINE 0 0 0
ad8p4 ONLINE 0 0 0
ad10p4 ONLINE 0 0 0
raidz1 DEGRADED 0 0 0
13947581831733968000 REMOVED 0 0 0 was /dev/ad6p5
ad8p5 ONLINE 0 0 0
ad10p5 ONLINE 0 0 0

errors: No known data errors
freenas:~#
freenas:~# zpool replace -f tank ad6p1 ad4p11
freenas:~# zpool replace -f tank ad6p2 ad4p12
freenas:~# zpool replace -f tank ad6p3 ad4p13
freenas:~# zpool replace -f tank ad6p5 ad4p15
freenas:~# zpool status
pool: tank
state: ONLINE
scrub: resilver completed after 0h0m with 0 errors on Mon Nov 8 00:52:57 2010
config:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p1 ONLINE 0 0 0
ad4p11 ONLINE 0 0 0
ad8p1 ONLINE 0 0 0
ad10p1 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p2 ONLINE 0 0 0
ad4p12 ONLINE 0 0 0
ad8p2 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p3 ONLINE 0 0 0
ad4p13 ONLINE 0 0 0
ad10p3 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p4 ONLINE 0 0 0
ad8p4 ONLINE 0 0 0
ad10p4 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p15 ONLINE 0 0 0 2K resilvered
ad8p5 ONLINE 0 0 0 2.50K resilvered
ad10p5 ONLINE 0 0 0 2K resilvered

errors: No known data errors
freenas:~# gpt add -i 1 -s 131072 ad6
freenas:~# gpt add -i 2 -s 312188525 ad6
freenas:~# gpt add -i 3 -s 131072 ad6
freenas:~# gpt add -i 5 -s 131072 ad6
freenas:~# zpool replace -f tank ad4p11 ad6p1
freenas:~# zpool replace -f tank ad4p12 ad6p2
freenas:~# zpool replace -f tank ad4p13 ad6p3
freenas:~# zpool replace -f tank ad4p15 ad6p5
freenas:~#
freenas:~# zpool status
pool: tank
state: ONLINE
scrub: resilver completed after 0h0m with 0 errors on Mon Nov 8 00:54:42 2010
config:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p1 ONLINE 0 0 0
ad6p1 ONLINE 0 0 0
ad8p1 ONLINE 0 0 0
ad10p1 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p2 ONLINE 0 0 0
ad6p2 ONLINE 0 0 0
ad8p2 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p3 ONLINE 0 0 0
ad6p3 ONLINE 0 0 0
ad10p3 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p4 ONLINE 0 0 0
ad8p4 ONLINE 0 0 0
ad10p4 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad6p5 ONLINE 0 0 0 39K resilvered
ad8p5 ONLINE 0 0 0 39K resilvered
ad10p5 ONLINE 0 0 0 38.5K resilvered

errors: No known data errors
freenas:~#
freenas:~# zpool export tank
freenas:~# gpt destroy ad4
freenas:~# gpt create -f ad4
freenas:~# zpool import tank
freenas:~# zpool status
pool: tank
state: DEGRADED
status: One or more devices could not be opened. Sufficient replicas exist for
the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
see: http://www.sun.com/msg/ZFS-8000-2Q
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
tank DEGRADED 0 0 0
raidz1 DEGRADED 0 0 0
10825006633158704898 REMOVED 0 0 0 was /dev/ad4p1
ad6p1 ONLINE 0 0 0
ad8p1 ONLINE 0 0 0
ad10p1 ONLINE 0 0 0
raidz1 DEGRADED 0 0 0
16325851114971065300 REMOVED 0 0 0 was /dev/ad4p2
ad6p2 ONLINE 0 0 0
ad8p2 ONLINE 0 0 0
raidz1 DEGRADED 0 0 0
4071833555875781794 UNAVAIL 0 0 0 was /dev/ad4p3
ad6p3 ONLINE 0 0 0
ad10p3 ONLINE 0 0 0
raidz1 DEGRADED 0 0 0
772440535543473728 UNAVAIL 0 0 0 was /dev/ad4p4
ad8p4 ONLINE 0 0 0
ad10p4 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad6p5 ONLINE 0 0 0
ad8p5 ONLINE 0 0 0
ad10p5 ONLINE 0 0 0

errors: No known data errors
freenas:~# gpart show ad10
=> 34 1953525101 ad10 GPT (932G)
34 131072 1 freebsd-ufs (64M)
131106 131072 3 freebsd-ufs (64M)
262178 664322432 4 freebsd-ufs (317G)
664584610 131072 5 freebsd-ufs (64M)
664715682 1288809453 - free - (615G)

freenas:~# gpart add -b 664715682 -s 131072 -t freebsd-ufs -i 11 ad10
ad10p11 added
freenas:~# gpart show ad10 | tail -2
664846754 1288678381 - free - (614G)

freenas:~# gpart add -b 664846754 -s 131072 -t freebsd-ufs -i 12 ad10
ad10p12 added
freenas:~# gpart show ad10 | tail -2
664977826 1288547309 - free - (614G)

freenas:~# gpart delete -i 2 ad10
gpart: index '2': No such file or directory
freenas:~# gpart delete -i 12 ad10
ad10p12 deleted
freenas:~# gpart add -b 664846754 -s 312188525 -t freebsd-ufs -i 12 ad10
ad10p12 added
freenas:~# gpart show ad10 | tail -2
977035279 976489856 - free - (466G)

freenas:~# gpart add -b 977035279 -s 131072 -t freebsd-ufs -i 13 ad10
ad10p13 added
freenas:~# gpart show ad10 | tail -2
977166351 976358784 - free - (466G)

freenas:~# gpart add -b 977166351 -s 664322432 -t freebsd-ufs -i 14 ad10
ad10p14 added
freenas:~# gpart show ad10 | tail -2
1641488783 312036352 - free - (149G)

freenas:~# gpart add -b 1641488783 -s 131072 -t freebsd-ufs -i 15 ad10
ad10p15 added
freenas:~#
freenas:~# zpool status
pool: tank
state: DEGRADED
status: One or more devices could not be opened. Sufficient replicas exist for
the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
see: http://www.sun.com/msg/ZFS-8000-2Q
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
tank DEGRADED 0 0 0
raidz1 DEGRADED 0 0 0
10825006633158704898 REMOVED 0 0 0 was /dev/ad4p1
ad6p1 ONLINE 0 0 0
ad8p1 ONLINE 0 0 0
ad10p1 ONLINE 0 0 0
raidz1 DEGRADED 0 0 0
16325851114971065300 REMOVED 0 0 0 was /dev/ad4p2
ad6p2 ONLINE 0 0 0
ad8p2 ONLINE 0 0 0
raidz1 DEGRADED 0 0 0
4071833555875781794 UNAVAIL 0 0 0 was /dev/ad4p3
ad6p3 ONLINE 0 0 0
ad10p3 ONLINE 0 0 0
raidz1 DEGRADED 0 0 0
772440535543473728 UNAVAIL 0 0 0 was /dev/ad4p4
ad8p4 ONLINE 0 0 0
ad10p4 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad6p5 ONLINE 0 0 0
ad8p5 ONLINE 0 0 0
ad10p5 ONLINE 0 0 0

errors: No known data errors
freenas:~# zpool replace -f tank ad4p1 ad10p11
freenas:~# zpool replace -f tank ad4p2 ad10p12
freenas:~# zpool replace -f tank ad4p3 ad10p13
freenas:~# zpool replace -f tank ad4p4 ad10p14
freenas:~#
freenas:~# zpool status
pool: tank
state: ONLINE
scrub: resilver completed after 0h0m with 0 errors on Mon Nov 8 01:01:29 2010
config:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad10p11 ONLINE 0 0 0
ad6p1 ONLINE 0 0 0
ad8p1 ONLINE 0 0 0
ad10p1 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad10p12 ONLINE 0 0 0
ad6p2 ONLINE 0 0 0
ad8p2 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad10p13 ONLINE 0 0 0
ad6p3 ONLINE 0 0 0
ad10p3 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad10p14 ONLINE 0 0 0 1K resilvered
ad8p4 ONLINE 0 0 0 1.50K resilvered
ad10p4 ONLINE 0 0 0 1.50K resilvered
raidz1 ONLINE 0 0 0
ad6p5 ONLINE 0 0 0
ad8p5 ONLINE 0 0 0
ad10p5 ONLINE 0 0 0

errors: No known data errors
freenas:~#
freenas:~# gpt add -i 1 -s 131072 ad4
freenas:~# gpt add -i 2 -s 312188525 ad4
freenas:~# gpt add -i 3 -s 131072 ad4
freenas:~# gpt add -i 4 -s 664322432 ad4
freenas:~# zpool replace -f tank ad10p11 ad4p1
freenas:~# zpool replace -f tank ad10p12 ad4p2
freenas:~# zpool replace -f tank ad10p13 ad4p3
freenas:~# zpool replace -f tank ad10p14 ad4p4
freenas:~# zpool status
pool: tank
state: ONLINE
scrub: resilver completed after 0h0m with 0 errors on Mon Nov 8 01:02:55 2010
config:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p1 ONLINE 0 0 0
ad6p1 ONLINE 0 0 0
ad8p1 ONLINE 0 0 0
ad10p1 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p2 ONLINE 0 0 0
ad6p2 ONLINE 0 0 0
ad8p2 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p3 ONLINE 0 0 0
ad6p3 ONLINE 0 0 0
ad10p3 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ad4p4 ONLINE 0 0 0 17.5K resilvered
ad8p4 ONLINE 0 0 0 18K resilvered
ad10p4 ONLINE 0 0 0 18K resilvered
raidz1 ONLINE 0 0 0
ad6p5 ONLINE 0 0 0
ad8p5 ONLINE 0 0 0
ad10p5 ONLINE 0 0 0

errors: No known data errors
freenas:~#
freenas:~# df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/da0s1a 3.6G 247M 3.0G 7% /
devfs 1.0K 1.0K 0B 100% /dev
procfs 4.0K 4.0K 0B 100% /proc
tank 913G 128K 913G 0% /mnt/tank

プロフィール

Author:nakanote
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。