お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2010-09-12 14:31:13

einundzwanzighundertsechs
メンバ
登録日: 2008-12-28

install-mbr の代わりに lilo を使いませんか?

grub を誤って内蔵ディスクの MBR にインストールしてしまった場合の復旧案の一つとして,
本フォーラムでは install-mbr コマンドを奨めるのが主となっていますが,
ご存知のように install-mbr は disk signature(NTシグネチャ,ディスク署名)を潰してしまう問題が有り,
Vista 以降では使えません.と言うより,今や XP でしか効かないと表現した方が適切でしょう.

質問者の問題解決後,質問者以外で投稿を参照した人が誤って install-mbr を使ってしまうような,さらなるトラブルを防ぐためにも,
これまで install-mbr を指示していた場面では,今後は disk signature を潰さない lilo を奨めるようにしませんか.

lilo は歴史有る linux のブートローダ(のインストーラ)ですが,
アクティブな PBR にリレーするだけの単純なブートコードを MBR にインストールするオプションを持っています.

-M master-device [mbr|ext]
              Install a Master Boot Record on the device specified as  master-
              device,  selecting  the  Standard or Extended Master Boot Loader
              per the option.  The primary partition table on master-device is
              undisturbed.   If no valid Volume-ID (serial number) is present,
              then generate one and write it to the MBR.  If mbr is specified,
              the  Standard  Master Boot Loader will search partitions 1-4 for
              an active flag, and boot the flagged partition.
  Only one active
              flag  is allowed.  If ext is specified, the search for an active
              partition will include extended partitions as well.   The  pres‐
              ence  of  the  Extended  Master  Boot  Loader on the Master Boot
              Record (MBR = sector 0) of a disk affects the operation  of  the
              -A option.

lilo は標準の Ubuntu レポジトリに登録されています.
したがって,コマンドシークエンスは

コード:

sudo apt-get install lilo
sudo lilo -M /dev/sda mbr

となります.
次のエラーメッセージが出るそうですが,カーネルローダとして使うわけでは無いので無視して下さい. // この説明をしなきゃならないのは面倒ですね.

LILO のインストールは初めてのようです。このプロセスが終了したら、
liloconfig(8) を実行し、それから /sbin/lilo を実行することが、絶対に必要です。

原文:

It seems to be your first LILO installation. It is absolutely necessary to
run liloconfig(8) when you complete this process and execute /sbin/lilo
after this.

また,lilo は上書きする前の MBR を自動的にバックアップし,

When lilo writes a new boot sector, it preserves the former con‐
              tents of the sector in a file, named by default /boot/boot.NNNN,
              where NNNN is the hexadecimal representation of  the  major  and
              minor  device numbers of the drive/partition.

-i オプションでバックアップを書き戻すことも出来ます.

-i boot-loader
              Specify a file to be used as the new boot loader.  (The  default
              is /boot/boot.b.)

本フォーラムで 2009-02-28(実は install-mbr を紹介した2日後)に lilo の機能を紹介したときは,
本家フォーラムでも2件程の事例しかなく,強く推挙することは出来ませんでした.
現在では,本家フォーラムを検索すると,実績が蓄積されているのがわかります.
「mbr.bin は問題があるので lilo を使う方が良い.Windows では bootrec /fixmbr を使おう」
Ubuntu Forums - View Single Post - [SOLVED] How do you remove Grub

lilo のメンテナを Debian Project が引き継いだのか,開発が再開されています.
http://alioth.debian.org/projects/lilo/

オフライン

 

#2 2010-09-13 00:30:42

einundzwanzighundertsechs
メンバ
登録日: 2008-12-28

Re: install-mbr の代わりに lilo を使いませんか?

最初に訂正です.バックアップの書き戻しには -U オプションを使います.

-u [device-name]
              Uninstall  lilo by copying the saved boot sector back.  The '-s'
              and '-C' switches may be used with this option.  The device-name
              is optional.  A time-stamp is checked.

-U [device-name]
              Idem, but do not check the time-stamp.

USB メモリ = /dev/sdb を対象に実験しました.
環境上 Vista での boot は確認出来ていませんが signature が変化しないのと,MBR->PBR へリレーするのは確認しました.
諸事情で幾つかの手順の詳細は伏せてあります.

USB メモリの MBR に grub-legacy をインストールしておきました.

コード:

$ sudo file -s /dev/sdb
/dev/sdb: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3, stage2 address 0x2000, stage2 segment 0x200, GRUB version 0.94; partition 1: ID=0xc, starthead 1, startsector 61, 1981219 sectors, code offset 0x48

また,この時点での disk signature は 65 73 0d 00 でした.

lilo の mbr をインストールします.バックアップは /boot/boot.0810 となりました.

コード:

$ sudo lilo -M /dev/sdb mbr
Backup copy of /dev/sdb in /boot/boot.0810
The Master Boot Record of  /dev/sdb  has been updated.

ファイル情報は以下の通りです.signature も 65 73 0d 00 と変わっていませんでした.

コード:

$ sudo file -s /dev/sdb
/dev/sdb: x86 boot sector, LInux i386 boot LOader; partition 1: ID=0xc, starthead 1, startsector 61, 1981219 sectors, code offset 0xeb
$ sudo file -s /boot/boot.0810
/boot/boot.0810: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3, stage2 address 0x2000, stage2 segment 0x200, GRUB version 0.94; partition 1: ID=0xc, starthead 1, startsector 61, 1981219 sectors, code offset 0x48

起動実験は /dev/sdb1 にブートフラグを立て,
PBR に埋め込まれたエラーメッセージ "This is not a bootable disk." をバイナリエディタで "This is NOT a bootable disk." に変更し,
USB からの起動で,それが表示されるかを確認しました.

最後に,バックアップの書き戻しと,

コード:

$ sudo lilo -U /dev/sdb -C /dev/null
Warning: LBA32 addressing assumed
... 途中略 ...
Warning: /dev/sdb is not on the first disk

確認です.

コード:

$ sudo file -s /dev/sdb
/dev/sdb: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3, stage2 address 0x2000, stage2 segment 0x200, GRUB version 0.94; partition 1: ID=0xc, active, starthead 1, startsector 61, 1981219 sectors, code offset 0x48

オフライン

 

#3 2010-09-13 04:31:55

einundzwanzighundertsechs
メンバ
登録日: 2008-12-28

Re: install-mbr の代わりに lilo を使いませんか?

-- タイトルの命名に巫山戯すぎたと反省いたしまして,「管理者に報告」にて変更をお願いしています.気分を害された方,申し訳有りません.

lilo を grub の代わりの Linux カーネルローダとして使いましょうとか,起動トラブルの第一のオプションとして推しているわけでは有りません.

具体的な例で,内蔵ディスク /dev/sda に間違って grub をインストールし,内蔵ディスクだけでは Windows が起動できなくなった状況を想定します.

まず,「データのバックアップを取る」が第一であるのは言わずもがなとして…

次の目標は,「MBR には一切手をつけずに,つまりパーティションテーブルにもシグネチャにも触わることなく Windows の回復ツールを起動する」ことだと考えています.
もちろん,その方法が状況によって異なり,相談者との綿密な情報交換が必要で,苦労のかかる一筋縄では行かない工程だと,過去の例からも認識しています.
// 個人的に,この段階では lilo にも install-mbr にも言及する必要すら無いとも思っています. -- 「こういう方法もあるから安心してください」の意味なら分かりますが…

それがうまく行かない場合に初めて,PBR にリレーするブートコードを MBR に一時的に入れて Windows を起動させ,
何とか回復ツールまで持っていき正統な MBR を回復する方法を考えれば良いと思うのです.

Ubuntu で使えるツールとしては,他にも MBM や ms-sys の名前を目にした事がありますが,現在のこれらはレポジトリには有りません.
レポジトリに有るツールでこの問題に対処できるものを探したところ install-mbr と lilo の -M オプションが見つかったわけです.
// 私の探し方が悪いだけで,他にもっと簡単で有効なものがあるのかもしれません.

そして,これら2つを比較した場合,install-mbr にはシグネチャを潰してしまう欠点が有り,lilo -M にはそれが無い.
ディスクのシグネチャを利用するアプリケーションがそもそも存在しないのか,XP の起動を install-mbr で復旧して,その後問題が起こった例を聞いたことは有りませんが,
Windows のツールでMBR をインストールし直したとしても,シグネチャが当初のものとは異なってしまっていることは事実なのです.
この段階での比較で,install-mbr よりも lilo -M を奨めた方が良いと私は考えるのです.

さらに lilo -M には,install-mbr には無い,MBR に書き込む前際に自動的にバックアップを作ってくれる機能があります.
これは,/dev/sda と間違えて /dev/sdb に lilo のブートコードをインストールしてしまっても,lilo -U で元に戻せるチャンスが有ることを意味します.
// Live CD を使っている場合は再起動の前にコピーをしておく必要が有ります.
この点も install-mbr より lilo -M が適していると考える理由です.

オフライン

 

#4 2010-09-13 08:50:10

kiyop
拒否
From: http://kiyoandkei.bbs.fc2.com/
登録日: 2010-01-23

Re: install-mbr の代わりに lilo を使いませんか?

※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。

オフライン

 

#5 2010-09-13 14:24:55

hir0
メンバ
登録日: 2008-09-28

Re: install-mbr の代わりに lilo を使いませんか?

昼食を取りつつLiloを試してみました。
デュアルブート失敗時は lilo -M ではXPは起動するが、Ubuntuが起動しなくなり再インストールか一手間の遣り取りと作業が発生すると思います。

折角LiloをインストールするのですからXPの機動を回復すると同時にUbuntuの起動エントリーも登録すれば「XPの起動」と「Ubuntuとのデュアルブート」が一挙両立できるのではないでしょうか。
$ sudo lilo
とコマンドを打ち込む前に/etc/liloconf を作成。
以下サンプル(私の環境)
$ sudo gedit /etc/lilo.conf

#config
boot=/dev/sda
prompt
timeout=70
lba32
#bitmap=/boot/sarge.bmp
#bmp-colors

menu-title="Ubuntu 10.04 2.6.32-24-generic"
image=/boot/vmlinuz-2.6.32-24-generic
    label=10.04-32-24
    initrd=/boot/initrd.img-2.6.32-24-generic
    root=/dev/sda2
    read-only
   
other=/dev/sda1
    label=XP
    boot-as=0x80

これで失敗したデュアルブートは正常に機能するので、後は起動したシステムから個人の好みの物を選択すれば良さそう。
この辺はliloが勝っている(何かに対しての優劣でなない)、便利であるとは感じます。

後は、liloがVista以降の機動に対応していない場合やGRUBと同等の「失敗」を起こす場合、このコマンドを必要とするユーザーが訳も分からずに sudo lilo -M でWindowsの機動に失敗したら願うだけです。
自動で残されるバックアップファイルを失くさ無いこと。
無造作にUbuntuを再インストールしてみたり削除しないこと。
他の復旧作業を行ない意図せずとも致命傷を負わないこと。
何もせずにフォーラムや然るべき所で相談すること。(それが出来ればネットの情報を元に復旧を試したりしないか)

Lilo、、、XPの起動にはスマートさを感じますね。

オフライン

 

#6 2010-09-14 01:05:02

einundzwanzighundertsechs
メンバ
登録日: 2008-12-28

Re: install-mbr の代わりに lilo を使いませんか?

lilo -M でインストールされるブートコードと -M なし lilo でのそれは別物です.

-M なし lilo の ブートローダーは,MBR や PBR に置く第1ステージと,/boot 以下に配置する第2ステージからなります.
第1ステージ→第2ステージ→カーネル(または他のローダー)の,謂わば grub 型です.

動作の詳細は,殆どが記憶の遙か彼方にあり,単なる昔話になるので止めます.
ただ,経験から lilo の「自動バックアップ」は「保険」というよりは,むしろ「命綱」だったと言えます.
// 無茶はしなかったので使わずに済みましたが… 私個人は,修行僧でもマゾヒストでもないので,今更 lilo に戻る気は起きません.

lilo -M でインストールされるブートローダーは,アクティブな PBR にバトンタッチするだけの謂わば標準型 MBR ブートコードです.
その後の動作はご存知のごとく PBR のブートコード次第です.単独でカーネルをロードする力は有りません.
lilo 本来の役割からみれば,lilo -M の機能も「命綱の一本」と言えるでしょう.

その「命綱」が,他のブートローダの引き起こすトラブルのレスキューに役立つのだから,ソフトウェアの人生も色々です.
// その感慨と「開発の再開」をかけての「おかえり」であり,その連想から「さようなら」と受けたのですが,まずかったですね.

ソース同梱の README.volumeID (注:Volume ID = シグネチャ) を読めば,
「XP がブート時にシグネチャを利用するだろう」の予想の元で,
関連のコードを綿密に設計しつつ lilo が開発されていたことが解ります.
一部抜粋:

CAUTION:  NEVER CHANGE THE VOLUME ID OF A WINDOWS 2000 BOOT DISK.

Windows NT, 2000, and XP (presumably), all use the Volume ID during the boot
process.  Changing the ID can render Windows unbootable.  Recovery seems to
be possible by zeroing the Volume ID, although Windows would prefer that the
Boot Volume ID remain unchanged.  No trouble has been encountered with
changing the Volume ID of Windows 2000 data disks, other than the necessity
of resetting the drive letter to its former value.  Basically, if you run
Windows NT or later, your disks probably already have Volume ID's assigned
by Windows.  If they do, leave them alone.  The Windows ID's are completely
compatible with the LILO scheme, and vice versa.

その予想は正確にいうと外れました.

オフライン

 

#7 2010-09-14 02:23:55

hir0
メンバ
登録日: 2008-09-28

Re: install-mbr の代わりに lilo を使いませんか?

ありがとうございます、かなり理解が進みました。
>linux のブートローダ(のインストーラ)

lilo -M として書き込まれるものは確かにinstall-mbrと同等の結果をもたらし、それ以上の良い成果を残します。




神経質なlilo.confに触れるなら、 lilo -M mbr   とし、必用であれば grub-install -f <pbr>としてパーティションをアクティブに。
### BEGIN /etc/grub.d/40_custom ###
menuentry "Microsoft Windows XP Home Edition (on /dev/sda1)" {
    insmod ntfs
    set root='(hd0,1)'
    makeactive
    chainloader +1
}
### END /etc/grub.d/40_custom ###

これでデュアルブート完成するんじゃないのかな。
眠いので未確認。
確認が取れれば、この方法は今までで一番好きです。

アクティブパーティションにチェインロードするだけですが、シンプルな構造なだけに他のブートローダーやチェインローダーに見られる「主張」独自のビジュアルを見せずに、その存在さえも感じさせ無い。

オフライン

 

#8 2010-09-15 02:23:25

hir0
メンバ
登録日: 2008-09-28

Re: install-mbr の代わりに lilo を使いませんか?

検証結果です、と言うほどは色々と試していません。
GRUB2の場合です。以前のGRUBではオプションの「-f」は必要有りません。


・一台のHDDに(/dev/sda1)Windows XP と (/dev/sda2)Ubuntu が入っていてMBRが壊れた、もしくはGRUBから起動できない。

$ sudo apt-get update
$ sudo apt-get-install lilo
$ sudo lilo -M /dev/sda mbr
$ sudo grub-install -f /dev/sda2
$ sudo update-grub

$ sudo parted
(parted) set
パーティション番号? 2   
反転するフラグ?  boot/hidden/raid/lvm/lba/palo/prep? boot
新しい状態?  [on]/off? on
(parted) print
(parted) q

$ sudo parted での操作が分からない場合は「gparted」を使用してください。
Ubuntuのパーティションを選択して右クリック、「フラグを編集」から「boot」のチェックを付けて閉じてください。
(fdiskはフラグが複数立つ状態を自動で回避できませんので注意して下さい)


・(/dev/sdb1)USBデバイスにUbuntuをインストールした際に(/dev/sda)HDDのMBRにGRUBを書き込み(/dev/sdb)USBデバイスを挿さないと起動できない。
USBデバイスから起動したUbuntuからは/dev/sda と /dev/sdb が入れ替わっているので
$ sudo fdisuk -l
で確認して、環境に合わせて変更して下さい。
以下の/dev/sdb は内蔵HDDを、USBデバイスは/dev/sdaで表しています。

$ sudo apt-get update
$ sudo apt-get-install lilo
$ sudo lilo -M /dev/sdb mbr
$ sudo grub-install /dev/sda
$ sudo update-grub

Vista Win7 については未検証。
lilo -M で書き込まれたMBRはブートフラグ(0x80)の起っているパーティションにチェインロードする仕組みの様なのでUbuntuはパーティション(PBR)にGRUBをインストールする必要が有ります。
MBRから起動選択画面は表示されずbootフラグの起っているパーティションのPBRに書き込まれているブートローダーを呼び出しますので最初に起動するOS(ブートローダー)はbootフラグの編集で行い、万が一フラグを見失い起動できない時はライブCDの「GPparted」から修復可能です。

複数のbootフラグが検出された場合は起動しなくなるので「バイナリエディタ」「fdisk」を使用するときは注意が必要です。

オフライン

 

#9 2010-09-18 21:00:47

zagan
メンバ
登録日: 2008-08-12

Re: install-mbr の代わりに lilo を使いませんか?

デュアルブート環境を実際には持たないので、あまり勉強してこなかったのですが、こりゃいかんと情報収集に当たってて、以下のサイトを見つけました。

Boo Problems Open Source Tool s

お役に立ちませんでしょうか?

オフライン

 

#10 2010-09-18 23:50:39

hir0
メンバ
登録日: 2008-09-28

Re: install-mbr の代わりに lilo を使いませんか?

う~ん。
結果が出ればOKとは違って、今後のWindowsの動向としてLinuxのツールを使用しても証明書残る方法、残る可能性が有る方法。
以上を条件にデフォルトの状態で(updateは有り)apt-getで解決できる方法。

「デフォルトのUbuntuで完結するツール」がポイントっぽいトピ。

オフライン

 

Board footer

Powered by FluxBB