LoginSignup
0

More than 5 years have passed since last update.

何気ないfreebsd-updateがZFSストレージプールを傷つけた

Last updated at Posted at 2018-10-04

はじめに

FreeBSDの更新をしたら正常にコマンドを実行できない状態に陥ったので、ひとまずデータだけを復旧したっていう話

経緯

以前からhp microserverにFreeBSD 10.1をインストールして、ファイルサーバとして利用していた。ストレージにはZFSを利用。そこに今回思い付きでPT3を入れて録画サーバとしても利用しようかなと思ったのが事の発端。

https://hgotoh.jp/wiki/doku.php/documents/freebsd/freebsd-019
上記URLに書いてあることを愚直に実行してPT3の関連ソフトウェアを導入していこう、と考えていたがrecpt1のautogen.shを実行するところで、autoconfとautomakeが要求されるのだが、それらのインストールでP5関連のエラーが発生し、解消しない。
海外のサイト見てると/usr/portsの下のファイルをコピーしたりして対応しているworkaroundも見受けられたが、portsの実装の問題のようにも見えるので、OS環境更新してみるべと思って実行したのが以下コマンド。

freebsd-update -r 11.2-RELEASE upgrade
freebsd-update install

今にして思えば軽いノリでfreebsd-update を実行したのがすべての間違いだった。
上記コマンド実行後、リブートしてからもう一度freebsd-update install打ってね♡、って内容の文言が表示されたのでそのまま実行。するとその後から

# ls
/bin/csh: Exec format error.
# what /boot/kernel.old/kernel
ELF interpreter /libexec/ld-elf.so.1 not found, error 8
Abort

こんな感じのエラーが。どうもOS領域が破損してしまったらしい。こうなってくるとPT3の導入がどうというより、元々のファイル復旧が先決となってしまった。

ファイルを認識するまで

ここからはコンソール作業。まずはリブート後、kernel.oldで起動しようとしてみた。
が、あいにくエラーは解消されない。
仕方ないので FreeBSDをLiveCDから起動して、ファイルサーバとして使っていた領域だけでも解消しよう。
まずはZFSストレージプールをマウントせねば。

# zpool import
## 確認したidを指定する
# zpool import -f <id> mydata

とりあえずmydataにリネームしてインポートしてみた。なお、ちゃんとエクスポートしたストレージプールではないので、importには"-f"オプションが必要。

しかしながら、

# zpool list
ELF interpreter /libexec/ld-elf.so.1 not found, error 8
Abort

また、このエラーか、ELF。

これは、zpool import で/libexec下、というかルートのファイルシステム を上書きしているのかな。ZFSをルート領域に割り当ててたからさもありなん。
仕方ないので再起動後、今度は別のパスにインポート。手順は以下URLを参照した。
https://forums.freebsd.org/threads/mounting-and-editing-hard-disk-from-livecd.61726/

# mkdir /tmp/mydata
# zpool import -fa -R /tmp/mydata
# ls -l /tmp/mydata
~(ファイルの一覧)~

ひとまずこれでOK。

ファイルの退避

ファイルが参照できるようになったので、次はファイルの退避。この状況でSamba共有してWindowsなりUbuntuなりからコピーしようとしたけど、LiveCDで起動している状況でportsやpkgのインストールができないようだったので(うまいことやる方法あったら教えてください)、外付けUSB HDD(FAT32)にコピーすることにした。
それでもとりあえずネットワーク接続。

ifconfig bge0 inet 192.168.1.50 subnet 255.255.255.0
route add default 192.168.1.1

それでこの後、/etc/resolv.conf に nameserver 192.168.1.1 を追加してネットワーク接続OK。

次に以下ページを参考にしてフォント b16.fnt をダウンロードして利用。
http://april.fool.jp/blogs/2014/11/freebsd-10-1-release%E3%81%AEvt4%E3%81%A7console%E3%82%92%E3%81%86%E3%81%A4%E3%81%8F%E3%81%97%E3%81%8F/

ただ、fetchでダウンロードしようとすると、Authentication Errorとなったため、別PCでダウンロードしてFTP経由で取得した。ダウンロードURLは
http://people.freebsd.org/~emaste/newcons/b16.fnt
そのあと以下コマンド実行してコンソールで日本語表記可能となった。

# vidcontrol -f ./b16.fnt

次にFAT32のマウントは以下のコマンドで実行。手順は以下URLを参照した。
http://noichigo.moe.hm/freebsd/63.html

# mount -t msdosfs -o large,-L=ja_JP.UTF-8 /dev/da0s1 /mnt

-Lのオプション付けないと文字化けして、cpがInvalid Argumentになってコピー失敗となったので。
これでようやくファイルの退避が可能となった。

まとめ

結局freebsd-update の何がいけなかったのか、わからないままだけどとりあえずデータは救えたのでよしとしよう。
ファイルの退避が終わったら、改めてFreeBSD 11をインストールして、ZFSでRAID組もうかな。ふー、長い闘いだった。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0