どのパーティションからブートしたかを知るにはどうすればよいですか?


12

マルチブートパーティションを持つマシンがあります。1つのパーティションにUbuntu 14.04、2番目のパーティションにUbuntu 15.04、3番目のパーティションにUbuntu 16.04があります。/boot/grub/grub.cfgブートプロセスに使用されたパーティションを見つけるために、コマンドラインから、どのパーティションからブートしたかを知る方法はありますか?私が持っている/boot/grub/grub.cfg 3つのパーティションのそれぞれに。


3
絶対的な一般性と信頼性を備えてそれを行うことはできません。ご存知のとおり、/boot/grub/grub.cfgブートに使用されたファイルは削除され、そのパーティションはパーティションテーブルから削除され、そのディスクはシステムから物理的に削除された可能性があります。
フェデリコポロニ

回答:


10

GRUBがカーネルの起動を引き継ぐと、カーネルは何を開始した/bootか分からなくなり、GRUBが使用したカーネルとは異なる場合があります。boot/grub/grub.cfg各パーティションのアクセス時間をチェックして、最近アクセスされたパーティションを確認できます。これにより、GRUBが使用したパーティションの構成ファイルがわかります。

stat -c %x /boot/grub/grub.cfg

アクセス時間が更新されない場合は、さまざまなGRUB構成ファイルで使用されるカーネルパラメーターの違いを探す必要があります。あなたがそれらを変更することができた場合は、例えば、追加foo=1foo=2になど、GRUB_CMDLINE_LINUXこれらのランのそれぞれでsudo update-grub2、リブート、あなたは確認することができます/proc/cmdline使用されたこれらの値のかを確認します。


面白い!それは私のソリューションもRavexinaやKatuよりも優れた精度を持っているということですか?
タツ

@tatsu IMO他のすべての答えが間違っている- Ravexinaは、パーティション位置されて/boot配置されているが、それは使用GRUB何ではないかもしれない、とあなたとKatuは、パーティションがマウント見つけている/Ravexinaが述べたように、おそらく持っていること、ですがマウントされますが、さらに少ない接続
-muru

1
はい、しかしどのようにマウント解除すると、マウントされているパーティションで失敗する以外のことを行うことができますか?私のソリューションがisいことを認めたのは私が最初ですが、100%の成功率はありましたか?
タツ

1
何のための@tatsu成功率?にマウントされているパーティションを見つけ/ます。ブート中に使用されたパーティションのGRUB構成を見つけますか?私はそれがどのように関係しているかわかりません。
ムル

4
それが独自のDOSであり、Linuxファイルシステムドライバーの規則に拘束されていない場合、grubは実際にそのアクセスタイムスタンプを設定しますか?
rackandboneman

4

知っているように、探しているファイルは/boot実行中のシステムのディレクトリにあります。/boot別のパーティションであるか、そうでないかのどちらかです。あなた/bootが別のパーティションである場合、それを探す必要があります:

$ lsblk -r | grep '/boot'
sda2 8:1 0 400M 0 part /boot

grub.cfg使用されているがにあることを意味しsda2ます。

さもなければあなたは探すべきですroot

$ lsblk -r | grep '/$'
sda1 8:1 0 121.2G 0 part /

今回はにありsda1ます。

または、楽しみのために、ブート時のパラメーターを確認できます。

$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-3.16.0-4-686-pae root=UUID=938495-1fe2-3302 ro quiet

次に、UUIDどのパーティションがルートであるかを見つけます。

$ sudo blkid | grep 938495-1fe2-3302
/dev/sda1: UUID="938495-1fe2-3302"

からという意味ですsda1

これらのブートパラメータをチェックして、どのgrub.cfgファイルに含まれているかを確認することもできます。これは、ブートパラメータgrub.cfgが互いに異なる場合にのみ機能します。


2
ファイルシステムUUIDの背後にあるデバイスノードを見つける簡単な方法(スーパーユーザー特権を必要としない)はになりますreadlink -f /dev/disk/by-uuid/<UUID>
デビッドフォースター

3

現在マウントされているルートファイルシステムを保持しているデバイスを表示するには:

awk '$2=="/"{print $1}' /proc/mounts

現在実行中のUbuntuリリースバージョンを表示するには:

lsb_release -rs

それは実際に質問に関して多くの意味を持ち、まだ最も適切な答えのように思えます。彼のセットアップの2つのディストリビューションに、lsb_release -rs常に使用するバージョン番号が同じであるとは思わない。キッス
タツ

残念ながら、これは機能しません。私のマシンで複数のOSを使用してコマンドをテストしました。「マスター」-OSのみがMBRにgrubをインストールし、他のOSはPBRにGrubをインストールしました。どのOS Grubがconfig-fileをロードするかを表示
mook765

@ mook765:私の答えは、GrubやMBR(またはブートローダーやパーティションテーブルの種類)とはまったく関係ありません。正確に何を試みたのか、何を期待したのかはわかりません。
デビッドフォースター

この答えは質問とは関係ありません
...-mook765

@ mook765:文字通りそれを取るなら、はい。しかし、私には、OPは彼の複数のUbuntuインストールのどれが現在起動されているかを知りたがっているように見えます。
デビッドフォースター

2

各OSに簡単なカスタムメニューエントリを追加することができ、OS Grubが構成ファイルをロードしたGrubメニューに表示されます。

例:

16.04を起動し、ファイル/etc/grub.d/40_customを編集してメニューエントリを追加します。

#!/ bin / sh
exec tail -n +3 $ 0
#このファイルは、カスタムメニューエントリを追加する簡単な方法を提供します。単に入力する
#このコメントの後に追加するメニューエントリ。変更しないように注意してください
#上記の「exec tail」行。
#

menuentry 'grub.confが16.04からロードされました' {        
            リブート  
    }

ファイルが実行可能であることを確認して実行しますsudo update-grub

その後、我々は我々が変更IG、他のOSの中に同じ変更は、私たちは、menuentryに別の名前を使用して行う16.0415.04とそうで。

ブート中にGrubメニューでこのメニュー項目を選択すると、マシンはリブートするだけで、OSをブートするのではなく、実際にロードに使用されるOSを確認するために作成しましたgrub.conf

追加情報

この種の混乱は、すべてGrubを使用する複数のOSをインストールするときに発生し、OSのインストール時に同じブートローダーの場所を選択します。実際、GrubをインストールするOSは1つだけで、GrubはどのLinuxディストリビューションでも起動できるので、1つのディストリビューション(Grubを含む)がインストールされている場合、Grubをインストールせずに追加のOSをインストールできます。

レガシーインストールでは、パーティションブートレコードを場所として選択できるため、ブートローダーインストールの場所を処理するのは非常に簡単ですが、正しいパーティションを選択するように注意する必要があります。そのため、1つのOSがブートローダーをMBRにインストールし、追加のOSがブートローダーをOSパーティションのPBRにインストールします。この可能性は、Something elseインストール時に-option を使用した場合にのみ発生します。

UEFIインストールでは、少し奇妙です。ブートローダーはEFIシステムパーティション(ESP)のフォルダーにインストールされ、複数のブートローダーを簡単に共存させることができます。ここでの問題は、すべてのUbuntuフレーバーと他のlinuxディストリビューションがESPの同じフォルダーにGrubをインストールすることであり、選択の余地がないことです。したがって、追加のLinuxディストリビューションをインストールすると、既存のブートローダーが上書きされます。これを回避する唯一の方法は、ライブセッションで起動し、でインストーラを起動することsudo ubiquity -bです。

別の簡単な解決策

パーティションsda1に3つのLinuxディストリビューションがインストールされているsda2としsda3ます。次に、Grubのブートメニューエントリを見てみましょう。起動中に、次のようなものが表示されます。

1 Ubuntu
2 Ubuntuの詳細オプション
3メモリテスト(memtest86 +)
4メモリテスト(memtest86 +、シリアルコンソール115200)
5 Ubuntu(/ dev / sda2)
6 Ubuntuの詳細オプション(/ dev / sda2上)
7 Ubuntu 17.04(/ dev / sda3上)
8 Ubuntuの詳細オプション(/ dev / sda3上)

最初の2つのエントリは、grub.conf実際に使用する-fileを生成したOSのエントリです。エントリ#3と#4は現時点では興味深いものではありません。エントリ#5、#6、#7、および#8はOSプローブで生成されたエントリであり、これらのエントリのOSがどのパーティションに存在するかがわかります。だから、この小さな例の場合には、我々は、と結論付けることができgrub.config-file私たちは、実際に使用が上のOSに属していないsda2か、sda3しかし上のOSにsda1。1つ以上のOSが個別の/boot-partitionでインストールされている場合、どの/boot-partitionがどのOSに属しているかを確認する必要がありますがfindmnt、各OSで-commandを実行することで簡単に行えます。


+1長いにもかかわらず、この回答には実際に関連するポイントが含まれています。BIOSシステムの場合、マルチブートを行うユーザーは、インストーラーで「その他」を選択して、より詳細に制御する必要があります。「GRUBブートローダーをインストールしない」ことを強制する必要はありません(以前の回答を参照)。UEFIシステムの場合、マルチブートセットアップは、説明もテストもされていないようです。
clearkimura

1
lsblk

そして、どのディスクがにマウントされているかを確認し/ます。以下のコメントを読んでください。または/boot、マウントポイントにいる場合はRavexinaの答えを読んでください。

不明な場合は、UUIDを確認してください

lsblk -o UUID,NAME,SIZE,MOUNTPOINT

2
/bootが別のパーティションである場合はどうですか?その後/boot/grub/grub.cfg/パーティションに配置されていません。
-Ravexina

@Ravexina技術的になってください、それは本当かもしれません。ただし、このユーザーの目的上、/パーティションはカウントされませんか?

@MarkYisri私はそれが常に真実であるとは言えないと思うが、OPは彼が3つの異なるパーティションでファイルを手に入れたと言っているので、/boot最初に別のものをチェックする方が良いと思う。
-Ravexina

1
@Ravexinaを指摘してくれてありがとう、答えを更新しました。
カツ

0

ユーザーがどのパーティションからブートしたかを知るには、インストールされたシステムをブートする前にブートローダーメニューを見てください。ブートローダーメニューを表示せずに伝えることは困難です。

見どころ

次の組み合わせたスクリーンショットでは、ユーザーがどのパーティションから起動したかを知ることができる3つのヒントにラベルを付けています。

注釈付きのGNU GRUB PC / BIOSバージョンを使用したマルチブートメニュー

ラベル(1):最初のエントリの下のGNU GRUBメニューエントリ

ラベル(2):ブートローダーメニューの上部にあるGNU GRUBバージョン

ラベル(3):GNU GRUB背景画像(手動セットアップが必要)

最も明らかなヒントはラベル(3)です。これは、ブートローダーメニューを制御するシステムのGNU GRUB背景画像を変更することです。ユーザーが事前に設定しておけば、最もわかりやすいです。

ラベル(1)の説明

最初のエントリの下のメニューエントリにリストされていないパーティションを探します。スクリーンショットでは、「Ubuntu」と「Ubuntu 14.04.5 LTS」の2つのオペレーティングシステムのみがインストールされています。

Ubuntu
Advanced options for Ubuntu
Memory test (memtest86+)
Memory test (memtest86+, serial console 115200)
Ubuntu 14.04.5 LTS (14.04) (on /dev/sda3)
Advanced options for Ubuntu 14.04.5 LTS (14.04) (on /dev/sda3)

後者は言及しました(on /dev/sda3)、それは前者が/dev/sda2またはにあるかもしれないことを意味し/dev/sda1ます。確かに、「Ubuntu」などのシステムを起動した後、関連するコマンドを実行して利用可能なパーティションをリストダウンします(lsblk最も簡単なようです)。

$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0    13G  0 disk 
├─sda1   8:1    0   976M  0 part [SWAP]
├─sda2   8:2    0     6G  0 part /
└─sda3   8:3    0     6G  0 part 
sr0     11:0    1  55.7M  0 rom 

の出力と比較しlsblkて初めて、システム、つまり「Ubuntu」がブートローダーメニューの管理元/dev/sda2(メニューエントリにリストされていない)にあることがわかります。

ラベル(2)の説明

ブートローダーメニューの上部に印刷されているGRUBバージョンを探します。そのバージョンに注意し、ブートされたシステムにあるGRUBバージョン、つまり「Ubuntu」と比較してください。

スクリーンショット(下半分): GNU GRUB version 2.02~beta2-9

「Ubuntu」などのシステムを起動した後、関連するコマンドを実行してGRUBパッケージのバージョンを確認します(grub-install --version関連性が高く、最も簡単です)。

$ grub-install --version
grub-install (GRUB) 2.02~beta2-9

これはどのように関連していますか?ためgrub-installupdate-grubコマンドは両方とも同じパッケージで提供されていますgrub2-common。ブートローダーメニューが同じパッケージのツールを使用して作成および更新される場合、ブートローダーメニューの上部の印刷バージョンは同じになります。

ラベル(3)の説明

ブートローダーメニューのデフォルトの背景画像はなし(単なる黒)であるため、このヒントは手動で設定する必要があります。背景画像は8ビット深度でなければなりません。

desktop-baseパッケージがシステムにインストールされている場合、GRUB用に特別に作成されたこのような背景画像*grub.pngは、ターゲットディレクトリにファイル名サフィックスが付いた状態ですぐに見つかります。

$ ls /usr/share/images/desktop-base/*grub.png
/usr/share/images/desktop-base/desktop-grub.png
/usr/share/images/desktop-base/joy-grub.png
/usr/share/images/desktop-base/moreblue-orbit-grub.png
/usr/share/images/desktop-base/spacefun-grub.png

背景画像を設定するには:

  1. /etc/default/grubスーパーユーザーとしてファイルを開きGRUB_BACKGROUND=、選択した画像と引用符で囲まれた画像へのフルパスを含む行を追加します。

    $ sudo nano /etc/default/grub 
    ...
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
    GRUB_CMDLINE_LINUX=""
    
    # Show background in GRUB boot menu
    GRUB_BACKGROUND="/usr/share/images/desktop-base/spacefun-grub.png"
    ...
    
  2. 次に、ブートローダーメニューを含むsudo update-grubアップデート/boot/grub/grub.cfgを実行します。ユーザーには次のような出力が表示されます。

    $ sudo update-grub
    Generating grub configuration file ...
    Found background: /usr/share/images/desktop-base/spacefun-grub.png
    Found background image: /usr/share/images/desktop-base/spacefun-grub.png
    Found linux image: /boot/vmlinuz-3.13.0-24-generic
    Found initrd image: /boot/initrd.img-3.13.0-24-generic
    Found memtest86+ image: /boot/memtest86+.elf
    Found memtest86+ image: /boot/memtest86+.bin
    Found Ubuntu 14.04.5 LTS (14.04) on /dev/sda3
    done
    
  3. マシンを再起動して、ブートローダーメニューに、システムからの更新コマンドによって行われた目に見える変更があったかどうかを確認します。

それ以外の場合は、他のシステムに対して1つずつ手順を繰り返します。ユーザーがどのシステムがブートローダーメニューを制御できるかを知っていれば、繰り返される手順は不要でした(これもインストールの方法によって異なります)。

免責事項

この回答は、GNU GRUB PC / BIOSバージョンを使用したマルチブートセットアップを備えたBIOSシステムの実証済みで十分にテストされた基準について説明しています。次の例外が適用されます。

  • GNU GRUB EFIバージョンを使用して、UEFIシステムの対応のために、それがされていない保証やない基準は上述したものと同じであるように思われる場合知ら。

  • 重点はに与えられルックスブートローダーメニューの(それはスクリーンショットの異なるすなわちトップの半分を表示されることがありますどのように)のではなくどのようにchainloading作品を実証します。そのため、「スクリーンショットで見られるようにマルチブートがどのようにセットアップされたか」に関しては、この回答では説明されません

  • マルチブートセットアップが、Ubuntu 14.04、Kubuntu 14.04、Xubuntu 14.04など、類似のオペレーティングシステムのまったく同じコピーで作成されている場合、ユーザーがどのパーティションからブートしたかを知る唯一の信頼できる方法は、ラベル(3)です。

  • ラベル(3)は、「このブートメニューは/ dev / sda1から管理されます」など、ブート元の明示的な書き込みを行うカスタム背景画像を使用すると、より適切に機能する場合があります。同様に、「GRUBのカスタム背景画像を作成する方法」については、この回答では説明しません

TL; DRインストールされたシステムを起動する前に、ブートローダーメニューを確認します。最も簡単で信頼性の高い方法は、ラベル(3)です。これは、GRUB背景画像を手動でセットアップすることです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.