aio boot(その10:ubuntuによるcloverの破壊を防止)

aio bootを使っているマシンでubuntuのupdateを行うと、kernelが更新されたりする毎にefiパーティションの更新を行い、その結果cloverが起動しなくなってしまいます。
以前は、USB memoryからaio bootしてclover legacyを再インストールすれば回復していたのですが、先日、aio bootのバージョンアップを行ったら、これをやってもMBRを回復しなくなってしまったので、ubuntuをshutdown/rebootする際にefi partitionのMBRをチェックして書き換えられていたら戻すようにしてみました。
手順は以下の通り。

(1) dd if=/dev/sda1 of=/aio-boot/sda1 bs=512 count=1でefiパーティション(sda1)のMBRの先頭512Bを予め退避しておく。
(2) aio-boot-checkというshell scriptを作り、手動でもefi partitionのMBRをcheck/restoreできるようにした。aio-boot-checkの内容は以下の通り。
#!/bin/bash
if [ "`parted -l /dev/sda | sed -En 's/^\s*1\s+.*\sfat32\s+EFI system partition\s+boot, esp.*/efi/p'`" != "efi" ]; then
  echo /dev/sda1 is not efi
  exit 255
fi
dd if=/dev/sda1 of=/tmp/sda1 bs=512 count=1 2>/dev/null
cmp -s /aio-boot/sda1 /tmp/sda1
if [ $? -eq 0 ]; then
  echo aio-boot-check OK
elif [ "$1" = "correct" ]; then
  dd if=/aio-boot/sda1 of=/dev/sda1 2>/dev/null
  echo aio-boot corrected.
  $0
elif [ -z $1 ]; then
  echo aio-boot-check NG
else
  echo Usage: $0 [correct]
fi

(3) /etc/init.d/に以下のaio-bootを作成
#!/bin/sh

lock_file="/var/lock/subsys/aio-boot"

start()
{
    touch ${lock_file}
}

stop()
{
    rm -r ${lock_file}
    /root/bin/aio-boot-check correct
}

case "$1" in
  start)
    start
  ;;
  stop)
    stop
  ;;
  *)
    echo "Usage: $0 {start|stop}"
  ;;
esac

exit 0
(4) /etc/rc?.d/から/etc/init.d/aio-bootへsymbolic linkを作成
cd /etc/rc0.d && ln -s ../init.d/aio-boot K00aio-boot
cd /etc/rc6.d && ln -s ../init.d/aio-boot K00aio-boot
cd /etc/rc1.d && ln -s ../init.d/aio-boot S01aio-boot
cd /etc/rc2.d && ln -s ../init.d/aio-boot S01aio-boot
cd /etc/rc3.d && ln -s ../init.d/aio-boot S01aio-boot
cd /etc/rc4.d && ln -s ../init.d/aio-boot S01aio-boot
cd /etc/rc5.d && ln -s ../init.d/aio-boot S01aio-boot
cd /etc/rcS.d && ln -s ../init.d/aio-boot S01aio-boot

その9へ戻る その11へ続く