■昨日の2つ目の更新は以下。
※Windowsでなんとかしようと考えない方が良い事が改めて分かりました。
Squidログの検索結果のURLデコード
http://labunix.hateblo.jp/entry/2012/02/04/224407
■MBRの確認方法
※以下の内、fdiskで見れる情報は除外する。
MBR関連コマンド-debian
http://d.hatena.ne.jp/labunix/20110107
■dfから得られるパーティション情報を基に自動的にチェックする。
※対象のディスクのマウントが必要、実行すると以下のような出力になる。
$ sudo ./mbrchk.sh
INFO:root check ok.
INFO:/dev/sda 0xaa55
INFO:/dev/sda1 0x80
INFO:JUMP 0x48eb
INFO:GRUB 0x0203
INFO:load 0x2000
INFO:Secter 0x00000000
INFO:Segment 0x0202
INFO:/dev/sdb 0xaa55
ERROR:Not Found Active Partition /dev/sdb
ERROR:/dev/sdb MBR first jump
ERROR:Other bootloader version 0x0000
INFO:load 0x0000
INFO:Secter 0x00000000
INFO:Segment 0x0000
■スクリプト
・ファイルに残しても滅多に使わないので、必要なときだけ実行するようにした。
・ddの細かい設定の出来ないシステムでは使えない。
・以外と長いが大したことはしていない。
$ cat mbrchk.sh
if [ `id -u` -eq "0" ];then
echo "INFO:root check ok."
echo ""
else
echo "ERROR:Please run as root"
exit 1
fi
devlist=$(df -h | grep '^/dev/[hs]d' | awk '{print $1}' | sed s/[0-9]//g | sort | uniq)
for bootdev in ${devlist};do
BOOTSIG=$(dd if=${bootdev} bs=2 skip=255 count=1 2> /dev/null | od -tx1 | \
awk '{print "0x" $3$2}' | grep '0xaa55')
if [ ${BOOTSIG} == '0xaa55' ];then
echo -e "INFO:${bootdev} \t${BOOTSIG}"
else
echo "ERROR:Not found boot signature ${bootdev}"
fi
BOOTFLAG=$(dd if=${bootdev} bs=2 skip=223 count=32 2> /dev/null | od -tx1 | \
awk '{print $2}' | nl | grep '80' | awk '{print $1 " " $2}')
echo ${BOOTFLAG} | grep 80 > /dev/null 2>&1 && \
echo "INFO:${bootdev}${BOOTFLAG}" | awk '{print $1 " \t0x" $2}' || \
echo "ERROR:Not Found Active Partition ${bootdev}"
JUMP=$(dd if=${bootdev} bs=2 count=1 2> /dev/null | od -tx1 | \
awk '{print "0x" $3$2}' | grep '48eb')
echo ${JUMP} | grep '48eb' > /dev/null 2>&1 && \
echo -e "INFO:JUMP\t${JUMP}" || \
echo "ERROR:${bootdev} MBR first jump ${JUMP}"
VERSION=$(dd if=${bootdev} bs=2 skip=31 count=1 2> /dev/null | od -tx1 | \
awk '{print "0x" $3$2}' | grep "0x[0-9a-f]")
if [ ${VERSION} == "0x0203" ];then
echo -e "INFO:GRUB \t${VERSION}"
else
echo -e "ERROR:Other bootloader version ${VERSION}"
fi
echo "#Stage2"
STAGE2LOAD=$(dd if=${bootdev} bs=2 skip=33 count=1 2> /dev/null | od -tx1 | \
awk '{print "0x" $3$2}' | grep "0x[0-9a-f]")
echo -e "INFO:load\t${STAGE2LOAD}"
STAGE2SECT=$(dd if=${bootdev} bs=2 skip=34 count=2 2> /dev/null | od -tx1 | \
awk '{print "0x" $5$4$3$3}' | grep "0x[0-9a-f]")
echo -e "INFO:Secter\t${STAGE2SECT}"
STAGE2SEG=$(dd if=${bootdev} bs=2 skip=36 count=1 2> /dev/null | od -tx1 | \
awk '{print "0x" $3$3}' | grep "0x[0-9a-f]")
echo -e "INFO:Segment\t${STAGE2SEG}"
echo ""
done