Як я можу знати, з якого розділу я завантажився?


12

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


3
Ви не можете зробити це з абсолютною загальністю та надійністю. Як ви знаєте, /boot/grub/grub.cfgфайл, який використовується для завантаження, можна було б видалити, цей розділ можна було б видалити з таблиці розділів, а цей диск фізично видалити з системи.
Федеріко Полоні

Відповіді:


10

Після того, як 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яке з цих значень було використано.


цікаво! чи означає це, що моє рішення також має кращу швидкість точності, ніж у Ravexina та Katu?
тацу

@tatsu IMO всі інші відповіді невірні - Ravexina розташовує розділ, де /bootзнаходиться, але це може бути не те, що використовується grub, і ви з Katu знаходите, на якому встановлений розділ /встановлений, але, як зауважила Ravexina, це, ймовірно, має ще менше зв’язку
muru

1
так, але як можна відключити, можливо, все, крім помилок, на розділі, на якому ви встановлені: диски доставляють таку інформацію, як адреса, на якій встановлено пристрій, будь-яку інформацію про ідентифікатор, яка, можливо, знадобиться щодо того, який саме ви намагалися відключити. Я перший, хто визнає своє рішення некрасивим, але він мав 100% успіх?
тацу

1
@tatsu показник успіху для чого? Знаходимо встановлений на ньому розділ /. Визначення, яка конфігурація GRUB розділу була використана під час завантаження? Я не бачу, як це стосується.
муру

4
Чи фактично grub встановлює таку часову позначку доступу, враховуючи, що це його власний DOS і не пов'язаний конвенціями драйверів файлової системи Linux?
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

це насправді викликає багато сенсу щодо питання і, здається, найбільш відповідна відповідь поки. Б'юсь об заклад, якщо в його налаштуваннях немає двох дистрибутивів, той самий номер версії він буде використовувати lsb_release -rsщоразу. KISS
тацу

На жаль, це не працює. Я перевірив вашу команду на моїй машині з декількома ОС, лише моя "master`-OS має grub, встановлений у MBR, інші ОС мають Grub, встановлений у PBR; команда, схоже, показує місце, де в ОС встановлена ​​Grub, але не покажіть, з якої ОС Grub завантажує конфігураційний файл
mook765,

@ mook765: Моя відповідь абсолютно не пов'язана з Grub або MBR (або будь-яким завантажувачем або типом розділів). Я не впевнений, що саме ви спробували і що ви очікували побачити.
Девід Фоерстер

Тоді ця відповідь не має нічого спільного з питанням ...
mook765,

@ mook765: Якщо сприймати це буквально, то так. Однак мені здається, що ОП хоче знати, яка з його декількох установок Ubuntu завантажується зараз, і для цього моя відповідь повинна бути просто чудовою.
Девід Фоерстер

2

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

Приклад:

Ми завантажуємось до 16.04 і редагуємо файл, /etc/grub.d/40_customщоб додати меню-запис.

#! / бін / ш
виконати хвіст -n +3 $ 0
# Цей файл пропонує простий спосіб додати користувацькі записи в меню. Просто введіть
# записи в меню, які потрібно додати після цього коментаря. Будьте обережні, щоб не змінитися
# рядок "exec tail" вище.
#

menuentry 'grub.conf завантажується з 16.04' {        
            перезавантажити  
    }

Ми переконуємося, що файл працює та працює sudo update-grub.

Тоді ми робимо одні і ті ж зміни в інших ОСА, ми просто використовувати різні імена для menuentry, І.Г. ми змінюємо 16.04до 15.04і так далі.

Якщо під час завантаження виберемо цей запис у меню Grub, машина просто перезавантажиться, ми створили їх не для завантаження жодної ОС, а для того, щоб побачити, яку ОС насправді використовується для завантаження grub.conf.

Додаткова інформація

Така плутанина з'являється, коли ми встановлюємо кілька ОС, які використовують Grub, і під час установки ОС ми вибираємо одне і те ж місце завантажувача. Нам справді потрібна лише одна ОС, яка встановлює Grub, Grub може завантажуватися в будь-який дистрибутив Linux, тому якщо у нас встановлений один дистрибутив (включаючи Grub), ми могли б встановити додаткові ОС без встановлення Grub.

У застарілих установках досить просто обробляти місце для установки завантажувача, оскільки ми можемо вибрати розділ-завантажувальний запис як місцерозташування, але нам потрібно подбати про те, щоб вибрати правильний розділ. Так одна ОС встановлює завантажувач до MBR, а додаткова ОС встановлює завантажувач до PBR ОС-розділу. Таку можливість ми маємо лише тоді, коли Something elseпід час встановлення ми використовуємо опцію.

У UEFI-інсталяціях це трохи дивніше, завантажувач буде встановлений у папку в розділі системи EFI (ESP), і кілька завантажувачів можуть легко співіснувати. Проблема тут полягає в тому, що всі аромати Ubuntu, а також деякі інші Linux-дистрибутиви встановлять Grub в ту саму папку в ESP, і у нас немає вибору. Отже встановлення додаткового дистрибутива Linux замінить наш уже існуючий завантажувач. Єдиний спосіб, який я знаю, щоб уникнути цього - це завантажитися в прямому сеансі та запустити інсталятор sudo ubiquity -b.

Ще одне просте рішення

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

1 Ubuntu
2 Додаткові параметри для Ubuntu
3 Тест пам'яті (memtest86 +)
4 Тест пам'яті (memtest86 +, послідовна консоль 115200)
5 Ubuntu (on / dev / sda2)
6 розширених варіантів для Ubuntu (on / dev / sda2)
7 Ubuntu 17.04 (on / dev / sda3)
8 розширених варіантів для Ubuntu (on / dev / sda3)

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


+1 Незважаючи на тривалу, ця відповідь насправді включає відповідні моменти. Для систем BIOS користувачі, які роблять багатозавантажувані пристрої, повинні віддавати перевагу "Щось інше" в інсталяторі, щоб мати більше контролю; Не потрібно змушувати "не встановлювати завантажувач GRUB" (див. Мою стару відповідь ). Для систем UEFI багатофункціональне завантаження здається незрозумілим або неперевіреним.
клеаркімура

1
lsblk

І перевірте, який диск вмонтований /. Будь ласка, прочитайте коментарі нижче або відповідь Ravexina, якщо у вас є /bootмісця.

Якщо ви не впевнені, перевірте UUID

lsblk -o UUID,NAME,SIZE,MOUNTPOINT

2
Це неправда, що робити, якщо мій /bootроздільний розділ? то /boot/grub/grub.cfgне знаходиться в /перегородці.
Равексіна

@Ravexina Отримайте технічне, це може бути правдою. Однак для цілей цього користувача не /вважається розділ?

@MarkYisri Я думаю, що я повинен сказати, що це не завжди правда, проте ОП каже нам, що він отримав файл на трьох різних розділах, тому я думаю, що краще спочатку перевірити окремий /boot.
Равексіна

1
Дякую, що вказали, що @Ravexina я оновив відповідь.
Кату

0

Щоб дізнатися, з якого розділу користувач завантажився, перегляньте меню завантажувача перед завантаженням будь-якої з встановлених систем. Це важко сказати, не бачивши меню завантажувача.

Куди подивитися

На наступних комбінованих знімках екрана я помітив три підказки, з яких можна знати, з якого розділу завантажився користувач.

Мульти завантажувальне меню з використанням GNU GRUB PC / BIOS версії з анотацією

Мітка (1): записи GNU GRUB нижче першого запису

Мітка (2): версія GNU GRUB вгорі меню завантажувача

Мітка (3): фонове зображення GNU GRUB (необхідна установка вручну)

Найбільш очевидним підказом є мітка (3), яка полягає у зміні фонового зображення GNU GRUB в системі, яка має управління меню завантажувача. Це найпростіше сказати за умови попереднього налаштування користувача.

Мітка (1) пояснила

Шукайте розділ, який не вказаний у записах меню під першим записом. На скріншоті встановлено лише дві операційні системи, тобто "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. Зважаючи на те, що меню завантажувача створюється та оновлюється за допомогою інструментів з того самого пакету, друкована версія вгорі меню завантажувача буде однаковою.

Мітка (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. Перезавантажте машину і подивіться, чи не було в меню завантажувача видимих ​​змін, внесених командою оновлення з системи.

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

Відмова від відповідальності

Ця відповідь пояснює перевірені і добре перевірені критерії для системи BIOS з багатозавантажувальною установкою з використанням GNU GRUB PC / BIOS версії. Застосовуються наступні винятки.

  • Для системного колеги UEFI, що використовує версію GNU GRUB EFI, не гарантується чи не відомо, чи виявляться критерії такими ж, як описано вище.

  • Наголос приділяється вигляду меню завантажувача (як він може виглядати різним, тобто верхній половині екрана), а не демонструвати, як працює завантаження ланцюга. Таким чином, щодо того, "як було налаштовано багатозавантажувальну систему, як видно на скріншоті", у цій відповіді не було б пояснено

  • Якщо налаштування декількох завантажувачів коли-небудь робиться з точно таких же копій подібної операційної системи, наприклад Ubuntu 14.04, Kubuntu 14.04, Xubuntu 14.04 тощо, то єдиний надійний спосіб дізнатися, з якого розділу завантажився користувач, це label (3).

  • Мітка (3) може працювати краще за допомогою спеціального фонового зображення, яке явно пише, з якого воно завантажено, тобто "Це меню завантаження керується з / dev / sda1". Аналогічно, стосовно "як створити власні фонові зображення для GRUB" не пояснюватиметься у цій відповіді.

TL; DR Перегляньте меню завантажувача перед завантаженням будь-якої з встановлених систем. Найпростіший і найнадійніший спосіб знати це мітка (3), яка полягає в налаштуванні фонового зображення GRUB вручну.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.