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

disk signatureの候補をBCDファイルから読み出して表示/修復するスクリプト

https://forums.ubuntulinux.jp/viewtopic.php?pid=67448#p67448
なこともあるので、救うためのツールを開発できないかなぁと。

解決方法は
http://kiyoandkei.bbs.fc2.com/?act=reply&tid=1911992

「Windows7のBCDからdisk signatureを抜き出す - 鈴木 2010/09/06 (Mon) 14:32:43」

https://forums.ubuntulinux.jp/viewtopic.php?pid=67507#p67507

https://forums.ubuntulinux.jp/viewtopic.php?pid=67518#p67518
に書いた通りなのですが、これができない初心者の方向けに、スイッチポンで解決できるツールでも作ってみようかと。

まずは全てのパーティション(拡張とスワップ以外)を手当たり次第にマウントしてBoot/BCDファイルを探すスクリプトが必要ですが、こいつは
kiyoshi's help
たとえば、
Linux 起動用initスクリプトver.9
の一部を修正すれば可能です。

次に、BCDからdisk signatureらしきものを抜き出すスクリプトですが、
00 00 00 00 00 00 00 00 01 00 00 00 .. .. .. ..
タイプなら、

$ hd マウントポイント/Boot/BCD | grep " 00 00 00 00 00 00 00 00 01 00 00 00 .. .. .. .. "|sed -e "s/.* 01 00 00 00 //"|sed -e "s/ |.*$//"|sort|uniq -c

でOKです。何回出てきたかの数字の後に4バイトが表示されます。

$ hd マウントポイント/Boot/BCD | grep " 00 00 00 00 00 00 00 00 01 00 00 00 .. .. .. .. "|sed -e "s/.* 01 00 00 00 //"|sed -e "s/ |.*$//"|sort|uniq -c > /tmp/test

なんてしておいて、番号も付けてreadで選択させれば良いでしょう。

さて、どのsignatureか選択されたら、
それ(.. .. .. ..)を適当な変数に入れて(以下では$test1)の16進上の位置を見つけ出します。

$ hd マウントポイント/Boot/BCD | grep " 00 00 00 00 00 00 00 00 01 00 00 00 $test1 "|cut -d" " -f1

行の先頭の16進数を10進数に変換し、12を足してやります。

$ echo "obase=10;ibase=16;$(hd マウントポイント/Boot/BCD | grep " 00 00 00 00 00 00 00 00 01 00 00 00 $test1 "|cut -d" " -f1)+C" | bc

これで、BCDの中の選択したdisk signatureの先頭位置が分かるので、後はsudo ddで書き込めば良いです。

スクリプトの方針は頭の中で完成しました。

ぼちぼち作ります。

2010/9/8

とりあえず、出来ました。
bcd2mbrDiskSign.txt
の内容をテキストエディタに貼り付けます。
一行目が
#!/bin/sh
になるようにします。
適当な名前で保存します。例えば、bcd2mbrDiskSign.txt
そして端末で
$ sudo sh ./bcd2mbrDiskSign.txt
で実行します。

Boot/BCDを含むパーティションが複数あると、どれを選ぶか聞かれます。
まぁ、全部読み込ませる仕様にしても良いのですが。
一応、選択することにしています。

パーティションが選択されると、見つかったdisk signatureらしきものの前にそれが何回見つかったのかを付したもの
が1行ずつ表示されます。
書き込みたいdisk signatureの前の番号をタイプしてENTERキーを押します。

すると、本当に/dev/sdaのMBRに書き込むか聞かれますので、書き込んでも良いなら
yes
とタイプしてENTERキーを押します。すると、カレントディレクトリに
sdambr年-月-日T時刻+世界標準時刻からのずれ
という名前で、変更前のMBR(512バイト)が保存されます。心配なら、これを、Ubuntuを終了しても消えないメディアに保存しておくと良いでしょう。
そして、書き込みが試みられます。

成功したら
・・・・(選択したdisk signature)is successfully written in MBR of /dev/sda
と表示されます。

/dev/sda以外にも書き込めるようにするとか、まだまだ改良すべき点がありますし、バグがある可能性も高いです。
使われる方は自己責任で使ってください。失敗して生じた損害を鈴木清は一切補償しません。

2010/9/9

bcがa-fを16進数文字として認識しないバグを修正しました。
ddで書き込みメッセージが表示されないように修正しました。
不慮の失敗の場合に、"Something wrong happened. MBR has not been changed."と表示されるようにしました。

2012/9/13

オリジナルの投稿では問題無いのですが、このページをweb上で閲覧した場合には行頭の半角スペースや半角スペースの複数が一つの半角スペースにまとめられたりして、表示され、web上でこのページのスクリプトをコピペしたものを実行しても、正常には動作しませんでした。
そこで、オリジナルのスクリプトのファイルへのリンクを作りました。

テーマ : Linux
ジャンル : コンピュータ

プロフィール

kiyoshi

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

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

この人とブロともになる

QRコード
QRコード
since 2011/9/25
現在の閲覧者数:
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。