
Ubuntu日本語フォーラム

ログインしていません。
以前、アップデート後に grub が壊れて、Ubuntu が起ち上がらなくなったことがありました。
"Ubuntu Tips/その他/USBメモリを使ってハードディスク上のOSを起動するには"
<https://wiki.ubuntulinux.jp/UbuntuTips/Others/CreateBootUsbFlash>
そこで、上記のサイトを参考にして、起動ディスクを USBメモリ で作ろうと思ったのですが、
$ sed -e 's/(hd1/(hd2/g' /boot/grub/menu.lst | sed -e 's/(hd0/(hd1/g' > menu.lst
と打ったところで、/boot/grub/menu.lst がありません、というエラーが出てしまいました。
私は、Karmic Koala (9.10) を使っています。
調べてみると、Karmic Koala は、grub ではなく、grub2 を使っているためでした。
grub の menu.lst に当たるものは、grub.cfg の様ですが、上記のコマンドラインの
menu.lst を grub.cfg に置き換えるだけで、うまく行くのでしょうか?
さらにもう一つ質問しますと、(grub2 がある)今は、
Ubuntu が起ち上がらなくなってしまった場合、
この様な起動ディスクを利用する以外に、他に救済方法があるのでしょうか?
どなたかヒントをお願いします。
オフライン
USBメモリが/dev/sdb の場合で第一パーティションを使用する場合(/dev/sdb1)
*必須: ファイルシステムはExt2 or 3 or 4 でフォーマット、サイズはフォーマットできる最小で余韻じゃ無いかな。
USBメモリをPCに挿して
$ sudo mount /dev/sdb1 /mnt
$ sudo mkdir -p /mnt/boot/grub
$ sudo cp /usr/lib/grub/i386-pc/* /mnt/boot/grub
$ sudo grub-install --root-directory=/mnt /dev/sdb
$ sudo grub-mkconfig -o /mnt/boot/grub/grub.cfg
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
Ubuntu が起ち上がらなくなってしまった場合、
この様な起動ディスクを利用する以外に、他に救済方法があるのでしょうか?
原因はどうであれ、ブートローダー絡みでは起動ディスクは必須です。
起動ディスクにあるブートローダーがミソで、それはあらゆる?方法や種類でカーネルにアクセスします。
ライブCDを使用する方法も[syslinux]と言うブートシステムを利用しています。
どのブートローダーをどの様にPCに認識させてHDDのカーネルをキックするか?!
それだけです。
オフライン
hir0 さん、kiyop さん、早速のお返事有難うございました!
hir0 さんの御意見を参考にしました。
私は、USBメモリの最後の部分(2MB)を GRUB 用にパーティションしていました。
GParted で確認したところ、その部分は、sdc2 となっていたので、
以下のようにコマンドを打ったら、うまく行ったようです。
$ sudo mount /dev/sdc2 /mnt
$ sudo mkdir -p /mnt/boot/grub
$ sudo cp /usr/lib/grub/i386-pc/* /mnt/boot/grub
$ sudo grub-install --root-directory=/mnt /dev/sdc
Installation finished. No error reported.
This is the contents of the device map /mnt/boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.
(hd0) /dev/sda
(hd1) /dev/sdc
$ sudo grub-mkconfig -o /mnt/boot/grub/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.31-21-generic
Found initrd image: /boot/initrd.img-2.6.31-21-generic
Found linux image: /boot/vmlinuz-2.6.31-20-generic
Found initrd image: /boot/initrd.img-2.6.31-20-generic
Found linux image: /boot/vmlinuz-2.6.31-19-generic
Found initrd image: /boot/initrd.img-2.6.31-19-generic
Found linux image: /boot/vmlinuz-2.6.31-17-generic
Found initrd image: /boot/initrd.img-2.6.31-17-generic
Found linux image: /boot/vmlinuz-2.6.31-16-generic
Found initrd image: /boot/initrd.img-2.6.31-16-generic
Found linux image: /boot/vmlinuz-2.6.31-14-generic
Found initrd image: /boot/initrd.img-2.6.31-14-generic
Found memtest86+ image: /boot/memtest86+.bin
Found Windows Vista (loader) on /dev/sda1
Found Windows Vista (loader) on /dev/sda2
done
ところで、パソコンをもう一台持っており、そちらのパソコンのためにも
「起動ディスク」に当たるようなものを、同じ USBメモリに作りたいのですが、
その場合、この USBメモリに新たにパーティションを切って、
同様の操作をしても良いのでしょうか。
次から次へと質問して済みませんが、よろしくお願いします。
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
ところで、パソコンをもう一台持っており、そちらのパソコンのためにも
「起動ディスク」に当たるようなものを、同じ USBメモリに作りたいのですが、
その場合、この USBメモリに新たにパーティションを切って、
同様の操作をしても良いのでしょうか。
kiyopさんの#6に書いて有るように(全て理解出来ていないですが)ブートローダーは起動できるデバイス、普通はHDD、PCが対応していればUSBデバイスの先頭に一つだけ有れば良いです。
応用でパーティションの先頭にもGRUBを入れて沢山のGRUBと設定(メニュー)を呼び出すことが出来ますが、GRUBはMBRに一つで起動メニューを豊富にする方が良いかもしれません。
肝心な事を書き忘れていました、基本的にGRUB(多分他も)の起動ディスクはブートローダーが起動するのであって、起動したブートローダーがどのカーネルにアクセスするかはユーザーが手入力で行う必要があります。
・どのパーティションの
・どのディレクトリにある
・どのバージョンのカーネルと
・どの初期化ファイル(initrd)を
・どの起動オプションを付けて
起動させるか打ち込まなければいけません。
そこでメニューを作成しておくと、そこに記述されている設定を自動で読み込んでくれます。
もう一台のパソコンに合った設定を書き込めば良いのですが、OSがGRUBを使ったシステムであれば自動で生成させる事が出来ますがコマンドが変わる場合もあります。
もう一台のPCでUbuntu(コマンドの違いを考慮して)を起動させます、他のパーティションLinuxやWindowsが有っても自動で検出してくれます。
手順ですが
$ sudo grub-mkconfig -o $HOME/menu2
$ sudo chmod a+wx $HOME/menu2
USBメモリを挿して作成した2MBの領域が/dev/sdb2と仮定して書きます。
$ sudo mount /dev/sdb2 /mnt
$ sudo cp $HOME/menu2 /mnt/boot/grub/
次に使用方法です、デフォルトで最初に作成したメニューが呼ばれますので[C]キーを押してください。
プロンプトが grub> と表示されます。
grub> configfile (hd1,2)/boot/grub/menu2
これで新しいメニューが表示されますが(hd1,2)の箇所が有っているかどうか不安。
いや、違う! 書いていて気がついた。
新しいファイルを作らずとも、別のPCから起動USBのGRUBを起動させて[C]キー。
grub> configfile (hd0,1)/boot/grub/grub.cfg
(hd0,1)は仮定
これでOK。 USBのGRUBを起動してPCのメニューを読み込む。
USBのGRUBを起動してコマンドでPC内のメニューを更新させることも可。
すいません。
応用なので考え、発言ともに纏まりません、暫く休憩します:/
オフライン
、、、少し方向性が纏まりました。
緊急時のGRUB2起動ディスクを使用したシステムの起動方法[b]
例)GRUBを採用しているLinuxを起動させる。
第一HDD(/dev/sda)の第一パーティション(/dev/sda1)に/boot/grubが有るシステムの
カーネル2.6.31-18-generic を起動する。
sh:grub>root (hd0,1)
sh:grub>linux /boot/vmlinuz-2.6.31-18-generic root=/dev/sda1
sh:grub>initrd /boot/initrd.img-2.6.31-18-generic
sh:grub>boot
[b]これが基本です。
これを実行する為にカーネルのバージョンなんて暗記している人は極少数だとおもいます。
そこで登場するのがGRUBコマンドです。
メニューファイルの有るパーティションを表示する
起動目的のシステムが採用しているのがGRUB2の場合
grub>search -f /boot/grub/grub.cfg
〜 GRUB場合
grub>search -f /boot/grub/menu.lst
HDD内を全て検索して目的のファイルの有るパーティションを表示。
表示形式は hd0,1
カーネルのバージョンを調べる
grub>ls /boot
明示的にパーティションを指定する場合は
grub>ls (hd0,1)/boot
メニューを使用して入力を省略する
これまでの作業を予めテキストファイルに保存することで省略出来ます。
と書くと大袈裟ですが普通の「grub.cfg」の事です。
スレッドの現在の位置づけがここだと思うのですが、PCによって構成が違うのでメニューを使いまわす事は無理です。
PCの(HDD内の)構成が変わったときは起動ディスクを作成したPCでもメニューから起動で着なくなります。
システムのメニューを読み込む
grub>configfile (hd*,*)/boot/grub/grub.cfg
前バージョンのメニューファイル「menu.lst」は書式が違うためにGRUB2と互換性がありません。
システムのメニューファイルを表示する
grub>cat (hd*,*)/boot/grub/grub.cfg
もしくは
grub>cat (hd*,*)/boot/grub/menu.lst
結論。
今必要なのは起動ディスクの使い方とGRUBコマンド、GRUBとGRUB2での違い。
今?考えるべき事は起動ディスクでメニューリストを更新させる方法。
叶えば面倒な起動の手続きを省略出来て且つ「何も考えずに誰もが出来る」が達成できるかも。
前者は書き残しました、後は必要が有れば更に調べて見てください。
後者は暇を見つけて実行します。
追伸
URLですが < > で囲まず&前後に文字を書かずに一行にURLだけにするとリンクされます。
参考URLですが今日の夕刻読みました、フォーラムのwikiだったんですね。
気がつけばwikiに沿った回答をしたのですが少し失敗です。
あっ私が面倒くさがって確認しなかったのが悪いんで、、、#1の疑問はwikiですのでそのうち改善されるはずです。
オフライン
kiyop さん、hir0 さん、詳しいお返事有難うございました。
返事が遅れて申し訳ありません。
kiyop さん、USB メモリをもう一台のパソコンに差してみましたが、やっぱりダメでした。(笑)
それで、お教え戴いた通りにやろうと思ったのですが、
二つのパソコンで、device.map が違うので、始める前にひるんでしまいました。
hir0 さん、grub というコマンドがあるとは知りませんでした。
USB メモリの後ろにある起動ディスク用のパーティション(2MBの領域)は、/dev/sdc2 でしたので、
>
> $ sudo grub-mkconfig -o $HOME/menu2
> $ sudo chmod a+wx $HOME/menu2
>
. . . . . . . . . . . . .
> $ sudo mount /dev/sdc2 /mnt
> $ sudo cp $HOME/menu2 /mnt/boot/grub/
とすると、
sh:grub>
というプロンプトが出て、そこから#8 に書かれた作業をするという理解で良いでしょうか?
試してみたいと思います。
それから、Ubuntu のデュアル=ブートに関して、もう一つ下記のような質問しましたので、
お時間のある時に読んでいただけたら幸いです。
GRUB2 をインストールする場所について(直接MBRへ?)
https://forums.ubuntulinux.jp/viewtopic.php?pid=58985#p58985
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
すみません、その方法は途中で放置してしまいました。
別PCのメニューを直接読み込む方が、臨機応変に状況似合った対応が出きるかな?と思ったので。
続けられるのでしたら手直しして書き直します。
USBメモリのGRUBの(bootフォルダがある)パーティションを/dev/sdc2 として書きます。
目的のPCのUbuntu(Linux)を起動してUSB起動ディスクを挿します。
/mntを一度アンマウントしてリセット(/mntを使用していなければそのままでOK)
$ sudo umount /mnt
USBのブートディレクトリをマウント
$ sudo mount /dev/sdc2 /mnt
(次の操作は確答するOSのgrub.cfg をコピーして別名でUSB起動ディスクの/boot/grub/配下に保存しても可)
メニューを新規作成して別名でUSB起動ディスクの/boot/grub/配下に保存。
$ sudo grub-mkconfig -o /mnt/boot/grub/menu1
おまじない。
$ sudo chmod a+wx /mnt/boot/grub/menu1
USB起動ディスクのgrub.cfgに別PCのメニューmenu1を呼び出すエントリーを追加。
$ sudo gedit /mnt/boot/grub/grub.cfg
テキストエディタが管理者権限で開きます。日本語入力が効かなくなるので、必要であればコピペを活用して下さい。
### BEGIN /etc/grub.d/10_linux ###
から
### END /etc/grub.d/10_linux ###
までがUbuntuのエントリーが書かれている場所です。
エントリーは『メニュー文字{ から }』 までで一括りです、メニューに表示される順番は上から順番です。
menuentry "メニューに表示される文字" {
コマンド 引数
コマンド 引数
コマンド 引数
}
別PCのメニューを呼ぶエントリーは以下です。
menuentry '書斎のPC' {
configfile (hd0,2)/boot/grub/menu1
}
次の様に書き込みます、他のエントリーは例ですのでご自身の環境に合わせて下さい。
幾つでも増やせていけます。
### BEGIN /etc/grub.d/10_linux ###
menuentry '書斎のPC' {
configfile (hd0,2)/boot/grub/menu1
}
menuentry 'USB-Ubuntu, with Linux 2.6.32-22-generic' {
recordfail
insmod ext2
set root='(hd0,2)'
search --no-floppy --fs-uuid --set 7f03aa0b
linux /boot/vmlinuz-2.6.32-22-generic root=UUID=7f03aa0b ro splash quiet splash
initrd /boot/initrd.img-2.6.32-22-generic
}
menuentry 'Ubuntu, with Linux 2.6.32-22-generic (recovery mode)' {
recordfail
insmod ext2
set root='(hd0,2)'
search --no-floppy --fs-uuid --set 7f03aa0b
echo 'Loading Linux 2.6.32-22-generic ...'
linux /boot/vmlinuz-2.6.32-22-generic root=UUID=7f03aa0b ro single splash
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.32-22-generic
### END /etc/grub.d/10_linux ###
}ちなみに今回の投稿には関係ないですが、
grub>
はGRUBのメニューが表示されているときに[C]キーを押すと現れます。
オフライン
お返事が送れがちになって済みません。
基本的な質問をさせてください。
kiyop さん による投稿:
どんな風にdevice.mapが異なりますか?
USB メモリで起動ドライブを作った方のノートパソコンの device.map はこうです。
(hd0) /dev/sda
ところが、別のデスクトップの方の /boot/grub/ に device.map が見当たりません。
(デスクトップの方は、HDD を2台入れていて、
/dev/sda に Windows、/dev/sdb に Ubuntu が入っています。
GRUB2 は、/dev/sda に入っています。)
どこを見れば良いのでしょうか?
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
kiyop さん、
結局、私のデスクトップパソコンは、
そのままでは、USB メモリから起動できないということが分かりましたから、
#3 が良さそうですね。
hir0 さん、後学のためにもう少し、教えてください。
(私のデスクトップパソコンが USB メモリから起動できると仮定しての話になります。)
#7 の途中で止めて、#12 で解説して戴いた 方法1 は理解できたと思います。
何回も読み直して理解するように努めているのですが、#8 の 方法2 が理解できません。
もう一度、流れを書きます・・・
「ノートパソコン[パソコン1とする]の起動ディスクの入っている USB メモリを、
これとは別の(デスクトップ)パソコン[パソコン2とする]に差して、
USB メモリ内に入っている GRUB2 でパソコン2を起動している」
のですね?
hir0 さん による投稿:
1行目 sh:grub>root (hd0,1)
2行目 sh:grub>linux /boot/vmlinuz-2.6.31-18-generic root=/dev/sda1
3行目 sh:grub>initrd /boot/initrd.img-2.6.31-18-generic
4行目 sh:grub>boot
これが基本です。
上記の作業は、USB メモリ内の GRUB2 を使って、
パソコン2内のカーネルを root に呼び起こしているのでしょうか?
(次は、もう一つの細かい質問です。
1行目は、一旦、root を、(一般的な呼称である)パーティション名 hd0,1 に指定して、
そのパーティションを2行目で、Ubuntu の呼称である sda1 に置き換えているという意味ですか?)
そして、その後、hir0 さんの結論の部分の
hir0 さん による投稿:
システムのメニューを読み込む
grub>configfile (hd*,*)/boot/grub/grub.cfg
で、USB メモリ内の GRUB2 で、パソコン2内のメニューを読み込んでいる
ーー こう理解して良いでしょうか?
まだ私がパソコンをよく分かっていないこともあり、
何度も質問して済みませんが、もう少し詳しく教えてください。
オフライン
haruo22さん による投稿:
hir0 さん による投稿:
1行目 sh:grub>root (hd0,1)
2行目 sh:grub>linux /boot/vmlinuz-2.6.31-18-generic root=/dev/sda1
3行目 sh:grub>initrd /boot/initrd.img-2.6.31-18-generic
4行目 sh:grub>boot
これが基本です。上記の作業は、USB メモリ内の GRUB2 を使って、
パソコン2内のカーネルを root に呼び起こしているのでしょうか?
起動時にGRUBシェルに渡すコマンドで、GRUB2 全てに当てはまるコマンドです。
通常はメニューリストに書き込まれていますが、今回は起動ディスクと言うことで手入力が基本と考えました。:
起動ディスクは(古い概念ではフロッピーディスクに収まり)ブートローダーが対応するファイルシステムとカーネルに対してどの様な構成の'HDD''OS'でも起動できなければ行けません。
ですので起動ディスクの目的にあったマルチな方法をメニューリストに求めるのは「ヤメた」と言うのが#8です。
[root] これは旧GRUBでGRUB2では [set]のようです。スミマセン。
root (hd0,1) -> set root=(hd0,1)
GRUBのカレントデバイスを指定する。
/boot/grub のある場所です。 最初に指定します。
[linux]
起動するカーネルのディレクトリと名称とデバイスファイル名を指定します。:
旧GRUBの[kernel]コマンドと同じです。 [ro][quiet][splash]等の起動オプションもこの行に書き加えます。
root=/デバイスファイル名をUUIDに変更することも出来ます。 root=UUID=”IDナンバー”
[initrd]
初期化ファイル「initrd」を読み込みます。
これは旧GRUBと同じですね。
[boot]
起動です。GRUBシェルに必要な情報を与えたら起動させます。
grub> help
コマンドの一覧が現れます。
(次は、もう一つの細かい質問です。
1行目は、一旦、root を、(一般的な呼称である)パーティション名 hd0,1 に指定して、
そのパーティションを2行目で、Ubuntu の呼称である sda1 に置き換えているという意味ですか?)
はい、そうです。
その辺は、「GRUBコマンドはその様な順序と指定方法を使う物」として受け止めているので「何故?」については解りません。
haruo22さん による投稿:
hir0 さん による投稿:
システムのメニューを読み込む
grub>configfile (hd*,*)/boot/grub/grub.cfgで、 USB メモリ内の GRUB2 で、パソコン2内のメニューを読み込んでいる
ーー こう理解して良いでしょうか?
まだ私がパソコンをよく分かっていないこともあり、
何度も質問して済みませんが、もう少し詳しく教えてください。
はい、そうです。
起動ディスクを用いて問題のPCでGRUBを起動させる。
基本的にはGRUBコマンドを用いてPC内部のカーネルやboot,grub等のディレクトリやファイルを探す。
そして起動させる、
応用としてGRUB2を使用しているシステムであれば、システムないのメニューを使用するのが楽かな?の方法です。
もちろんメニューの記述に問題が有ればダメですけど。
最後の#12は、PCが決まっているのなら前もって確答する複数のメニューをUSB起動ディスクに入れておこう、と言う案です。
結局、私のデスクトップパソコンは、
そのままでは、USB メモリから起動できないということが分かりましたから、
#3 が良さそうですね。
#3を試されるのも良いですが、情報としては「grub4dos」だけで大丈夫です。
GRUBをUSBメモリに入れて起動ディスクにするのとHDD(Windows)に入れて起動させるのと何ら変わりは有りません。
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
いや〜、、、 GRUB2、、、。
落ち着くまでは、又そのうち仕様が変わりますよ、コロコロと。
そのうちkexなんちゃらと、kiyopさんが書かれたなんちゃらスクリプトの素晴らしい利点がGRUBに取って代われると現存するトラブルがかなり減りますね。
そのkiyopさん激推のなんちゃらは設定せずとも勝手にパーティションにあるカーネルを広い出して起動させることが出きるのでしょうか?
もしそうなら、なんちゃらツールを私も検証&お勧めしたいのですが、Wikiからは「なんちゃらとは何ぞや」が読めないので保留中です。
オフライン
hir0 さん、kiyop さん、詳しくご説明いただいてありがとうございました。
この度は、自分で立てた別のトピック GRUB2 をインストールする場所について(直接MBRへ?) と合わせて、
grub2 について、皆様から色々と教えて頂きました。
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
hir0さん による投稿:
[root] これは旧GRUBでGRUB2では [set]のようです。スミマセン。
root (hd0,1) -> set root=(hd0,1)
GRUBのカレントデバイスを指定する。
/boot/grub のある場所です。 最初に指定します。
(誤)場所
(正)デバイス
hir0さん による投稿:
起動するカーネルのディレクトリと名称とデバイスファイル名を指定します。
何のデバイスファイルか分かりませんね。
前出のrootの値を起点としたvmlinuz...へのpathと起動するルートファイルシステムが有るデバイスを指定します。
hir0さん による投稿:
初期化ファイル「initrd」を読み込みます。
(誤)初期化
(正)起動の途中に一時的に/として使用されるファイルで
(誤)読み込みます
(正)前出のrootの値を起点としたinitrd...へのpathを指定します。
initrd...を読み込むのはvmlinuz...です。
hir0さん による投稿:
(次は、もう一つの細かい質問です。
1行目は、一旦、root を、(一般的な呼称である)パーティション名 hd0,1 に指定して、
そのパーティションを2行目で、Ubuntu の呼称である sda1 に置き換えているという意味ですか?)はい、そうです。
違いますよ。
1行目のrootはGrub利用する値、2行目のrootはカーネルが利用する値です。
bootが/と別パーティションの場合を考えて下さい。
と、私は思うのですが如何がでしょうか? -->hir0さん
オフライン