読者です 読者をやめる 読者になる 読者になる

Think threshold

中の人のIYHにいたる顛末と購入レビュー。ときどき自宅システム構築備忘録。

USBメモリをよく壊す程度の能力(Nas4Free復旧+9.3系カスタムイメージ作成)

PCにかぎらず、壊れてほしくないものほど一番壊れてほしくない時に壊れたりする。

Nas4FreeをMicroServer上で動作させていた所、

メモリエラーが出ていたので復旧作業の手順です。

同時にOSアップデートも行いました。

 

 

・環境おさらい

  • HP Microserver N54L
  • Nass4Free embedded(USBメモリ)
  • 16GB Mem
  • DT01ACA300 x5

事象:掃除のために9ヶ月ぶりに電源を落とし、掃除後立ち上げてみると

異常なほどWebUIが遅いため、コンソールを見ると以下の様なログが延々と。

f:id:makoro2_0:20150421030523j:plain

んで調べてみると、どうやらUSBメモリのリードエラーっぽい。

そりゃWebUI遅いわけだ。

 

New build, ran into issue | FreeNAS Community

 

このBSDフォーラムだとSanDiskかKingston使えよHAHAHAって書いてあるけど

うちSanDiskなんですけどねぇ。格安モデルはSanDiskでも耐久性低いのかな。

 

 ・最終目的

現状リリースされているNas4Free 9.3系ではFTDIライブラリが入っていなく、

FTDIを用いたHD44780互換キャラクタ液晶ディスプレイを利用できません。

以前、ここを参考にしたLCDキャラクタデバイスを作成しましたが、

NAS4Free9.1でLCDモジュールを使う。 | 環境さんぷる

 

makoro.hatenablog.jp

 

9.3系では以下の様なエラーが出て起動できませんでした。

(WebUIではエラーコードのみだったため、CLIで起動したところ以下の様なエラーが出ていました)

Could not open driver module /usr/local/lib/lcdproc/hd44780.so: Shared object "libftdi.so.21" not found, required by "hd44780.so"
Driver [hd44780] binding failed
Could not load driver hd44780
There is no output driver
Critical error while initializing, abort.
/etc/rc.d/LCDd: WARNING: failed to start LCDd

原因としては下記2点のようです。

・/usr/local/lib/libftdi.so.21 がない

/usr/local/lib/lcdproc/hd44780.so がlibftdi.so.21をうまく参照できてない

なお、起動後に9.2系から持ってきた上記モジュールを導入すると動作するのですが、

根本解決にはこれらのライブラリを入れたカスタムイメージを作成する必要があります。

(embeddedはOSはを全てオンメモリで展開して動作するので、

再起動すると元の状態に戻ってしまうため)

 

・復旧+カスタムイメージ作成手順

0)必要部材の調達

懲りずにまたCruser Fitを選択。また、Cruser fit以外にも、適当なサイズのUSBメモリが別途必要になります。今回は予備のUSBメモリがなかったため、Cruser Fitを2本チョイス。

また作業用として別途手頃なHDD/SSDを用意します。

 

1)設定内容の取得

復旧というか、まずUSBメモリが壊れているので新しいのに交換しないといけません。

壊れているとはいえ、特定のビットのみのようで、起動は何とか出来ている状態。

そのため、旧USB上で設定されている設定内容を取得します。

System→Backup/Restoreより「Backup Configulation」で設定ファイルとしてダウンロードします。

 

※以降は トラブル中の筐体以外で作業しています。

 

2)Nas4Free 9.2系のLiveUSB/LiveCDを用いて起動し、ライブラリを抽出

Live USBであればDD for Winでイメージ書き込み、LiveCDであればISOを焼き

テスト用マシンでNas4Free 9.2系を起動します。

起動後

・つないだHDDをマウント(/mnt/disk0としてマウントしています)

SSHを有効化(コンソール上のshellで作業するのであれば必須ではありません)

で、起動中の9.2系のライブラリをHDDにコピーします。

nas4free: ~ #cp /usr/local/lib/libftdi.so.21 /mnt/disk0/.
nas4free: ~ #cp /usr/local/lib/lcdproc/hd44780.so /mnt/disk0/.

 

3)Nas4Free9.3のカスタムイメージを作成

 9.3系のインストールされたUSBから、2)で抽出したライブラリを組み込んだ

カスタムイメージを作成します。

上記と2)と同様、LiveCD/LiveUSBで起動後に

・つないだHDDをマウント(/mnt/disk0としてマウントしています)

SSHを有効化(コンソール上のshellで作業するのであれば必須ではありません)

を行っています。

また、イメージ作成手順は以下のとおりです。

 

3-1)本番用USB(Cruser Fit)へembeddedイメージのインストール

LiveUSB/LiveCDインストール後、

項番9よりembeddedイメージをUSBへインストールします。

 

3-2)作成したUSBをマウント

作成したUSBの第1パーティションをマウントし、

中の起動イメージを編集できるようにします。

nas4free: ~ # df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/xmd0 122606 35730 86876 29% /
devfs 1 1 0 100% /dev
/dev/xmd1 736430 257652 478778 35% /usr/local
procfs 4 4 0 100% /proc
/dev/md0 126492 728 123236 1% /var
tmpfs 65536 40 65496 0% /var/tmp
/dev/ufsid/55555875726d34ef 121089612 32836 111369608 0% /mnt/disk0
nas4free: ~ # mkdir /mnt/cfit
nas4free: ~ # mount /dev/da1s1a /mnt/cfit/
nas4free: ~ # ls /mnt/cfit/
.snap conf mfsroot.gz version
boot mdlocal.xz mfsroot.uzip

 この中から、mdlocal.xzを取り出し、カスタマイズしたものを作ります。

なお、mfsroot.gz は / 以下を、mdlocal.xz は /usr/local/ 配下のイメージですので

必要に応じて違う場所のカスタマイズも可能です。

 

3-3)mdlocal.xzカスタム化

いよいよ作業の本丸、カスタム化です。 

mdlocal.xzを解凍し、mdconfigコマンドを使いRAMディスク化、それをマウントし

内部のライブラリを入れ替えます。

nas4free: ~ # cd /mnt/cfit/
nas4free: cfit # ls
.snap conf mfsroot.gz version
boot mdlocal.xz mfsroot.uzip
nas4free: cfit # cp mdlocal.xz /mnt/disk0/.
nas4free: cfit # cd /mnt/disk0/
nas4free: disk0 # ls
.snap .sujournal mdlocal.xz
nas4free: disk0 # xz -dvo mdlocal.xz
nas4free: disk0 # ls
.snap .sujournal mdlocal
nas4free: disk0 # mdconfig -a -t vnode -f mdlocal
md1
nas4free: ~ # mkdir /mnt/imgroot
nas4free: ~ # mount /dev/md1 /mnt/imgroot/
nas4free: ~ # cd /mnt/imgroot/
nas4free: imgroot # ls
.snap bin etc lib libexec sbin share www
nas4free: imgroot # cd lib
nas4free: lib # cp /mnt/disk0/libftdi.so.21 .
nas4free: lib # cd lcdproc/
nas4free: lcdproc # cp /mnt/disk0/hd44780.so .

 

3-4)USBへmdlocalの書き戻し

作成したmdlocalをアンマウント・圧縮の上、USBフラッシュへ書き戻します。

 nas4free: /mnt # umount /mnt/imgroot/
nas4free: /mnt # mdconfig -d -u 1
nas4free: /mnt # cd disk0/
nas4free: disk0 # ls
.snap .sujournal mdlocal
nas4free: disk0 # xz -zv mdlocal
mdlocal (1/1)
0.3 % 0.0 MiB / 1.9 MiB = 0.000 0:01

(中略)

nas4free: disk0 # ls
.snap .sujournal mdlocal.xz
nas4free: disk0 # cd /mnt/cfit/
nas4free: cfit # ls
.snap conf mfsroot.gz version
boot mdlocal.xz mfsroot.uzip
nas4free: cfit # rm mdlocal.xz
nas4free: cfit # cp /mnt/disk0/mdlocal.xz .
nas4free: cfit # ls
.snap conf mfsroot.gz version
boot mdlocal.xz mfsroot.uzip

 4)作成したUSBメモリNas4Freeを起動し、設定をリストア

作成したUSBを用いてNas4Freeを起動し、設定をリストアします。

なおリストアする際は、adminアカウントのパスワードが

バックアップ時に設定されていたものと同じである必要があるので注意が必要です。

 

5)LCDproc動作確認

ちゃんと動いていることを確認します。

f:id:makoro2_0:20150516001138j:plain

 

 

 これにて終了です。

Nass4Freeの次のメジャーverでは直っているといいなぁ。

 

参考:

Momma's Wiki: FreeNAS/ファイルマネージャ - FreeNASに組込まれたファイルマネージャQuiXplorerの設定 f...

ZFSのパフォーマンスが若干向上した模様 | 環境さんぷる

[Lcdproc] lcdproc v0.5.3 - ConnectionType=ftdi not being recognized