ラベル Linux の投稿を表示しています。 すべての投稿を表示
ラベル Linux の投稿を表示しています。 すべての投稿を表示

2010年3月5日金曜日

Linux Soft Raid 5 で構築したHDDの復旧

Linux Soft Raid5で運用していたHDD群のある鯖が、停電によって起動しなくなってしまったので、それの普及ログ。

【症状】
Kernel panic - not syncing: Attempted to killinit!
が表示され、起動しない。
上の部分ではraid5(/dev/md0)がスタートできないらしいメッセージがちょこっと垣間見える。

【目的】
/home ディレクトリの救出
/etc/{passwd,shadow,group} ファイルの救出

【復旧手順】
1.ドライブをつないだまま(危険だが)KnoppixのCDROMから起動。

2.ターミナルから以下を入力、HDDの情報確認。
# fdisk -l                                                                                   g
bhhuhiuhiuhiutyfytftyfffffffffffffffffffffffffffffffffffffffffffffffffffffffdd
  メモる情報は、パーティションの開始・終了ブロック、シリンダ、ヘッダ、セクタサイズ、種類、HDD型番

3.HDDを別PCにつないで、データをコピーする。
  # dd if=/dev/sda of=sda.img bs=512M
  # dd if=/dev/sdb of=sdb.img bs=512M
  # dd if=/dev/sdc of=sdc.img bs=512M

4.今回はvmwareの固定サイズHDDとして認識させたいので、.img 2 .vmdk にする。
  以下の内容をsda.vmdkとして作成する。
# Disk DescriptorFile
version=1
encoding="Shift_JIS"
CID=27cbf516
parentCID=ffffffff
isNativeSnapshot="no"
createType="monolithicFlat"

# Extent description
RW XXX FLAT "sda-flat.vmdk" 0

# The Disk Data Base 
#DDB

ddb.adapterType = "ide"
ddb.geometry.sectors = "63"
ddb.geometry.heads = "255"
ddb.geometry.cylinders = "14593"
ddb.uuid = "60 00 C2 92 c5 2d 3a 82-1c 02 cf 54 6f 63 4b 2f"
ddb.longContentID = "518ac67ef7fe516d55287b9b27cbf516"
ddb.virtualHWVersion = "7"

  sda.img をsda-flat.vmdkにファイル名変更。
  XXXは ヘッダ*セクタ*シリンダ を計算した数値。
  ヘッダ、セクタ、シリンダの項目も書き換える。

5.vmwareで、既存のHDDとして追加。
6.仮想マシン起動し、soft raidデバイスを作成する。
  ## 状況確認
  # sudo mdadm --examine /dev/sda1
  # sudo mdadm --examine /dev/sda2
  # sudo mdadm --examine /dev/sda3
  # sudo mdadm --examine /dev/sdb1
  # sudo mdadm --examine /dev/sdc1

  ## raidデバイス作成
  # sudo mdadm --assemble /dev/md0 /dev/sda3 /dev/sdb1 /dev/sdc1

  ## dev/sdb1 が壊れているようで起動しない。Raid5なので、起動条件(n-1台は正常)を満たしているので強制起動。
  # sudo mdadm -R /dev/md0

  ## 起動しない。カーネルパラメータをいじる
  ## ubuntuだと、rootにならないとpermission deniedで変更できなかった
  # sudo su -
  # echo 1 > /sys/module/mc_mod/parameters/start_dirty_degraded

  ## 再び起動
  # sudo mdadm -R /dev/md0 # 起動できた  

  ## マウントしてHDDにアクセス
  # sudo mount /dev/md0 /mnt
  # cd /mnt

2009年12月7日月曜日

/dev/dsp1の再生

vlcで普通に/dev/dsp1を開こうとするとエラーになる。
とりあえずコンソールから開くには
$ vlc oss:///dev/dsp1
でできる。
これでvlcでラジオが聞けるぞ~

2009年12月2日水曜日

tscreen 0.9.4 on Cygwin

GNU Screenは古いの?
に書かれているように,screenの開発が滞っているため,カッとなってforkさせたtscreenというものがあるらしい.
とりあえず何も考えずにCygwinにインストールしてみるが,configureエラーとコンパイルエラーが発生するので,
screen-4.0.2へのCygwinパッチを参考にパッチを作成してみた.

参考ページ
cygwinのscreen

参考パッチ
Re: 1.5.17: problem building GNU screen
Re: screen

上のパッチはconfigureできないバグを,下のパッチはmakeできないバグを修正するモノらしい.

tscreen-0.9.4用に作ったパッチを置いておきます.
tscreen-0.9.4-cygwin.patch

使い方は以下の通り.
$ ls
tscreen-0.9.4.tgz tscreen-0.9.4-cygwin.patch
$ tar zxvf tscreen-0.9.4.tgz
$ cd tscreen-0.9.4
$ patch -p1 < ../tscreen-0.9.4-cygwin.patch
$ ./configure --enable-colors256
$ make
$ make install
$ tscreen


起動確認はできたが,詳細な動作確認はしていないので,正常に動くかどうかは不明...

2009年11月30日月曜日

linux + usb radio + peercast

がんばったのでメモ。
何をやりたいのかはコマンドから察してください。
Peercastの設定はすでに完了しているものとしています。

構成
・Ubuntu 9.04 からアップグレードした Ubuntu 9.10 (カーネル2.6.31)
・PeercastVP
・SUNTEC RDPC-101 (USB AM/FM tuner)
・SUNTEC RDPC-101 (USB AM/FM tuner) ドライバ カーネルパッチ for Linux (Driver Labo. 製)

1. RDPC-101をLinuxで使えるようにする

まず、以下のような手順でドライバを組み込みます。

コンパイル用のディレクトリを作成。
$ mkdir ~/module
$ cd ~/module

カーネルパッチから、radio-rdpc101.cの部分だけを抜き出し、radio-rdpc101.cとして保存する。
ただし、2.6.31系カーネル(新しめのカーネル)のときには
#include <linux/smp_lock.h>
を書き加える必要がある。

RDPC-101のカーネルモジュールを作成。カーネルまるまる再構築はめんどくさいのでモジュールだけ。
$ vi Makefile # 内容は「モジュールのみコンパイル」の記事を参照。
$ ls
Makefile radio-rdpc101.c radio-rdpc101.ko .........

モジュールの組み込み。
$ sudo /sbin/modprobe videodev #radio-rdpc101が依存しているので
$ sudo /sbin/insmod radio-rdpc101.ko

ここでRDPC-101をUSBポートに挿す。
先に変なところで挿しちゃってたら、違うドライバ(radio-si470x)が使われてしまいエラーになる。
そのときは
$ sudo /sbin/rmmod radio-si470x
として、モジュールを除去してから上の作業を行えばOK。

再生確認。
$ sudo /sbin/modprobe snd-pcm-oss   # alsaの疑似oss機能を追加(/dev/dsp*が作成される)
$ sudo /dev/dsp1 > /dev/dsp

ここで、スピーカーから音が聞こえればOK
うちのマシンでは音声が再生されない仕様(?)なので、サウンドレコーダーでラジオを録音したファイルを他PCに転送して再生を確認した。

2. ffmpeg + vlc media player でPeercastにストリーム配信


以下のコマンドでoggストリーミング。
$ ffmpeg -f oss -ac2 -i /dev/dsp1 -ar 44100 -f wav - | cvlc -vvv - --sout '#transcode{acodec=vorb,ab=256,channels=2}:duplicate{dst=std{access=shout,mux=ogg,dst=[user]:[passwd]@[host]:[port]/}} --sout-keep'

[user],[passwd],[host],[port]は、Peercastへ配信するためのユーザー名、パスワード、Peercastが動いているホスト、ポートを指定する。

以上で、配信ができました。

文章量は少ないけど、いろんな試行錯誤で、再生できるまでに缶詰丸5日もかかった。。。


追記
# スピーカーで聞きながら配信
$ ffmpeg -f oss -ac2 -i /dev/dsp1 -ar 44100 -f wav - | cvlc -vvv - --sout '#duplicate{dst=display,dst=transcode{acodec=vorb,ab=256,channels=2}:std{access=shout,mux=ogg,dst=[user]:[passwd]@[host]:[port]/}} --sout-keep'

#これだとうまくいかない
$ ffmpeg -f oss -ac2 -i /dev/dsp1 -ar 44100 -f wav - | cvlc -vvv - --sout '#transcode{acodec=vorb,ab=256,channels=2}:duplicate{dst=display,dst=std{access=shout,mux=ogg,dst=[user]:[passwd]@[host]:[port]/}} --sout-keep'

2009年11月29日日曜日

Linuxのカーネルモジュールだけコンパイル・インストール

以下の内容のMakefileを作成する
obj-m := hello.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)

default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

makeする
$ make

モジュールの組み込み・除去は次のようにする
$ su
$ /sbin/insmod hello.ko
$ /sbin/rmmod hello.ko

次のようなコマンドで確認
$ dmesg
$ /sbin/modprobe -l | grep hello

参考
Linux Kernel 2.6.x プログラミングガイド
Loadable Kernel Moduleの作り方
LS-GLのiptablesによるルーター化(insmodできないときの解決法)

Fedora11でカーネル再構築

カーネル再構築に必要なパッケージをインストール
$ su
$ yum install rpmdevtools yum-tuils
$ exit

パッケージ構築用のディレクトリ構造を作る
$ cd
$ rpmdev-setuptree

カーネルソースをダウンロードする。特定のバージョンがほしい場合はどっかから持ってくる。
$ yumdownloader --source kernel

カーネルソース再構築に必要なパッケージをインストール
$ su
$ yum-builddep kernel-.fc11.rpm
$ exit

カーネルソース展開と準備
$ rpm -Uhv kernel-.fc11.src.rpm
$ cd ~/rpmbuild/SPECS
$ rpmbuild -bp --target=`uname -m` kernel.spec

カスタムカーネル作成準備
ここでパッチを当てる(※はずだが、コンパイル時にソースが再展開されるのでパッチは無効になる)
$ cd ~/rpmbuild/BUILD/kernel-/linux-
$ cp configs/kernel-.config .config
$ make oldconfig
$ make menuconfig
$ make xconfig
$ cd ~/rpmbuild/SPECS
$ vi kernel.spec

#% define buildid .local

%define buildid .test

コンパイル(時間かかる)
$ rpmbuild -bb --target=`uname -m` kernel.spec

インストール
$ cd ~/rpmbuild/RPMS/i686
$ su
$ rpm -ihv kernel-.test.fc11.i686.rpm

ちなみに、パッケージを削除するには
$ su
$ rpm -ehv kernel-.test.fc11.i686

参考文献

Fedora 10でカーネルを再構築するには

FC4 私的MEMO カーネル再構築とrpmの作成
RPM

フォロワー