LINUX.ORG.RU
ФорумAdmin

Перезагрузиться в нужную ОС

 


0

1

Кто нибудь писал скрипты, чтобы перезагружаться в заданную ОС без выбора в момент загрузки. То есть у меня несколько ОС (винда и несколько линуксов), я нахожусь в винде и хочу загрузить CachyOS, но вынужден ждать пока винда выполнит свои дела, потом ждать пока UEFI подумает прежде чем загрузит Grub2 чтобы выбрать нужный мне пункт. А хотелось бы нажать ярлык на скрипт, который пропишет в конфиге Grub2 методом поиск/замена дефолтный пункт и вызовет команду перезагрузки. Проблема что надо заново устанавливать Grub2 на раздел, который будет виден винде. Или может надо в конфиге Grub2 прописать команду, чтобы она на виндовом диске, который доступен со всех ОС прочитала некий конфиг с единственным параметром 0-1-2-3, что означало бы номер пункта в Grub2.

тема, исходник скачать программку переключатель пункта меню Grub2 по умолчанию.



Последнее исправление: AZJIO (всего исправлений: 2)
Ответ на: комментарий от AZJIO

С чего вдруг не видны? Мне видны. Их не открыть из Windows, но «у меня диск на два терабайта, а винда видит только 1,5. Где ещё?». Далее начинают яндексить и находится херня, по которой они сносят /boot с grub и получается забава забавная. Пять минут и загрузчик Windows восстановлен, но они в панике переустановят систему целиком.

l00p
()
Ответ на: комментарий от l00p

Ну значит тебе больше везёт с такими. У меня мама и тётка на линуксе. К тётке пришли инет настраивать проводить, ага, пришли к бабушке запрыгивают на стул порулить, а там как вылез Grub2 с тремя ос и десятком образов виндовых и линуксовых, всё, сдулись на компе WinXP, который они ни разу не видели и линуксы, так что на своём ноуте показали инет и отчалили.

AZJIO
() автор топика

Кликалка будет работать исключительно из Linux. Запускать её придётся с правами суперпупер. Проигрыш во времени на ввод пароля, чтобы стрелками и ентером не тратить пару секунд. Например, я за пару секунд пароль при всём желании не введу, он длинный, 23 символа, а выбор системы максимум пять нажатий, если там 5 систем.

l00p
()
Ответ на: комментарий от l00p

Вопрос в ином. Нафига несколько Linux дистрибутивов на одном диске? Дичь какая-то.

Юзкейсов на самом деле вагон и маленькая тележка. Но я вот смотрю, ответов на этот вопрос уже чуть ли не больше, чем ответов на вопрос из ОП.

Алё, народ, очнитесь, это не винда, и макось, где на каждое действие надо перед хозяином приседать. Это линукс! Хочу – хоть 10 поставлю. Далеко не всё можно в виртуалке протестировать и тем более далеко не всё в докере.

hobbit ★★★★★
()
Ответ на: комментарий от yars068

Пять позиций. Первая по умолчанию, ничего нажимать не нужно, ещё четыре нужно стрелками выбирать и после Enter нажать. То есть, самая крайняя позиция пять нажатий. Первая позиция ноль или одно нажатие на клавишу, вторая - два нажатия, третья - три, четвёртая - четыре, пятая - пять, а дальше яички.

l00p
()
Ответ на: комментарий от andytux

Чушь. Копирование grubenv работает и с UEFI (и даже размер может быть ≠ 1024, на моей системе так), и с MBR (только что проверил на виртуалке). Да, официальный гнутый мануал несёт что-то насчёт «preallocated», но эта инфа, как всегда у гнутых, устарела на сто лет.

alegz ★★★★★
()

Посмотрите код, могу ли я использовать так?

# сначала задаём корневой диск
search --no-floppy --fs-uuid --set=root тут_UUID_диска_с_файлами 

# Если файл существует, то
if [ -f /b/0 ]; then
  set default="0"
fi
if [ -f /b/1 ]; then
  set default="1"
fi
if [ -f /b/2 ]; then
  set default="2"
fi


# могу ли вместо установки root использовать (hd0)?
if [ -f (hd0,1)/b/2 ]; then
  set default="2"
fi
  1. Я не вижу elseif в описании, поэтому применяю последовательные проверки.
  2. Я бы не хотел изменять root, так как это может помешать другим элементам кода, хотелось бы явно задать диск используя (hd0,1)

Нашёл elif и использовал диск как переменную

# Если файл существует, то
Set partfile = (hd0,1)
if [ -f ${partfile}/b/0 ]; then
  set default="0"
elif [ -f ${partfile}/b/1 ]; then
  set default="1"
elif  [ -f ${partfile}/b/2 ]; then
  set default="2"
fi

Или циклом?

for nfile in 0 1 2; do
	if [ -f ${partfile}/b/${nfile} ]; then
		set default=${nfile}
	fi
done
AZJIO
() автор топика
Последнее исправление: AZJIO (всего исправлений: 3)
Ответ на: комментарий от AZJIO

Вот проверенный, сработало. Пока что вручную менял файлы 0 и 1 и те же пункты включились.

search --no-floppy --fs-uuid --set=root UUID_где_файл
set partfile = root
if [ -f ${partfile}/b/bootitem/0 ]; then
  set default="0"
elif [ -f ${partfile}/b/bootitem/1 ]; then
  set default="1"
elif  [ -f ${partfile}/b/bootitem/2 ]; then
  set default="2"
fi
search --no-floppy --fs-uuid --set=root UUID_предыдущий_как_был
AZJIO
() автор топика
Ответ на: комментарий от AZJIO

Утилита тоже уже написана, скачать, тема исходного кода. Проверил, из винду в линукс загружаюсь и из линукс в винду, и между линуксами. Настройки вынес в ini-файл, так что пути можно задать свои и пункты Grub2 можно задать свои.

AZJIO
() автор топика

Попробовал вариант с использованием source path

search --no-floppy --fs-uuid --set=root UUID_где_файл
set partfile = root
source ${partfile}/b/bootdefitem/def
search --no-floppy --fs-uuid --set=root UUID_предыдущий_как_был

А в файл def вставил текст:

set default="0"

Пока не прокатило. Ой, прокатило, регистр (Default/default) имеет значение.

Если что прожку я обновил добавив 2 параметра и русификатор (поддерживает внешний языковой файл).

AZJIO
() автор топика
Последнее исправление: AZJIO (всего исправлений: 2)
Ответ на: комментарий от AZJIO
...--fs-uuid --set=root UUID_где_файл

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

andytux ★★★★★
()
Последнее исправление: andytux (всего исправлений: 2)
Ответ на: комментарий от andytux

Здесь можно сразу искать конкретный файл

Может мне search вообще не нужен, файл на конкретном диске с конкретным UUID, мне просто надо его задать как root, чтобы прочитать его от корня, или если возможно запись типа:

source (UUID)/b/bootdefitem/def

Было бы вообще идеально, а сейчас я сократил убрав переменную partfile

search --no-floppy --fs-uuid --set=root UUID_где_файл
source /b/bootdefitem/def
search --no-floppy --fs-uuid --set=root UUID_предыдущий_как_был

Я только что перезалил прогу (исходник в комплекте), ссылка на яндекс прежняя вечная. Теперь в ней используется запись в файл def. Проверил, работает.

Если кому интересно, сколько тратится времени на перезагрузку

  1. До меню Grub2 - 15 сек
  2. CachyOS - 25 сек от меню Grub2 или 38-40 сек от кнопки включения.
  3. Mint22 - 16 сек от меню Grub2
  4. Windows11 - 16 сек от Grub2. С момента нажатия кнопки «перезагрузка» до показа меню Grub2 проходит 25 сек, то есть 40 сек перезагрузка и это время могло быть потрачено не на ожидание.

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

AZJIO
() автор топика
Последнее исправление: AZJIO (всего исправлений: 2)
Ответ на: комментарий от AZJIO

Тебе видней. Но вижу, ты дважды используешь search, дважды ищешь отвлечённый UUID. Но, на одном разделе может быть несколько конфигов.

search --no-floppy --set --file config_linux1
configfile config_linux1

Если в ‘–set’ не указана переменная, то устанавливается переменная ‘root’. Можно указать любую другую переменную. По хорошему, после search нужно проверить, установлена переменная или нет.

andytux ★★★★★
()
Последнее исправление: andytux (всего исправлений: 1)
Ответ на: комментарий от andytux

ты дважды используешь search

  1. Если первый раз не использовать, то файл не будет найден, а на разделе с Grub2 у меня нет файла-конфига.
  2. Если второй раз не использовать, сменив root, то дальнейшие команды могут что-нибудь не найти в разделе, который не является источником Grub2.

Но, на одном разделе может быть несколько конфигов.

Сделать экпорт переменной export default. Или применить этот же код source в каждом из конфигурационных файлов.

Вот так 1 раз

search --no-floppy --fs-uuid --set=partfile UUID_где_файл
source ${partfile}/b/bootdefitem/def
AZJIO
() автор топика
Последнее исправление: AZJIO (всего исправлений: 4)
Ответ на: комментарий от AZJIO

Я чуть накосячил, потестил, скобки забыл вокруг устройства в переменной. Работает.

search --no-floppy --fs-uuid --set=partfile UUID_где_файл
source (${partfile})/b/bootdefitem/def
AZJIO
() автор топика
Последнее исправление: AZJIO (всего исправлений: 1)
Ответ на: комментарий от andytux

Что-то завышенные характеристики у меня показывает (CachyOC)

systemd-analyze
Startup finished in 31.920s (firmware) + 14.853s (loader) + 9.278s (kernel) + 7.044s (userspace) = 1min 3.096s 
graphical.target reached after 7.044s in userspace.

по факту в 2 раза быстрей.

Mint22 тоже завышено

systemd-analyze
Startup finished in 24.158s (firmware) + 15.124s (loader) + 11.764s (kernel) + 7.757s (userspace) = 58.805s 
graphical.target reached after 7.744s in userspace.

Обновил программку, теперь размер кнопки можно задать и выравнивание текста влево. При отсутствии файла предлагает его создать. В заголовок добавлен текущий номер пукнта загрузки.

AZJIO
() автор топика
Последнее исправление: AZJIO (всего исправлений: 1)
Ответ на: комментарий от AZJIO

31.920s (firmware) - бродит в дебрях твоего конкретного УЕФИ.

14.853s (loader) - похоже держит какой-то таймаут в загрузчике.

9.278s (kernel) - загружается ядро-инитрд, большой размер ядра, низкая скорость HDD, долго распаковывает процессор.

7.044s (userspace) - загрузка собственно системы.

andytux ★★★★★
()
Последнее исправление: andytux (всего исправлений: 1)
Ответ на: комментарий от andytux

низкая скорость HDD

nvme, на флешку 120 мб в сек копирует. Сам на себя 750 Мб в сек, я даже посмотреть еле успеваю, образ 2 гига копирует почти мгновенно.

долго распаковывает процессор.

проц Ruzen 8500, на винде тупит, 6 ядер, 12 виртуальных, одно ядро работает из-за чего на процесс выделяется 8%. В линукс наоборот все ядра работают.

Вот на линукс Вот на винде

AZJIO
() автор топика
Ответ на: комментарий от AZJIO

образ 2 гига копирует почти мгновенно…

…в кеш, когда реально запишет на диск, на воде вилами писано. Для nvme и современного процессора, действительно слишком долго.

Из практики.

andytux ★★★★★
()
Ответ на: комментарий от andytux

Хочешь сказать что он создаёт иллюзию, что записал файл, а на самом деле его нет и читает он ядро линукса как шпидельный диск и поэтому медленный?

Кстати, а почему на флешку он пишет со скоростью 120? Писал бы тоже с 750, какая ему разница на каком устройстве иллюзию создавать?

Кстати, я проверял на винде, а вот линукс действительно имеет такую тенденцию, выделит 2 гига под файл и начинает показывать как бысто он туда пишет файл и первые 5 секунд дойдёт на 90%, потом последние 10% 10 минут длятся.

AZJIO
() автор топика
Последнее исправление: AZJIO (всего исправлений: 3)
Ответ на: комментарий от AZJIO

Никакой иллюзии. Сегодня, ничто, нигде прямо на диск не пишется. Всё через многочисленные буферы-кеши. Да и параметры nvme. Смотреть не только на рекламные «3 Гб в секунду», но и когда кеш заканчивается - «10 Мб в секунду». Флеш - довольно медленное устройство и за последние двадцать лет он быстрее не стал.

andytux ★★★★★
()
Ответ на: комментарий от andytux

Обзор от ИИ У накопителя Samsung 980 1000 ГБ [MZ-V8V1T0BW] используется технология Host Memory Buffer (HMB), а не отдельный кэш-чип. Это означает, что накопитель использует небольшую часть оперативной памяти компьютера в качестве кэша, а не имеет встроенную DRAM-память

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

AZJIO
() автор топика
Последнее исправление: AZJIO (всего исправлений: 2)
Ответ на: комментарий от anonymous

не ожидал что это будет не 64Мб как у шпидельных.

Размер памяти для режима Host Memory Buffer (HMB) не фиксирован и зависит от производителя устройства. Объем HMB может варьироваться от 4 ГБ до 16 ГБ и даже больше, в зависимости от конкретной модели и характеристик накопителя, и используется для ускорения работы системы

AZJIO
() автор топика
Ответ на: комментарий от anc

Да лет 20 назад всякие виртуалбоксы и квеми пробовал,

Неправду говорите, 20 лет назад их не существовало.

Первая версия VirtualBox была выпущена 15 января 2007 года

QEMU была выпущена в 2003 году

Компания VMware была основана в 1998 году, а свой первый продукт VMware Workstation выпустила в 1999

на руборде я уже в то время GUI написал для qemu

AZJIO
() автор топика
Последнее исправление: AZJIO (всего исправлений: 4)
Ответ на: комментарий от AZJIO

Первая версия VirtualBox была выпущена 15 января 2007 года

А сейчас на календаре что-то большее чем 15 января 2027-го ?

QEMU была выпущена в 2003 году

Моя ошибка, не правильно распарсил ваше «квеми», мне показалось что речь про kvm.

на руборде я уже в то время GUI написал для qemu

По ссылке «Зарегистр. 03-05-2006 | Отправлено: 09:43 16-06-2009» КМК даже по дате регистрации на 20 лет не тянет.
PS

Компания VMware была основана в 1998 году, а свой первый продукт VMware Workstation выпустила в 1999

А варю вы зачем на этот глобус натянули?

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 1)
Ответ на: комментарий от anc
  1. Ты действительно считаешь, что в непринуждённом разговоре я должен был вспомнить первый день использования и посчитать на калькуляторе?
  2. Ты действительно думаешь что до руборда меня не существовало в интернет сфере?
AZJIO
() автор топика
Последнее исправление: AZJIO (всего исправлений: 1)
Ответ на: комментарий от AZJIO

Первая версия VirtualBox была выпущена 15 января 2007 года

А сейчас на календаре что-то большее чем 15 января 2027-го ?

Ты действительно считаешь, что в непринуждённом разговоре я должен был вспомнить первый день использования и посчитать на калькуляторе?

Вам для подсчета 2025-2007 нужен калькулятор?

anc ★★★★★
()
Ответ на: комментарий от anc

«лет 20 назад» != «20 лет назад»

Round()

Вам для подсчета 2025-2007 нужен калькулятор?

  1. Ты взял начало года 2007 и конец года 2025. Ну если ты уж занялся точной математикой.
  2. Ты взял удобную дату, а не средний период между двумя датами. Ну если ты уж занялся точной математикой.

Ну так можно и «лет 100 назад» ляпнуть.

Это часто используют чтобы показать давность событий, в чём у тебя истерика-то на идиомы?

Вот мой первый пост на руборде, связан он с тем, что я на BartPE создал LiveCD и встроил туда explorer, и хотелось показать своё творение, а эта тема как раз обсуждение этих сборок. А как известно LiveCD многие тестируют на виртуалке. Это был период а не точная дата на которую ты рассчитываешь.

AZJIO
() автор топика
Последнее исправление: AZJIO (всего исправлений: 3)
Ответ на: комментарий от AZJIO

«лет 20 назад» != «20 лет назад»

Round()

Округление с погрешностью на 1/20 ?

Ты взял начало года 2007 и конец года 2025. Ну если ты уж занялся точной математикой.

А я вам прямо-таки поверил, что вы initial release взяли и давай его и хвост и в гриву гонять.

А как известно LiveCD многие тестируют на виртуалке.

Это логично... сейчас... но не 20 лет назад.

anc ★★★★★
()
Ответ на: комментарий от anc

Потому что твой флуд никому не интересен и его читать будешь только ты, тебе остаётся паразитировать на интересных темах.

которые поверят вашим байкам

если бы я сказал 15 лет, то это было бы 100% байка, ваша, которую вы мне навязываете.

AZJIO
() автор топика
Последнее исправление: AZJIO (всего исправлений: 1)