RAIDをやめようと思ってスーパーブロックを削除しちゃった話(解決済み)

よく分かっていないまま記事を書いているところがあるので、間違っている部分があるかもしれません!その場合はどうぞご指摘下さい。

症状

2TBのHDD2台でRAID1を組んでいたが、書き込み速度が遅いのが気になってRAID解除しようとした。どっかのサイトに乗っていたのに従って、

sudo umount /dev/md0
sudo mdadm --misc --stop /dev/md0

をコマンドラインで実行。続いてあろうことかスーパーブロックの削除を行ってしまった。

※これをやるとHDDがマウントできなくなる
sudo mdadm --misc --zero-superblock /dev/sda1 /dev/sdb1

よく知らないままやったのが最大の間違い。このコマンドでHDDのパーティション区切り等の情報を保存している領域を0で上書きしてしまう。しかも両方のHDDに適用してしまった。

試行錯誤

スーパーブロックが壊れたり消してしまった場合でも、HDD内にバックアップが残っているらしいのでそこから復元を試みた。

#スーパーブロックが保存されている場所を表示
sudo mkfs.ext3 -n /dev/hda5
#スーパーブロックの場所を指定して読み込み出来るかチェック
sudo fsck.ext3 -b 32768 -B 4096 /dev/hda5

参考ページ https://www.atmarkit.co.jp/flinux/rensai/linuxtips/728fixpartition.html

結果、バックアップの場所は表示されるものの、どのバックアップを使っても復元は出来なかった。

解決

打つ手がないので数万円払ってデータリカバリサービスに頼もうかと思ってた頃、あっさりと解決した。

失われたデータを復元するのではなく、同じRAID構成でもう一度作ってしまおうという発想だ。

まず、動作中のRAIDデバイス(HDDが壊れてもRAIDデバイスが動かないながらも残っていることがある。)があれば停止。

sudo mdadm --stop /dev/md0
mdadm: stopped /dev/md0

続いて、動いていた頃と全く同じようにRAIDを作ってみる。おそらくRAIDデバイスを作るときにスーパーブロックが作成される。全く同じ条件で作ればスーパーブロックも同じ?…にはならなくとも使えるようにはなると思い、一か八かやってみた。

mdadm –createオプションで作る。作るデバイス名は/dev/md0で良いのかもしれないけど、わかりやすさのために一応別の名前にしている。

壊れたHDDを2台とも繋いだまま再作成してもいいけど、また失敗してデータを失わないように、一番最初に壊れた時点のHDDは取っておいて他の1台だけで作業した。HDD1台でRAIDを作るときは、欠けているデバイスの部分は「missing」を入れると存在しなくても作ってくれる。すごい。

sudo mdadm --create /dev/md1 --verbose --level=1 --raid-devices=2 /dev/sda missing
mdadm: /dev/sda appears to be part of a raid array:
       level=raid0 devices=0 ctime=Thu Jan  1 09:00:00 1970
mdadm: partition table exists on /dev/sda but will be lost or
       meaningless after creating array
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
mdadm: size set to 1953383488K
mdadm: automatically enabling write-intent bitmap on large array
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.

僕の場合は作成した時点で/dev/md1が勝手にマウントされた。手動マウントするなら、

sudo mount /dev/md1 /mnt

もし何も反応がない場合はダメ押しの再起動を試してみる。

sudo reboot

これで何とかなった。

TinkerBoardと外付けHDDでRAIDのデータサーバを作る

はじめに

こんにちは。今回はTinkerBoardと外付けHDDで家庭内データサーバを組もうとした話をご紹介します。

RaspberryPiでもできる?

要るもの

いよいよ設定!

HDDをフォーマット

コマンドライン上でフォーマットする方法もあるけれど、今回はみんな大好きgpartedを使いました。GUIで直感的に操作できるし、確定を押すまで全ての処理は行われないので最終確認してから実行できるので僕はいつもgparted使ってます。入っていない人はsudo apt install gpartedすれば入ると思われます。

sudo gparted
gpartedの操作画面

まずは右上の/dev/xxxと表示されているプルダウンからフォーマットするデバイスを選択します。買ったばかりの状態のHDDでは注意マークが出ているかと思います。そういう場合は「デバイス」→「パーティションテーブルの作成」を行ってください。続いて「パーティション」→「New」を選択します。

パーティションの設定

パーティションの設定はほとんどデフォルトでいいと思います。参考にしたサイトでも紹介されている通り、「新しいサイズ」の項目は最大サイズよりも数百MB少なくしました。今回は全く同じHDDを購入し、最大サイズも全く同じでしたが念の為です。ラベル名は好きな名前をつけてください。その名前でフォルダ名が作られ自動でマウントされるので、WD01、WD02などわかり易い名前がいいでしょう。
操作が終わったらチェックマークを押して確定しましょう。処理が始まります。

HDD2台をRAID構成にする

複数台のHDDを使うことで、例えどれかが壊れてデータが失われても復旧できるようにデータに冗長性をもたせる技術をRAIDといいます。今回は2台のHDDに全く同じデータを書き込む「RAID1」を構成します。参考サイトのmdadmコマンドを一部変更して、次のようにしました。

sudo apt install mdadm
sudo mdadm --create /dev/md0 -v --raid-devices=2 --level=raid1 --chunk=128 /dev/sd[ab]

変更点は–raid-devicesの数を2にしたこと、–levelをraid1にしたこと、最後のデバイス名を自分の環境に合わせたことです。進捗は

watch -n 1 -d cat /proc/mdstat

とすることで確かめられます。RAID構築に一日以上かかるみたいです。ひえぇぇ。気長に待ちましょう。

できたデバイスをフォーマットしてラベル付け

2TBのディスクのフォーマットが完了するまでに2日以上かかってしまいました。完了したら最後の手順です。gpartedを使い、最初にHDDをフォーマットした時と同じ手順でデバイス/dev/md0をext4等の形式でフォーマットします。
そのままだとマウントしたときにやたら長いランダム文字列のフォルダができてしまうので、ラベル名を変えて置きます。gpartedでデバイスをアンマウントして、「パーティション」→「Label File System」です。

これで2つのHDDをRAID構成で使うことができます。お疲れ様でした。

参考にしたサイト

Raspberry PiにUSBメモリ4本でRAID10を組む

RaspberryPi 3BからTinker Boardにお引越し

こんにちは。パパドラゴンです。数年前からラズパイでサーバーを動かしています。もちろんこのページがあるサーバーも自作です。しかし最近音声認識とかOpenCVを使ったり、他のIoT機器と連携したりするとなるとちょっとCPUやら通信速度やらの性能不足が気になってきました。最近流行っているスマートホーム的な使い方を考えてみても、音声認識や画像認識、センサ値の取得などは小型のArduinoやラズパイに任せ、メインのコンピュータはそれらのデータを集めて他の機器に指示を出すような構成にしてみようかと思います。

そのため、ネットワーク通信の性能と低消費電力を基準に他のシングルボードコンピュータを調べてみたところ、Tinker Boardというのが良さそうだったので買ってきました。

Tinker Board

ASUS製のシングルボードコンピュータです。ラズパイと比較して、CPUの計算パワー、ネットワーク通信速度がかなり高いです。その代り価格もラズパイの2倍くらいしますが、この価格でこのスペックならばコストパフォーマンスはとても良いと言い切っていいでしょう。



型番にSがついているものはeMMC(内蔵フラッシュメモリ)があるタイプですが、僕の使い方では高速起動とかは必要ないかなと思ったので通常版を買いました。
電源はラズパイよりもさらに多い3.0Aが必要ですので、こちらも専用品を買ったほうが良いと思います。SDカードについては何でもいいですが、現在のラズパイで使っていてまだ一度も壊れていないという理由でSUMSUNG製を選びました。

OSインストール後やったこと

SDカードにTinker OSを焼いて起動した後の設定の備忘録です。

SSH関連のインストール

sudo apt-get install avahi-daemon xrdp xorgxrdp

ユーザー名「linaro」の変更

sambaのインストール

sudo apt-get install samba

geditのインストールとrootで編集する際のエラーの対策

sudo apt-get install gedit
visudoして最後の行にDefaults env_keep=”DISPLAY XAUTHORITY” を追加
このコマンド実行するとエラー無くなる(?)
xhost si:localuser:root
ターミナルを開くたびに実行しないといけないので、~/.bashrcに書いておいた

softetherのインストール

これが大変だった。まずはよくある手順通りにsoftetherのサイトからファイルをダウンロードして展開、makeした後/usr/localに移動。
起動スクリプトを/etc/init.d/vpnserverに書いて、systemctl start vpnserver.service。ところがクライアント側のWindowsのsoftether管理マネージャからログインができない。

原因はよくわからなかった。でもnetstat -ltupnと打ってみて443番や992番ポートをvpnserverが使っていなかった。sudo systemctl restart vpnserver.serviceすると治った。よくわからない。後は手順通りにWindows側から設定。

nginxのインストールとletsencrypt

nginxはsudo apt install nginx
let’s encryptはgit clone

(追加予定…)