Как узнать, из какого раздела я загрузился?

У меня есть машина с несколькими загрузочными разделами. У меня Ubuntu 14.04 на одном разделе, Ubuntu 15.04 на втором и Ubuntu 16.04 на третьем. Есть ли способ узнать из командной строки, из какого раздела, который я загрузил, чтобы найти вас на каком разделе /boot/grub/grub.cfg, который использовался для процесса загрузки? У меня есть /boot/grub/grub.cfg на каждом из трех разделов.

13
задан 10 May 2017 в 14:22

12 ответов

Чтобы узнать, из какого раздела пользователь загрузился, посмотрите на меню загрузчика перед загрузкой любой из установленных систем. Трудно сказать, не видя меню загрузчика.

Где посмотреть

В следующих комбинированных снимках экрана я обозначил три подсказки, которые могут быть известны, из какого раздела пользователь Загрузите.

Ярлык (1): записи меню GNU GRUB ниже первой записи. Метка (2): версия GNU GRUB в верхней части меню загрузчика. Метка (3): GNU GRUB Фоновое изображение (требуется ручная настройка)

Самым очевидным намеком является метка (3), которая заключается в изменении фонового изображения GNU GRUB в системе, которая управляет меню загрузчика.

Где посмотреть

Искать раздел, который является перед , перечисленные в пунктах меню ниже первой записи. На скриншоте установлены только две операционные системы: «Ubuntu» и «Ubuntu 14.04.5 LTS».

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-install и update-grub оба предоставляются одним и тем же пакетом grub2-common. Учитывая, что меню загрузчика создано и обновлено с помощью инструментов из того же пакета, печатная версия в верхней части меню загрузчика будет одинаковой.

Ярлык (2) объяснил

Этот подсказку необходимо настроить вручную, так как фоновое изображение по умолчанию в меню загрузчика отсутствует (просто черный). Фоновое изображение должно быть 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

Чтобы настроить фоновое изображение:

Откройте файл /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" ... Затем запустите 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 Перезагрузите компьютер и посмотрите, есть ли в меню загрузчика какие-либо видимые изменения, внесенные командой обновления из системы.

Повторите шаги для других систем, по одному за раз. Повторяющиеся шаги были бы лишними, если бы пользователь знал, какая система имела контроль над меню загрузчика (опять же, это зависит от того, как была выполнена установка).

Отказ от ответственности

Этот ответ объясняет проверенные и проверенные критерии для системы BIOS с настройкой множественной загрузки с использованием версии GNU GRUB PC / BIOS. Следующие исключения будут применяться.

Для аналога системы UEFI, использующего версию GNU GRUB EFI, не гарантируется или неизвестно, будут ли критерии такими же, как описано выше. Акцент делается на внешний вид меню загрузчика (как он может выглядеть как, например, верхняя половина снимка экрана), а не демонстрировать, как работает цепочка. Таким образом, в отношении «того, как была настроена мультизагрузка, как показано на скриншоте», в этом ответе не будет объяснено. Если для нескольких загрузочных установок используются одни и те же копии аналогичной операционной системы, то есть Ubuntu 14.04, Kubuntu 14.04, Xubuntu 14.04 и т. Д., Тогда единственный надежный способ узнать, из какого раздела, который пользователь загрузил, является меткой (3). Ярлык (3) может работать лучше, используя пользовательский фоновый рисунок, который явно записывает, с которого он загружается, т. Е. «Это меню загрузки управляется из / dev / sda1». Аналогичным образом, в отношении «создания пользовательского фонового изображения для GRUB» в этом ответе не будет объяснено.

Отказ от ответственности Обратитесь к меню загрузчика , а не , загружая любую из установленных систем. Самый простой и надежный способ знать - это метка (3), которая предназначена для настройки фонового изображения GRUB вручную.

0
ответ дан 18 July 2018 в 13:32

Чтобы отобразить устройство, в котором установлена ​​текущая корневая файловая система:

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

Чтобы отобразить текущую версию выпуска Ubuntu:

lsb_release -rs
3
ответ дан 18 July 2018 в 13:32
lsblk

И проверьте, какой диск установлен в /. Пожалуйста, прочитайте комментарии ниже или ответ Равешины, если у вас есть /boot в ваших смонтированных точках.

Если вы не уверены, проверьте UUID

lsblk -o UUID,NAME,SIZE,MOUNTPOINT
1
ответ дан 18 July 2018 в 13:32

Мы могли бы добавить простую пользовательскую запись меню в каждой ОС, и мы увидим в меню Grub, из которого OS Grub загрузил конфигурационный файл.

Пример:

Мы загрузите в 16.04 и отредактируйте файл /etc/grub.d/40_custom, чтобы добавить запись в меню.

#!/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above. # menuentry 'grub.conf loaded from 16.04' { reboot }

Мы убеждаемся, что файл выполним и запустил sudo update-grub.

Затем мы делаем те же изменения в других ОС, мы просто используем разные имена для меню, ig мы меняем 16.04 на 15.04 и так далее.

Если мы выберем эту команду меню в Grub-меню во время загрузки, машина просто перезагрузится, мы создали их, чтобы не загружать какую-либо ОС, а чтобы увидеть, какая ОС фактически используется для загрузки grub.conf.

Пример:

Такая путаница появляется, когда мы устанавливаем несколько ОС, которые все используют Grub, и во время установки ОС мы выбираем один и тот же загрузочный файл, место загрузчика. Нам действительно нужна только одна ОС, которая устанавливает Grub, Grub может загружаться в любой дистрибутив Linux, поэтому, если у нас есть один дистрибутив (включая Grub), мы могли бы установить дополнительные ОС без установки Grub.

В устаревших установках довольно легко обрабатывать местоположение для установки загрузчика, так как мы можем выбрать запись для загрузки в качестве местоположения, но мы должны позаботиться о выборе правильного раздела. Таким образом, одна ОС устанавливает загрузчик в MBR, а дополнительные ОС устанавливают загрузчик в PBR раздела OS. Эта возможность у нас есть только тогда, когда мы используем Something else -описание во время установки.

В установках UEFI это немного страннее, загрузчик будет установлен в папку в системном разделе EFI (ESP) и несколько загрузчиков могут легко сосуществовать. Проблема здесь в том, что все Ubuntu-flavors, а также некоторые другие дистрибутивы Linux установят Grub в ту же папку в ESP, и у нас нет выбора. Поэтому установка дополнительного дистрибутива Linux заменит наш уже существующий загрузчик. Единственным способом, который я знаю, чтобы избежать этого, является загрузка в живую сессию и запуск установщика с помощью sudo ubiquity -b.

Еще одно простое решение

Предположим, что у нас есть три дистрибутива Linux установленных на разделах sda1, sda2 и sda3. Теперь посмотрим на записи меню загрузки Grub. Во время загрузки мы увидим что-то вроде этого:

1 Ubuntu 2 Advanced options for Ubuntu 3 Memory test (memtest86+) 4 Memory test (memtest86+, serial console 115200) 5 Ubuntu (on /dev/sda2) 6 Advanced options for Ubuntu (on /dev/sda2) 7 Ubuntu 17.04 (on /dev/sda3) 8 Advanced options for Ubuntu (on /dev/sda3)

Первые две записи - это записи для ОС, которые генерировали файл grub.conf, который мы фактически используем. Записи № 3 и № 4 в настоящий момент не интересны. Записи # 5, # 6, # 7 и # 8 - это записи, которые были сгенерированы с помощью OS-prober, и мы видим, на каких разделах находятся OS для этих записей. Таким образом, в случае этого небольшого примера мы можем заключить, что файл grub.config, который мы фактически используем, не относится к ОС на sda2 или sda3, а к ОС на sda1. В случае, если одна или несколько ОС установлены с отдельным разделом /boot, нам нужно будет проверить, какое /boot -разделение принадлежит к какой ОС, но это легко сделать, запустив команду findmnt в каждой ОС .

2
ответ дан 18 July 2018 в 13:32

После того, как GRUB передал загрузку ядра, ядро ​​не имеет представления о том, что запустило его, а /boot, возможно, не тот, который использовался GRUB. Вы можете проверить время доступа boot/grub/grub.cfg в каждом из разделов, чтобы узнать, какой из них был недавно просмотрен. Это может сказать вам, какой файл конфигурации раздела GRUB используется.

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

Если время доступа не обновляется, вам придется искать любые различия в параметрах ядра, используемых различными конфигурационными файлами GRUB , Если вы можете их изменить, например, добавьте foo=1, foo=2 и т. Д. В GRUB_CMDLINE_LINUX в каждом из них, запустите sudo update-grub2 и перезагрузитесь, затем вы можете проверить /proc/cmdline, чтобы узнать, какое из этих значений было б.

11
ответ дан 18 July 2018 в 13:32

Как вы знаете, файл, который вы ищете, находится в директории /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 отличаются друг от друга.

5
ответ дан 18 July 2018 в 13:32

Чтобы узнать, из какого раздела пользователь загрузился, посмотрите на меню загрузчика перед загрузкой любой из установленных систем. Трудно сказать, не видя меню загрузчика.

Где посмотреть

В следующих комбинированных снимках экрана я обозначил три подсказки, которые могут быть известны, из какого раздела пользователь Загрузите.

Ярлык (1): записи меню GNU GRUB ниже первой записи. Метка (2): версия GNU GRUB в верхней части меню загрузчика. Метка (3): GNU GRUB Фоновое изображение (требуется ручная настройка)

Самым очевидным намеком является метка (3), которая заключается в изменении фонового изображения GNU GRUB в системе, которая управляет меню загрузчика.

Где посмотреть

Искать раздел, который является перед , перечисленные в пунктах меню ниже первой записи. На скриншоте установлены только две операционные системы: «Ubuntu» и «Ubuntu 14.04.5 LTS».

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-install и update-grub оба предоставляются одним и тем же пакетом grub2-common. Учитывая, что меню загрузчика создано и обновлено с помощью инструментов из того же пакета, печатная версия в верхней части меню загрузчика будет одинаковой.

Ярлык (2) объяснил

Этот подсказку необходимо настроить вручную, так как фоновое изображение по умолчанию в меню загрузчика отсутствует (просто черный). Фоновое изображение должно быть 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

Чтобы настроить фоновое изображение:

Откройте файл /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" ... Затем запустите 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 Перезагрузите компьютер и посмотрите, есть ли в меню загрузчика какие-либо видимые изменения, внесенные командой обновления из системы.

Повторите шаги для других систем, по одному за раз. Повторяющиеся шаги были бы лишними, если бы пользователь знал, какая система имела контроль над меню загрузчика (опять же, это зависит от того, как была выполнена установка).

Отказ от ответственности

Этот ответ объясняет проверенные и проверенные критерии для системы BIOS с настройкой множественной загрузки с использованием версии GNU GRUB PC / BIOS. Следующие исключения будут применяться.

Для аналога системы UEFI, использующего версию GNU GRUB EFI, не гарантируется или неизвестно, будут ли критерии такими же, как описано выше. Акцент делается на внешний вид меню загрузчика (как он может выглядеть как, например, верхняя половина снимка экрана), а не демонстрировать, как работает цепочка. Таким образом, в отношении «того, как была настроена мультизагрузка, как показано на скриншоте», в этом ответе не будет объяснено. Если для нескольких загрузочных установок используются одни и те же копии аналогичной операционной системы, то есть Ubuntu 14.04, Kubuntu 14.04, Xubuntu 14.04 и т. Д., Тогда единственный надежный способ узнать, из какого раздела, который пользователь загрузил, является меткой (3). Ярлык (3) может работать лучше, используя пользовательский фоновый рисунок, который явно записывает, с которого он загружается, т. Е. «Это меню загрузки управляется из / dev / sda1». Аналогичным образом, в отношении «создания пользовательского фонового изображения для GRUB» в этом ответе не будет объяснено.

Отказ от ответственности Обратитесь к меню загрузчика , а не , загружая любую из установленных систем. Самый простой и надежный способ знать - это метка (3), которая предназначена для настройки фонового изображения GRUB вручную.

0
ответ дан 24 July 2018 в 20:12

Чтобы отобразить устройство, в котором установлена ​​текущая корневая файловая система:

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

Чтобы отобразить текущую версию выпуска Ubuntu:

lsb_release -rs
3
ответ дан 24 July 2018 в 20:12
  • 1
    что на самом деле делает многое в вопросе и кажется наиболее подходящим ответом. Уверен, что ни один из двух дистрибутивов в его настройке не имеет одинакового номера версии, он будет использовать lsb_release -rs каждый раз. ПОЦЕЛУЙ – tatsu 10 May 2017 в 16:06
  • 2
    К сожалению, это не работает. Я протестировал вашу команду на своей машине с несколькими ОС, только моя «главная» ОС имеет grub, установленную в MBR, другие ОС имеют Grub, установленный в PBR, команда, похоже, показывает местоположение, где установлена ​​ОС Grub, но не показывать, из которого OS Grub загружает конфигурационный файл. – mook765 11 May 2017 в 17:12
  • 3
    @ mook765: Мой ответ абсолютно не имеет отношения к Grub или MBR (или к любому загрузочному загрузчику или типу таблицы разделов). Я не уверен, что именно вы пробовали и что вы ожидали увидеть. – David Foerster 11 May 2017 в 20:24
  • 4
    Тогда этот ответ не имеет никакого отношения к вопросу ... – mook765 12 May 2017 в 05:29
  • 5
    @ mook765: Если вы возьмете это буквально, то да. Однако мне кажется, что OP хочет знать, какая из его нескольких установок Ubuntu в настоящее время загружена, и для этого мой ответ должен быть прекрасным. – David Foerster 12 May 2017 в 09:27
lsblk

И проверьте, какой диск установлен в /. Пожалуйста, прочитайте комментарии ниже или ответ Равешины, если у вас есть /boot в ваших смонтированных точках.

Если вы не уверены, проверьте UUID

lsblk -o UUID,NAME,SIZE,MOUNTPOINT
1
ответ дан 24 July 2018 в 20:12
  • 1
    Это неправда, что, если мой /boot - отдельный раздел? то /boot/grub/grub.cfg не находится в разделе /. – Ravexina 10 May 2017 в 13:33
  • 2
    @Ravexina Получить технику, это может быть правдой. Однако, для целей этого пользователя, не считается ли раздел раздела /? – Mark Yisri 10 May 2017 в 13:39
  • 3
    @MarkYisri Я предполагаю, что я должен сказать, что это не всегда так, однако OP сообщает нам, что он получил файл на трех разных разделах, поэтому я думаю, что лучше сначала проверить отдельный /boot. – Ravexina 10 May 2017 в 13:46
  • 4
    Спасибо, что указали, что @Ravexina я обновил ответ. – Katu 10 May 2017 в 14:36

Мы могли бы добавить простую пользовательскую запись меню в каждой ОС, и мы увидим в меню Grub, из которого OS Grub загрузил конфигурационный файл.

Пример:

Мы загрузите в 16.04 и отредактируйте файл /etc/grub.d/40_custom, чтобы добавить запись в меню.

#!/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above. # menuentry 'grub.conf loaded from 16.04' { reboot }

Мы убеждаемся, что файл выполним и запустил sudo update-grub.

Затем мы делаем те же изменения в других ОС, мы просто используем разные имена для меню, ig мы меняем 16.04 на 15.04 и так далее.

Если мы выберем эту команду меню в Grub-меню во время загрузки, машина просто перезагрузится, мы создали их, чтобы не загружать какую-либо ОС, а чтобы увидеть, какая ОС фактически используется для загрузки grub.conf.

Пример:

Такая путаница появляется, когда мы устанавливаем несколько ОС, которые все используют Grub, и во время установки ОС мы выбираем один и тот же загрузочный файл, место загрузчика. Нам действительно нужна только одна ОС, которая устанавливает Grub, Grub может загружаться в любой дистрибутив Linux, поэтому, если у нас есть один дистрибутив (включая Grub), мы могли бы установить дополнительные ОС без установки Grub.

В устаревших установках довольно легко обрабатывать местоположение для установки загрузчика, так как мы можем выбрать запись для загрузки в качестве местоположения, но мы должны позаботиться о выборе правильного раздела. Таким образом, одна ОС устанавливает загрузчик в MBR, а дополнительные ОС устанавливают загрузчик в PBR раздела OS. Эта возможность у нас есть только тогда, когда мы используем Something else -описание во время установки.

В установках UEFI это немного страннее, загрузчик будет установлен в папку в системном разделе EFI (ESP) и несколько загрузчиков могут легко сосуществовать. Проблема здесь в том, что все Ubuntu-flavors, а также некоторые другие дистрибутивы Linux установят Grub в ту же папку в ESP, и у нас нет выбора. Поэтому установка дополнительного дистрибутива Linux заменит наш уже существующий загрузчик. Единственным способом, который я знаю, чтобы избежать этого, является загрузка в живую сессию и запуск установщика с помощью sudo ubiquity -b.

Еще одно простое решение

Предположим, что у нас есть три дистрибутива Linux установленных на разделах sda1, sda2 и sda3. Теперь посмотрим на записи меню загрузки Grub. Во время загрузки мы увидим что-то вроде этого:

1 Ubuntu 2 Advanced options for Ubuntu 3 Memory test (memtest86+) 4 Memory test (memtest86+, serial console 115200) 5 Ubuntu (on /dev/sda2) 6 Advanced options for Ubuntu (on /dev/sda2) 7 Ubuntu 17.04 (on /dev/sda3) 8 Advanced options for Ubuntu (on /dev/sda3)

Первые две записи - это записи для ОС, которые генерировали файл grub.conf, который мы фактически используем. Записи № 3 и № 4 в настоящий момент не интересны. Записи # 5, # 6, # 7 и # 8 - это записи, которые были сгенерированы с помощью OS-prober, и мы видим, на каких разделах находятся OS для этих записей. Таким образом, в случае этого небольшого примера мы можем заключить, что файл grub.config, который мы фактически используем, не относится к ОС на sda2 или sda3, а к ОС на sda1. В случае, если одна или несколько ОС установлены с отдельным разделом /boot, нам нужно будет проверить, какое /boot -разделение принадлежит к какой ОС, но это легко сделать, запустив команду findmnt в каждой ОС .

2
ответ дан 24 July 2018 в 20:12
  • 1
    +1 Несмотря на длительный, этот ответ фактически включает соответствующие моменты. Для систем BIOS пользователи, которые выполняют мультизагрузку, должны предпочесть «Что-то еще», в установщике иметь больший контроль; Нет необходимости форсировать & quot; не устанавливать загрузчик GRUB & quot; (см. мой старший ответ ). Для систем UEFI установка с несколькими загрузками кажется очень необъяснимой или непроверенной. – clearkimura 11 May 2017 в 17:08

После того, как GRUB передал загрузку ядра, ядро ​​не имеет представления о том, что запустило его, а /boot, возможно, не тот, который использовался GRUB. Вы можете проверить время доступа boot/grub/grub.cfg в каждом из разделов, чтобы узнать, какой из них был недавно просмотрен. Это может сказать вам, какой файл конфигурации раздела GRUB используется.

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

Если время доступа не обновляется, вам придется искать любые различия в параметрах ядра, используемых различными конфигурационными файлами GRUB , Если вы можете их изменить, например, добавьте foo=1, foo=2 и т. Д. В GRUB_CMDLINE_LINUX в каждом из них, запустите sudo update-grub2 и перезагрузитесь, затем вы можете проверить /proc/cmdline, чтобы узнать, какое из этих значений было б.

11
ответ дан 24 July 2018 в 20:12
  • 1
    интересно! означает ли это, что мое решение также имеет более высокую точность, чем у Равексины и Кату? – tatsu 10 May 2017 в 14:42
  • 2
    @tatsu IMO все остальные ответы неверны - Ravexina находит раздел, в котором находится /boot, но это может быть не то, что используется grub, и вы и Katu обнаруживаете, что раздел, установленный на /, установлен, но, как Равесина отметил, что, вероятно, имеет еще меньшую связь – muru 10 May 2017 в 14:51
  • 3
    да, но как можно размонтировать, возможно, сделать что-либо другое, кроме сбоя на том сегменте, на котором вы монтируете: диски предоставляют такую ​​информацию, как устройство, смонтированный адрес, любую информацию об идентификаторе, которая вам может понадобиться, к которой вы только что пытались размонтировать. Я первый, кто признал, что мое решение уродливое, но у него действительно 100% -ный показатель успеха? – tatsu 10 May 2017 в 15:57
  • 4
    Успех @tatsu для чего? Надежно найти раздел, установленный на /. Поиск конфигурации GRUB в каком разделе использовался во время загрузки? Я не понимаю, как это относится. – muru 10 May 2017 в 18:31
  • 5
    Действительно ли grub установил эту метку времени доступа, учитывая, что она является ее собственной DOS и не связана соглашениями драйвера файловой системы Linux? – rackandboneman 11 May 2017 в 03:34

Как вы знаете, файл, который вы ищете, находится в директории /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 отличаются друг от друга.

5
ответ дан 24 July 2018 в 20:12
  • 1
    Более простой способ (который не требует привилегий суперпользователя) найти узел устройства за файловой системой UUID будет readlink -f /dev/disk/by-uuid/<UUID>. – David Foerster 10 May 2017 в 15:14

Другие вопросы по тегам:

Похожие вопросы: