Рубрики
boot \ grub \ grub2 \ init \ systemd

debian 11 / ubuntu / rs232 / rs-232 / com port / install / установка

Ссылки:

https://teklager.se/en/knowledge-base/installing-debian-over-serial-console-apu-board/

Зависает установка \ установка debian, используем rs-232:

Выбираем нужный пункт меню.
Жмем "TAB" или "e" (зависит от версии grub  uefi /mbr)
Добавляем:
vga=off  console=ttyS0,115200n8
Жмем enter

Включаем rs-232

0. Включаем службу:
sudo systemctl enable serial-getty@ttyS0.service
sudo systemctl start serial-getty@ttyS0.service

1. Редактируем /etc/default/grub:
---------------------------------
...

###GRUB_CMDLINE_LINUX_DEFAULT="quiet"

GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0,115200n8 console=tty1"

GRUB_CMDLINE_LINUX=""

...

GRUB_TERMINAL="serial console"

GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

----------------------------------

2. Применяем изменения

update-grub2

3. Проверяем, перезагружаемся
reboot

add ubuntu 20.04 / 18.04

0. Boot UEFI
1. Press e 
2. Редактируем строку linux:
----------------------------
setparams 'install Ubuntu Server'
set gfxpayload=keep
linux /casper/vmlinuz vga=off console=ttyS0,115200n8 quit ---
initrd /casper/initrd
----------------------------
3. ctrl+x

Рубрики
boot \ grub \ grub2 \ init \ systemd

systemd \ daemon \ timer \ triger \ свой демон \ daemon \ reload

ссылки:

https://systemd.io/
https://www.freedesktop.org/wiki/Software/systemd/
https://www.freedesktop.org/software/systemd/man/systemd.service.html
https://manpages.ubuntu.com/manpages/xenial/en/man5/systemd.service.5.html

https://habr.com/ru/post/535872/
https://habr.com/ru/post/535930/
https://habr.com/ru/post/536040/

https://t.me/ru_systemd


https://linux-notes.org/pishem-systemd-unit-fajl/
https://wiki.archlinux.org/title/Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)
https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units-ru
https://habr.com/ru/company/southbridge/blog/255845/
https://medium.com/@benmorel/creating-a-linux-service-with-systemd-611b5c8b91d6


https://habr.com/ru/post/540096/ - rastic

daemon / service

Помощь:
man systemd.unit
man systemd.service
man systemd.exec
man systemctl
man sysusers.d
man systemd-sysusers


/usr/lib/systemd/system/ – юниты из установленных пакетов RPM — всякие nginx, apache, mysql и прочее
/run/systemd/system/ — юниты, созданные в рантайме — тоже, наверное, нужная штука
/etc/systemd/system/ — юниты, созданные системным администратором — а вот сюда мы и положим свой юнит.
Юнит представляет из себя текстовый файл с форматом, похожим на файлы .ini Microsoft Windows.


/etc/systemd/system/NAME-UNIT.service - расположение юнита NAME-UNIT
/etc/sysusers.d/NAME-UNIT.conf - расположение конфига NAME-UNIT (не обязательный файл)


Пример простого юнита MyUnit:
vim  /etc/systemd/system/myunit.service
-----------------------------------------
[Unit]
#описание юнита
Description=MyUnit

#Запускать юнит после какого-либо сервиса или группы сервисов        
After=syslog.target
After=network.target
After=nginx.service
After=mysql.service

#Для запуска сервиса необходим запущенный сервис mysql
Requires=mysql.service

#Для запуска сервиса желателен запущенный сервис redis
Wants=redis.service

[Service]
#Тип сервиса (Type=simple, Type=forking)
Type=forking

#Определить PIDFile=, чтобы systemd могла отслеживать основной процесс  (не обязательный)
PIDFile=/work/www/myunit/shared/tmp/pids/service.pid

#Рабочий каталог, он делается текущим перед запуском стартап команд  (не обязательный)
WorkingDirectory=/work/www/myunit/current

#Пользователь и группа, под которым надо стартовать сервис:
User=myunit
Group=myunit

#Переменные окружения (не обязательный)
Environment=RACK_ENV=production

#логи
SyslogIdentifier=MyUnit
SyslogFacility=daemon

#Запрет на убийство сервиса вследствие нехватки памяти и срабатывания механизма OOM
OOMScoreAdjust=-1000

#Команды на старт/стоп и перезапуск сервиса
ExecStart=/usr/local/bin/bundle exec service -C /work/www/myunit/shared/config/service.rb --daemon
ExecStop=/usr/local/bin/bundle exec service -S /work/www/myunit/shared/tmp/pids/service.state stop
ExecReload=/usr/local/bin/bundle exec service -S /work/www/myunit/shared/tmp/pids/service.state restart

#Таймаут в секундах, сколько ждать system отработки старт/стоп команд
TimeoutSec=300

#Попросим systemd автоматически рестартовать наш сервис, если он вдруг перестанет работать
Restart=always
RestartSec=5
Restart=on-failure


[Install]
#В секции [Install] опишем, в каком уровне запуска должен стартовать сервис
WantedBy=multi-user.target 
-----------------------------------------


Директива Type= может быть одной из следующих:
Type=simple 
Основной процесс службы указан в стартовой строке. 
Это значение по умолчанию, если директивы Type= и Busname= не установлены, но установлен ExecStart=. 
Любое сообщение должно обрабатываться вне устройства через второй блок соответствующего типа (например, через блок .socket, если эта служба должна обмениваться данными с помощью сокетов).

Type=forking 
Этот тип службы используется, когда служба форкает дочерние процессы при мгновенном покидании родительского процесса.
Это сообщает systemd, что процесс все еще работает, даже несмотря на то, что родитель завершил сеанс.
Хорошо подходит, например для запуска php-fpm, nginx, tomcat.

Type=oneshot
Этот тип указывает, что процесс будет недолговечным и система должна ждать завершения процесса, прежде чем продолжить работу с другими устройствами.
Значение по умолчанию для Type= и ExecStart= не установлены. 
Он используется для одноразовых задач.

Type=dbus
Это означает, что устройство будет использовать имя от D-Bus шины.
Когда это произойдет, systemd продолжит обработку следующего блока.

Type=notify
Это указывает на то, что служба отправит уведомление, когда закончит запуск. 
Процесс systemd будет ждать, пока это произойдет, прежде чем переходить к другим устройствам.

Type=idle
Это означает, что служба не будет запущена до тех пор, пока не будут отправлены все задания.


multi-user.target или runlevel3.target соответствует нашему привычному runlevel=3"Многопользовательский режим без графики". 
Пользователи, как правило, входят в систему при помощи множества консолей или через сеть

 



После изменения\добавления файла юнита необходимо:
systemctl daemon-reload - перечитать демоны
systemctl enable  NAME-UNIT - добавить в автозагрузку
systemctl start NAME-UNIT - запустить
systemctl -l status NAME-UNIT - проверить
systemctl --state=failed - показать сбойные юниты

Приме пример демона из документации:

[Unit]
Description=Simple notifying service

[Service]
Type=notify
ExecStart=/usr/sbin/simple-notifying-service

[Install]
WantedBy=multi-user.target

timer \ замена cron

Помощь:
man systemd.timer
man systemd.time
man systemd-system.conf
man systemd-analyze
man tzselect

Пример из поставки systemd:
cat /usr/lib/systemd/system/man-db.timer
----------------------------------------
[Unit]
Description=Daily man-db regeneration
Documentation=man:mandb(8)

[Timer]
OnCalendar=daily
AccuracySec=12h
Persistent=true

[Install]
WantedBy=timers.target
----------------------------------------
Простой, коротенький таймер.
Почему не указано что мы запускаем? Всё нормально! 
По умолчанию, если в секции [Timer] отсутствует параметр Unit=, с указанием запускаемого юнита, systemd будет искать одноимённый *.service юнит.


Проверяем что делает:
cat /usr/lib/systemd/system/man-db.service
------------------------------------------
[Unit]
Description=Daily man-db regeneration
Documentation=man:mandb(8)
ConditionACPower=true

[Service]
Type=oneshot
# Recover from deletion, per FHS.
ExecStart=+/usr/bin/install -d -o root -g root -m 0755 /var/cache/man
# Expunge old catman pages which have not been read in a week.
ExecStart=/usr/bin/find /var/cache/man -type f -name *.gz -atime +6 -delete
# Regenerate man database.
ExecStart=/usr/bin/mandb --quiet
User=root
Nice=19
IOSchedulingClass=idle
IOSchedulingPriority=7
------------------------------------------

Сервис стартует начиная с 00:00 (OnCalendar=daily) , с точностью 12 часов (AccuracySec=12h),
то-есть он может сработать в любой момент между полуночью и полднем, в зависимости от загрузки системы
systemctl status man-db.timer  - проверяем состояне



Событийные таймеры
Таймеры привязанные к каким-либо событиям в системе.
OnBootSec=
Таймер сработает через указанное время после старта системы.

OnStartupSec= 
Для системных таймеров действие аналогично предыдущему, для пользовательских таймеров, это время после первого логина пользователя в систему.

OnActiveSec=
Через какое время, после активации таймера системным менеджером, запускать юнит

RandomizedDelaySec= 
Этакий рандомный джиттер. 
Перед срабатыванием добавляется случайный таймаут от нуля, до заданного значения. 
По умолчанию -- отключено.

FixedRandomDelay= 
Связанный с предыдущим параметром булевый параметр. 
Если включено, то при первом срабатывании таймера, джиттер запомнится (и для этого таймера станет постоянным), но запомнится хитро. 
Сама генерация рандома будет основана на имени пользователя, имени таймера, а самое главное MachineID, 
о котором будет рассказано в одной из следующих статей и который гарантированно разный, на разных хостах. 
Для чего это нужно? Например имеем сеть с кучей хостов, которые, например в начале рабочего дня, запускают таймеры, юниты которых ломятся на сервер, устраивая шторм запросов. 
Что-бы таймеры гарантированно срабатывали в разное время и следует использовать этот параметр.

OnClockChange=, OnTimezoneChange=
Булевые параметры, определяющие будет ли таймер реагировать на перевод системных часов или смену временной зоны. 
По умолчанию, оба параметра, false.

Persistent= 
Записывать-ли на диск состояние таймера сразу после запуска юнита. 
Актуально для параметра OnCalendar=.
По умолчанию — false.

WakeSystem=
Действует на монотонные таймеры. 
По умолчанию отключён. 
Логика следующая. 
При отключённом параметре все монотонные таймеры запоминают своё состояние, перед уходом системы в спящий режим и встают на паузу. 
После выхода системы из спящего режима, отсчёт продолжается с того момента с которого система "ушла в спячку". 
Если-же параметр поставить в true, то таймеры продолжают работать и в спящем режиме (должно поддерживаться и железом) 
и по наступлении события выводят систему из спячки и запускают юнит.

RemainAfterElapse= 
По умолчанию true.
Смысл этого параметра примерно следующий, после срабатывания таймера он остаётся загруженным, но если поставить false, 
то после срабатывания таймер выгружается и перестаёт отслеживать время. 
Хорошо для одноразовых юнитов (Transient Units) о которых мы поговорим в одной из следующих статей. 
Или для таймеров которые должны сработать один раз, как это делают задания старой, доброй at.


Примеры таймеров

Самый простой таймер:
---------------------
#задача запуска сервиса раз в полтора часа, начиная с часа ночи
[Unit]
Description=Test timer

[Timer]
OnCalendar=01:00
OnUnitActiveSec=1.5h
---------------------

Например мы хотим что-б наш юнит запускался каждую пятницу 13-е… 
OnCalendar=Fri *-*-13 12:00:00

Полный формат календарной формы выглядит так: 
Mon 2025-12-01 12:00:00.000000 Europe/Moscow

Камчатка уже отпраздновала Новый год: 
OnCalendar=yearly Asia/Kamchatka 

Нормализованная форма будет выглядеть так (эти строчки указывают на одно и то-же время):
OnCalendar=*-01-01 00:00:00 Asia/Kamchatka


Проверять таймстампы на валидность можно при помощи утилиты systemd-analyze
systemd-analyze calendar 'Mon *-12-01/1'
systemd-analyze timespan 1.5h
systemd-analyze timestamp 01:00:30.9999

Посмотреть все таймеры в системе: 
systemctl list-timers

triger

Помощь:
man systemd.path
man 7 inotify
man inotifywait
man inotifywatch
man systemd.automount
man systemd.mount
man systemd-mount
man 5 fstab
man systemd.time



Пример запуск скрипта с таймером:

vim /etc/systemd/system/sctipt-test.service 
-------------------------------------------
[Unit]
Description=sctipt-test
 
[Service]
Type=oneshot
ExecStart=/usr/bin/sctipt-test.sh
Restart=on-failure
 
[Install]
WantedBy=multi-user.target
-------------------------------------------

vim /etc/systemd/system/sctipt-test.timer
----------------------------------------- 
# Каждые 30 сек запуск скрипта
[Unit]
Description=sctipt-test
 
[Timer]
OnUnitActiveSec=30 

[Install]
WantedBy=timers.target
----------------------------------------- 

systemctl daemon-reload
systemctl enable sctipt-test.service
systemctl enable sctipt-test.timer
systemctl status sctipt-test.service
systemctl status sctipt-test.timer

systemctl list-timers 
systemctl list-timers sctipt-test.timer
Рубрики
boot \ grub \ grub2 \ init \ systemd

systemd / factorio

vim  /etc/systemd/system/factoria.service
-----------------------------------------
[Unit]
  Description= Game factorio
  After=network.target
[Service]
# ExecStart=/home/factoria/game/bin/x64/factorio --start-server 1.zip
# ExecStart=/home/factoria/game/start_game.sh   
# Type=idle

   Type=forking
   KillMode=process

  SyslogIdentifier=factorio
  SyslogFacility=daemon

  User=factoria
  Group=factoria
[Install]
  WantedBy=multi-user.target

-----------------------------------------

systemctl daemon-reload

systemctl enable factorio
systemctl start factorio



vim start_game.sh
-----------------
/home/factoria/game/bin/x64/factorio --start-server 1.zip
-----------------

0. Запуск:
#для windows
Factorio.exe --start-server ВАШЕСОХРАНЕНИЕ.zip
#для linux
factorio/bin/x64/factorio --start-server world.zip

bin/x64/factorio --start-server 1.zip


1. Последние версии тут:
https://www.factorio.com/download

2. Сейвы игры на windows тут
%appdata%\Factorio

3. Посмотреть используемые библиотеки

Дистрибутив

wget https://factorio.com/get-download/stable/headless/linux64
/home/factoria/game/ - каталог с файлами игры
/home/factoria/game/config - каталог с конфигом

vim /home/factoria/game/config/config.ini 
-----------------------------------------
; version=9
; This is INI file : https://en.wikipedia.org/wiki/INI_file#Format
; Semicolons (;) at the beginning of the line indicate a comment. Comment lines are ignored.
[path]
read-data=/home/factoria/game/data
write-data=/home/factoria/game/

[general]
locale=

[other]
; Options: true, false
; verbose-logging=false

; Options: true, false
; log-saving-statistics=false

autosave-interval=30

autosave-slots=10

; In ticks
; minimum-latency-in-multiplayer=0

; In seconds
; multiplayer-initial-connection-timeout=10

; Maximum connection attempts within a 60 second window from the same IP::PORT before more are ignored.
; multiplayer-max-connection-attempts-per-peer=130

; port=34197

; max-map-preview-chunk-side=64

; max-map-preview-threads=1

; In bytes
; max-multiplayer-script-reload-size=1048576

; Options: true, false
; enable-steam-networking=true

; proxy=

; proxy-username=

; proxy-password=

; Options: true, false
; check-updates=true

; Options: true, false
; enable-experimental-updates=false

; Options: true, false
; enable-new-mods=true

; Options: true, false
; use-mod-settings-per-save=true

; Options: true, false
; disable-minimal-mode=false

; Options: true, false
; disable-blueprint-storage=false

; Disables tracking which mod created/changed what prototype. Mainly for faster startup during development.
;
; Options: true, false
; disable-prototype-history=false

; Print a warning for all prototype values that were not accessed.
;
; Options: true, false
; check-unused-prototype-data=false

; Cache data stage prototype data for faster startup. Experimental.
;
; Options: true, false
; cache-prototype-data=false

; Options: true, false
; enable-razer-chroma-support=true

; Options: true, false
; enable-logitech-led-support=true

; Options: true, false
; enable-steelseries-gamesense-support=true

; Options: true, false
; enable-crash-log-uploading=true

; Options: true, false
; enable-heap-validation=true

; Options: true, false
; enable-threaded-message-pump=true

; Options: true, false
; enable-taskbar-animation=true

; Does nothing on Windows
;
; Options: true, false
; non-blocking-saving=false

; Related to MacOS
;
; Options: true, false
; discard-mouse-events-when-accessibility-zoomed=false

; Options: true, false
; enable-blueprint-storage-cloud-sync=false

; Options: true, false
; enable-mod-settings-load-save-confirmation=true

; Options: true, false
; force-enable-factorio-version-check=false

; Options: true, false
; bring-window-to-top-on-click=true

; Options: true, false
; allow-manual-autosaves=false

; Options: fast, maximum
; multiplayer-compression-level=fast

; Options: none, fast, maximum
; autosave-compression-level=fast

; max-save-compression-threads=1

; Socket to host RCON on when lauching MP server from the menu.
; local-rcon-socket=0.0.0.0:0

; Password for RCON when launching MP server from the menu.
; local-rcon-password=

; Disables shelf synchronization when loading a save file allowing to extract blueprints from the save file
;
; Options: true, false
; bypass-library-sync=false


[interface]
; Options: true, false
; automatic-ui-scale=true

; custom-ui-scale=1.000000

; tooltip-delay=0.040000

; entity-tooltip-delay=0.000000

; tooltip-offset=20

; output-console-delay=1200

; train-stop-label-angle=0.085526

; active-quick-bars=2

; shortcut-bar-rows=2

; Options: true, false
; autosort-inventory=true

; Options: true, false
; research-finished-stops-game=false

; Options: true, false
; use-item-groups=true

; Options: true, false
; use-item-subgroups=true

; Options: true, false
; use-version-filter-in-browse-games-gui=true

; Options: true, false
; use-version-filter-in-install-mods-gui=true

; Options: true, false
; check-enable-replay-checkbox=false

; Options: true, false
; play-sound-for-chat-messages=true

; Options: true, false
; fuzzy-search-enabled=false

; Options: true, false
; pick-ghost-cursor=false

; Options: true, false
; show-all-items-in-selection-lists=false

; Options: true, false
; lock-belt-building-to-straight-line=true

; Options: true, false
; smart-belt-dragging=true

; Options: true, false
; change-quickbar-by-clicking-with-item=false

; Options: true, false
; show-minimap=true

; Options: true, false
; show-tips-and-tricks-notifications=true

; Options: true, false
; show-turret-radius-when-blueprinting=false

; Options: true, false
; show-item-labels-in-cursor=true

; Options: true, false
; show-rail-block-visualization=true

; Options: true, false
; show-missing-logistic-network-icon=true

; Options: true, false
; show-interaction-indications=true

; Options: true, false
; show-grid-when-paused=true

; Options: true, false
; flat-character-gui=true

; Options: true, false
; enable-recipe-notifications=true

; Options: true, false
; tool-window-next-to-quickbar=false

; Options: true, false
; show-inserter-arrows-when-selected=true

; Options: true, false
; show-inserter-arrows-when-detailed-info-is-on=false

; Options: true, false
; show-pump-arrows-when-detailed-info-is-on=true

; Options: true, false
; show-mining-drill-arrows-when-detailed-info-is-on=true

; Options: true, false
; show-combinator-settings-when-detailed-info-is-on=false

; Options: true, false
; show-beacon-modules-in-alt-mode=false

; Options: true, false
; entity-tooltip-on-the-side=true

; Options: true, false
; show-mod-owners-in-tooltips=true

; Options: true, false
; show-descriptions-in-tooltips=true

; Options: true, false
; show-total-raw-in-recipe-tooltips=true

; debug-font-size=18

; train-visualization-length=5


[sound]
; master-volume=0.950000

; music-volume=0.600000

; game-effects-volume=0.900000

; gui-effects-volume=0.800000

; walking-sound-volume=0.450000

; environment-sounds-volume=0.900000

; alerts-volume=0.700000

; wind-volume=0.900000

; simulation-volume=0.350000

; audible-distance=40.000000

; environment-audible-distance=30.000000

; maximum-environment-sounds=50

; active-gui-volume-modifier=0.800000

; active-gui-environment-volume-modifier=0.400000

; The maximum volume allowed for any sound.
; maximum-volume=1.000000

; ambient-music-pause-mean-seconds=45.000000

; ambient-music-pause-variance-seconds=30.000000

; Options: main-tracks-only, interleave-main-tracks-with-interludes, randomize-all, main-menu
; ambient-music-mode=interleave-main-tracks-with-interludes

; zoom-audible-distance-coefficient=0.500000

; zoom-volume-coefficient=0.750000

; Options: default, sdl
; audio-backend=default

; Options: point, linear, cubic
; default-mixer-quality=linear

; primary-voice-frequency=44100

; primary-voice-depth=16


[map-view]
; Options: true, false
; show-logistic-network=false

; Options: true, false
; show-electric-network=false

; Options: true, false
; show-turret-range=false

; Options: true, false
; show-pollution=true

; Options: true, false
; show-networkless-logistic-members=false

; Options: true, false
; show-train-station-names=true

; Options: true, false
; show-player-names=true

; Options: true, false
; show-tags=true

; Options: true, false
; show-worker-robots=false

; Options: true, false
; show-rail-signal-states=false

; Options: true, false
; show-recipe-icons=false

; Options: true, false
; show-non-standard-map-info=false


[debug]
; force=enemy

; Options: true, false
; capture-perf-statistics=false

; Options: always, debug, never
; show-fps=never

; Options: always, debug, never
; show-detailed-info=never

; Options: always, debug, never
; show-time-usage=never

; Options: always, debug, never
; show-entity-time-usage=never

; Options: always, debug, never
; show-gpu-time-usage=never

; Options: always, debug, never
; show-sprite-counts=never

; Options: always, debug, never
; show-lua-object-statistics=never

; Options: always, debug, never
; show-heat-buffer-info=never

; Options: always, debug, never
; show-multiplayer-waiting-icon=never

; Options: always, debug, never
; show-multiplayer-statistics=never

; Options: always, debug, never
; show-multiplayer-selection-rectangles=never

; Options: always, debug, never
; show-debug-info-in-tooltips=never

; Options: always, debug, never
; show-resistances-in-tooltips-always=never

; Options: always, debug, never
; hide-mod-guis=never

; Options: always, debug, never
; show-tile-grid=debug

; Options: always, debug, never
; show-blueprint-grid=never

; Options: always, debug, never
; show-collision-rectangles=never

; Options: always, debug, never
; show-selection-rectangles=never

; Options: always, debug, never
; show-render-rectangles=never

; Options: always, debug, never
; show-sticker-boxes=never

; Options: always, debug, never
; show-entity-positions=never

; Options: always, debug, never
; show-entity-velocities=never

; Options: always, debug, never
; show-selected-entity-advanced-tiles=never

; Options: always, debug, never
; show-selected-input-transport-belts=never

; Options: always, debug, never
; show-paths=never

; Options: always, debug, never
; show-path-requests=never

; Options: always, debug, never
; show-next-waypoint-bb=never

; Options: always, debug, never
; show-target=never

; Options: always, debug, never
; show-unit-group-info=never

; Options: always, debug, never
; show-unit-behavior-info=never

; Options: always, debug, never
; show-pathfinder-fringe=never

; Options: always, debug, never
; show-path-cache=never

; Options: always, debug, never
; show-path-cache-paths=never

; Options: always, debug, never
; show-rail-paths=never

; Options: always, debug, never
; show-rolling-stock-count=never

; Options: always, debug, never
; show-rail-connections=never

; Options: always, debug, never
; show-rail-joints=never

; Options: always, debug, never
; show-rail-segment-collision-boxes=never

; Options: always, debug, never
; show-train-stop-point=never

; Options: always, debug, never
; show-train-braking-distance=never

; Options: always, debug, never
; show-train-signals=never

; Options: always, debug, never
; show-train-repathing=never

; Options: always, debug, never
; show-network-connected-entities=never

; Options: always, debug, never
; show-circuit-network-numbers=never

; Options: always, debug, never
; show-energy-sources-networks=never

; Options: always, debug, never
; show-active-state=never

; Options: always, debug, never
; show-wakeup-lists=never

; Options: always, debug, never
; show-transport-lines=never

; Options: always, debug, never
; show-transport-line-gaps=never

; Options: always, debug, never
; show-pollution-values=never

; Options: always, debug, never
; show-active-entities-on-chunk-counts=never

; Options: always, debug, never
; show-active-chunks=never

; Options: always, debug, never
; show-polluted-chunks=never

; Options: always, debug, never
; hide-chart-tags=never

; Options: always, debug, never
; show-enemy-expansion-candidate-chunks=never

; Options: always, debug, never
; show-enemy-expansion-candidate-chunk-values=never

; Options: always, debug, never
; show-bad-attack-chunks=never

; Options: always, debug, never
; show-tile-variations=never

; Options: always, debug, never
; show-raw-tile-transitions=never

; Options: always, debug, never
; show-fluid-box-fluid-info=never

; Options: always, debug, never
; show-environment-sound-info=never

; Options: always, debug, never
; show-environment-sound-area=never

; Options: always, debug, never
; show-selected-entity-audible-range=never

; Options: always, debug, never
; show-recently-played-sound-info=never

; Options: always, debug, never
; show-logistic-robot-targets=never

; Options: always, debug, never
; show-spidertron-movement=never

; Options: always, debug, never
; show-player-robots=never

; Options: always, debug, never
; show-fire-info=never

; Options: always, debug, never
; show-sticker-info=never

; Options: always, debug, never
; show-decorative-names=never

; Options: always, debug, never
; show-decorative-collision-rectangles=never

; Options: always, debug, never
; allow-increased-zoom=never

; Options: always, debug, never
; show-chunk-components=never


[multiplayer-lobby]
; name=

; description=

; Options: true, false
; visibility-public=true

; Options: true, false
; visibility-steam=true

; Options: true, false
; visibility-lan=true

; max-players=0

; Options: true, false
; ignore-player-limit-when-returning=false

; max-upload-in-kilobytes-per-second=0

; max-upload-slots=5

; password=

; tag-list=

; afk-auto-kick=0

; Options: true, false, admins-only
; allowed-commands=admins-only

; Options: true, false
; only-admins-can-pause=true

; Options: true, false
; autosave-only-on-server=true

; Options: true, false
; non-blocking-saving=true

; Options: true, false
; verify-user-identity=true

; Options: true, false
; enable-whitelist=false


[graphics]
; lights-render-quality=0.250000

; Default preferred display index should force finding primary monitor
; preferred-display-index=255

; screenshots-threads-count=2

; cache-sprite-atlas-count=1

; Options: true, false
; cache-sprite-atlas=false

; Options: true, false
; compress-sprite-atlas-cache=false

; Options: true, false
; texture-streaming=true

; streamed-atlas-physical-vram-size=0

; sprite-vertex-buffer-size=1048576

; max-texture-size=0

; max-threads=2

; 'low' and 'very-low' options are deprecated and will be migrated to 'normal'
;
; Options: high, normal, low, very-low
; graphics-quality=normal

; brightness=0

; contrast=0

; saturation=100

; color-filter=

; Options: true, false
; full-screen=true

; Options: true, false
; minimize-on-focus-loss=false

; Options: true, false
; show-smoke=true

; Options: true, false
; show-clouds=true

; Options: true, false
; show-decoratives=true

; Options: true, false
; show-particles=true

; Options: true, false
; show-item-shadows=true

; Options: true, false
; show-inserter-shadows=true

; Options: true, false
; show-animated-water=true

; Options: true, false
; show-tree-distortion=true

; Options: true, false
; force-opengl=false

; Options: true, false
; v-sync=true

; Options: true, false
; high-quality-animations=true

; Options: true, false
; high-quality-shadows=false

; Options: true, false
; high-quality-terrain=true

; Options: true, false
; show-game-simulations-in-background=true

; Minimum number of turrets required to turn on the turret range overdraw optimization
; turret-overdraw-minimum-count=4

; Scale at which the turret range overdraw optimization will start being applied
; turret-overdraw-scale-threshold=0.200000

; Options: true, false
; skip-vram-detection=false

; Options: true, false
; halt-rendering-when-minimized=true

; Options: true, false
; runtime-sprite-reload=false

; Options: true, false
; full-color-depth=true

; Options: true, false
; render-in-native-resolution=true

; Options: true, false
; use-flip-presentation-model=false

; Options: true, false
; debug-api=false

; Options: true, false
; discard-buffers-on-begin-frame=true

; Options: all, high, medium, low
; video-memory-usage=high

; Options: none, high-quality, low-quality
; texture-compression-level=high-quality

; Options: true, false
; compress-virtual-atlas=true

; Options: copy, copy-sequential, flip, flip-discard
; dxgi-presentation-model=copy

; Options: none, flush, wait-for-vblank, flush-and-wait-for-vblank
; dxgi-action-before-present=none

; relevant only for flip presentation models
;
; Options: true, false
; dxgi-allow-tearing=false

; Options: false, true, auto
; dxgi-flip-do-not-wait=false

; Options: true, false
; dxgi-present-restart=false

; dxgi-swap-chain-buffer-count=0

; dxgi-max-frame-latency=0

; dxgi-adapter-index=-1

; max-sprite-loading-threads=32

; Options: true, false
; gpu-accelerated-compression=true

; Options: true, false
; gpu-accelerated-mipmap-compression=true

; Options: true, false
; wait-until-mipmap-generation-finished=true

; Options: true, false
; check-for-unused-pixels=false

; ogl-depth-buffer-bit-depth=0

; Options: false, true, auto
; ogl-accelerated-renderer=auto

; Options: true, false
; ogl-double-buffered=true

; Set to true if mipmapped sprites render very blurry on your GPU. Limited support.
;
; Options: true, false
; legacy-gpu-no-mipmaps=false

; Options: true, false
; force-linear-magnification=false

; Options: true, false
; custom-mipmap-workaround=false

; Options: true, false
; buffer-rename-workaround=false

; Comma separated list of OpenGL extensions that should not be used (for example: ARB_copy_image,KHR_debug)
; disabled-opengl-extensions=


-----------------------------------------
Рубрики
boot \ grub \ grub2 \ init \ systemd

Ventoy / boot ISO

Ссылки

https://github.com/ventoy/Ventoy
https://github.com/ventoy/Ventoy/releases

https://www.ventoy.net/en/download.html - 
https://www.ventoy.net/en/doc_linux_webui.html

Как легко создать загрузочную флешку с помощью Ventoy

Что?:

ventoy - программа для создания загрузочной флешки, которая позволяет загружаться с iso файла

Windows:

https://github.com/ventoy/Ventoy/releases
https://github.com/ventoy/Ventoy/releases/download/v1.0.46/ventoy-1.0.46-windows.zip

Linux ventoy WebGUI:

!!! https://github.com/ventoy/Ventoy/releases
!!! Похож на интерфейс windows программы
Запускаем:
sudo sh VentoyWebDeepin.sh

Открываем в браузере по умолчанию:
http://127.0.0.1:24680

Остановка:
CTRL + C 

Запуск с специальными параметрами:
sudo sh VentoyWeb.sh -H 192.168.0.100 -P 8080

Linux ventoy bash:

!!! https://github.com/ventoy/Ventoy/releases
!!! https://github.com/ventoy/Ventoy/releases/download/v1.0.46/ventoy-1.0.46-linux.tar.gz

Проверяем какие есть диски:
sudo fdisk -l 
sudo parted -l

Примеры создания флешки:
sudo ./Ventoy2Disk.sh -i /dev/sdX
sudo ./Ventoy2Disk.sh -i -s /dev/sdX
sudo ./Ventoy2Disk.sh -g -i -s /dev/sdX
Рубрики
boot \ grub \ grub2 \ init \ systemd

Debian \ 9 \ 10 \ 11 \ синхронизации времени \ systemd \ systemd-timesyncd \ ntp

systemctl start systemd-timesyncd  - запустить демон  systemd-timesyncd
systemctl enable systemd-timesyncd - добавить в автозапуск

systemctl status systemd-timesyncd - проверить текущее состояние демона
systemctl restart systemd-timesyncd - перезапуск
journalctl -u systemd-timesyncd --since today - посмотреть лог на сегодня для демона systemd-timesyncd

systemctl stop systemd-timesyncd - остановить
systemctl disable systemd-timesyncd - отключит автозапуск

конфиг:

nano /etc/systemd/timesyncd.conf
--------------------------------
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See timesyncd.conf(5) for details.
 
[Time]
NTP=kom-dc01.holding.com kom-dc02.holding.com
#FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org
--------------------------------
Рубрики
boot \ grub \ grub2 \ init \ systemd

runlevel

runlevel - уровень инициализации. 6 шт
0 - выключение (init 0) 
1 - однопользовательский режим
2,3,4 - настраиваемый режим
5 - графический режим
6 - перезагрузка 

Рубрики
boot \ grub \ grub2 \ init \ systemd

upstart инициализация (Ubuntu)

Upstart оперирует понятиями служба (service), поддерживаемая в постоянном режиме работы,
и задача (task), выполняющаяся разово.
В процессе инициализации upstart считывает настройки из файлов конфигурации (заданий - jobs) в каталоге /etc/init/.
Уровень инициализации по умолчанию указывается в файле /etc/init/rc-sysinit.conf

initctl start networking - запустить службу сети
initctl list - вывести перечень служб
initctl show-config - показать конфиг upstart
initctl check-config  - проверить конфиг upstart

wall “текст_сообщения” - оповещение пользователей

status apache2 - состояние службы apache2
stop apache2 - остановить apache2
start apache2 - запустить apache2 

Рубрики
boot \ grub \ grub2 \ init \ systemd

grub пример загрузки cli grub

Для efi:

grub> set root=hdX,Y
grub> chainloader /EFI/Microsoft/Boot/bootmgfw.efi
grub> boot

Для mbr:

grub> set root=hdX,Y
grub> ntldr /bootmgr
grub> boot

Вручную вводим команды GRUB для запуска Linux:

Если GRUB удастся запустить, но после выбора Linux из меню GRUB саму операционную систему запустить не получается, 
ТО можно, нажав клавишу С, перейти в меню GRUB в интерактивный режим, а затем выполнить следующие команды:
grub> set root=(hd0,1)
grub> linux /vmlinuz root=/dev/sdal
grub> initrd /initrd.img
grub> boot

Вместо (hd0.l) и /dev/sdal задайте имя вашего системного раздела с Linux. 
В большинстве дистрибутивов файлы /vmlinuz и /initrd. 
img указывают на новейшую версию ядра и файла Initrd. 
Эти файлы находятся в каталоге /boot. 
Если в вашем случае это не так, нужно точно задать местоположение ядра и Initrd-файла. 
GRUB обеспечивает при этом функцию автозавершения, оно выполняется клавишей Tab.

efibootmgr

efibootmgr
efibootmgr -n 5
efibootmgr -о 5
efibootmgr -с -1 \\EFI\\test\\abc.efi  -L abc
Рубрики
boot \ grub \ grub2 \ init \ systemd

grub как настроить запуск ос по умолчанию

0. Редактируем файл настроек grub2
nano  /etc/default/grub
1. Ищем строку GRUB_DEFAULT=0  - устанавливает запись для запуска по умолчанию 
                                 (Первая запись под номером 0, вторая - под 1 и так далее.)
2. После любых изменений файла настроек  grub требуется выполнить update-grub.
update-grub - применит настройки 
Рубрики
boot \ grub \ grub2 \ init \ systemd

grub файлы из каталога /etc/grub.d/

00_header	  Основные настройки GRUB
05_debian_theme	  Цветовое оформление меню (только в Debian и Ubuntu)
lOJinux	          Записи меню для запуска актуального дистрибутива
20_linux_xen	  Записи меню для запуска виртуальных машин
20_mem:est86+	  Запись меню для запуска Memtest86 (только в Debian и Ubuntu)
30_os-prober	  Записи меню для запуска других операционных систем
40_custom	  Шаблон для собственных конфигурационных файлов
41_custom	  Добавление в grub.cfg код из custom.cfg
Рубрики
boot \ grub \ grub2 \ init \ systemd

grub на флешке /boot/grub/grub.cfg

insmod vbe
set timeout=30
loadfont /boot/grub/themes/dejavu_16.pf2
gfxpayload='1024x768,800x600,640x480'
set lang=ru_RU
set theme=/boot/grub/themes/volchara/win_menu.txt
terminal_output gfxterm
insmod chain
insmod loopback
insmod part_gpt
insmod jpeg
insmod png
insmod gzio
insmod part_msdos
insmod ext2
insmod fat
insmod ntfs
insmod iso9660
insmod xfs

#root - это переменная, которая говорит, какая файловая система считается основной. 
#chainloader +1 - вызывает загрузчик устройства root


#MICROSOFT
menuentry "Установка Windows 7/8/8.1/10 (MSDaRT Full) x64bit" --class win {
search --set -f /efi/microsoft/x64/erdc/bootx64.efi
chainloader /efi/microsoft/x64/erdc/bootx64.efi
}

#STRELEC
menuentry "WinPE by Xemom1 and Sergei Strelec x64bit" --class winpe1 {
search --set -f /efi/microsoft/x64/winpe/bootx64.efi
chainloader /efi/microsoft/x64/winpe/bootx64.efi
}

#Возврат в меню#
menuentry "Вернуться в главное меню" --class nazad {
search --set -f /boot/grub/grub.cfg
configfile /boot/grub/grub.cfg
}

#Загрузиться с диска 1
menuentry 'boot from hd1' {
set root=hd1
chainloader +1
}

#Загрузить с Windows 7
menuentry "Windows 7" {
search -s root --file /bootmgr
ntldr /bootmgr
}

#Загрузить с Windows 8
menuentry "Windows 8 UEFI" {
  search --file --no-floppy --set=root /efi/Microsoft/Boot/bootmgfw.efi
  chainloader /efi/Microsoft/Boot/bootmgfw.efi
}

#загрузка разных видов Linux'а:
menuentry "Arch Linux" {
 linux /boot/vmlinuz-linux root=LABEL=Arch_root rw
 initrd /boot/initramfs-linux.img
}

#загрузка iso
menuentry "<Название пункта меню>" { 
    set isofile="<Полный путь к файлу iso>"
    loopback loop <Загрузочный раздел>$isofile 
    <Дополнительные параметры (kernel, initrd,...)>
}

#загрузка iso
menuentry 'ISO Ubuntu ' {
set isofile="/iso/ubuntu-12.04-desktop-amd64.iso"
loopback loop (hd0,5)$isofile
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
initrd (loop)/casper/initrd.lz
}

#Загрузка  GParted 
menuentry "GParted Live CD i486" { 
    set isofile="/boot/iso/gparted-live-0.18.0-1-i486.iso" 
    loopback loop (hd0,1)$isofile 
    loopback loop $isofile 
    linux (loop)/live/vmlinuz boot=live config union=aufs noswap noprompt ip=frommedia toram=filesystem.squashfs findiso=${isofile} 
    initrd (loop)/live/initrd.img 
}

#Tails
menuentry "Tails 1.5 i386" { 
    set isofile="/boot/iso/tails-i386-1.5.iso" 
    loopback loop (hd0,1)$isofile 
    loopback loop $isofile 
    linux (loop)/live/vmlinuz boot=live config apparmor=1 security=apparmor nopersistent timezone=Etc/UTC block.events_dfl_poll_msecs=1000 noautologin module=Tails findiso=$isofile
    initrd (loop)/live/initrd.img 
}

#Kali
menuentry "Kali Linux 2.0 i386" { 
    set isofile="/boot/iso/kali-linux-2.0-i386.iso" 
    loopback loop (hd0,1)$isofile 
    loopback loop $isofile 
    linux (loop)/live/vmlinuz boot=live username=root hostname=kali findiso=${isofile} 
    initrd (loop)/live/initrd.img 
}

#запустить например GRUB4DOS
menuentry "Grub4Dos" {
linux /boot/grub.exe --config-file=/boot/grub/menu.lst
}


Рубрики
boot \ grub \ grub2 \ init \ systemd

grub модули

С помощью insmod name GRUB загружает во время работы модули расширений с дополнительными функциями. 
GRUB ищет файлы модулей name, mod в каталоге /boot/grub[2], в разделе, указанном в переменной root. 
Следует в частности отметить важные модули part_msdos и part_gpt (считывание таблиц секционирования), 
ext2 (файловые системы cxt2 и cxt4), 
raid, 
raidSrec, 
raid6rec и mdraid (программные массивы RAID), 
lvm, 
gfxterm(графическая консоль), 
vbe(графическая система), 
jpeg, tga и png для считывания графических файлов.
Рубрики
boot \ grub \ grub2 \ init \ systemd

grub разделы

В GRUB существует собственная номенклатура для обозначения жестких дисков 
По нумерация при этом не совпадает: 
первый жесткий диск имеет номер 0, а первый раздел — номер 1!

Имена разделов в GRUB 2
(hd0)   Первый жесткий/твердотельный диск (соответствует /dev/sda)
(hdl)	Второй жесткий/твердотельный диск (соответствует/dev/sdb)
(hd0,l)	Первый раздел первого жесткого/твердотельного диска (/dev/sda 1)
(hd2,8)	Восьмой раздел второго жесткого/твердотельного диска (/dev/sdc8)

Перед номером раздела допускается ставить сокращенное обозначение, указывающее способ секционирования: 
msdos для носителей, чья таблица секционирования записана в главной учетной записи, gpt - для носителей, применяющих таблицу разбиения GUID. 
Таким образом могут получаться названия вида (hd0.msdos3)  или (hd0.gpt2).

Совет:

На жестких дисках SATA и твердотельных дисках в принципе совершенно не важно, с какими SATA-портами материнской платы связаны носители данных. 
Первым жестким/твердотельным диском с точки зрения GRUB является тот, который связан с SATA-портом, имеющим наименьший номер.
Рекомендуется связывать первый жесткий или твердотельный диск именно с первым портом SATA. 
При несоблюдении этого условия во время тестов время от времени GRUB опознавал жесткий диск только как hdl. 
В таком случае автоматически сгенерированный конфигурационный файл GRUB не функционировал. 
Чтобы загрузиться в таком случае, нужно отредактировать соответствующую запись GRUB: 
нажать клавишу E и заменить hd0,... на hdl,...

Рубрики
boot \ grub \ grub2 \ init \ systemd

grub переменные

С помощью set varname=value осуществляется присваивание переменных. 
Для считывания переменных применяется запись вида $varname. 
При интерактивном выполнении команд GRUB команда echo Svarname отображает содержимое переменной, a set возвращает все определенные переменные.
Некоторые переменные обладают, кроме того, особым значением. 
К ним относятся» например, default, timeout, color_xxx, menu_color_xxx и особенно root: 
при любом доступе к файлам автоматически происходит считывание раздела, определенного в root.

GRUB может долговременно сохранять переменные на время работы. 
Для этого сначала (в Linux) должен быть создан файл /boot/grub[2]/grub-editenv (по умолчанию в большинстве дистрибутивов он уже создан). 
grub-editenv /boot/grub[2]/grubenv create

Теперь во время работы GRUB может с помощью save_env имя_переменной сохранить в этом файле переменную либо считывать переменные из этого файла с помощью loadenv. 
Перед этим необходимо настроить root так, чтобы эта переменная указывала на раздел с файлом окружения. 
В Linux вы также можете считывать или изменять переменные GRUB с помощью grub-editenv.

Рубрики
boot \ grub \ grub2 \ init \ systemd

grub нескольких операционных систем

Каждая операционная система может сохранить собственный загрузчик в специально предусмотренном для этого сегменте диска. 
При запуске компьютера сначала происходит инициализация EFI, а потом автоматически запускается загрузчик той операционной системы, которая была задана по умолчанию. 
(Как правило, по умолчанию задается та операционная система, которая была установлена последней.) 
Если при запуске компьютера нажать специальное сочетание клавиш (к сожалению, оно не стандартизировано и варьируется в зависимости от производителя EFI и ПК), то EFI отобразит меню со всеми загрузчиками.
Таким образом, при работе с EFI GRUB требуется лишь для того, чтобы запустить Linux. 
Вторая функция GRUB — выбор одной из нескольких операционных систем — с EFI становится уже излишней (хотя меню GRUB — исключительно полезная вещь даже при работе с EFI).
В сущности, GRUB с EFI совершенно не нужен. 
Ядро Linux содержит все необходимые функции, позволяющие EFI-системе запускать Linux напрямую, то есть, минуя GRUB или другие загрузчики. 
Но на практике этот вариант пока не играет роли: 
GRUB или другие загрузчики позволяют выбирать одну из нескольких установленных версий ядра, передавать параметры ядра, изменять параметры загрузки и т.д. 
При запуске Linux непосредственно из EFI вся эта гибкость теряется.
Рубрики
boot \ grub \ grub2 \ init \ systemd

grub ?

Аббревиатура GRUB:

Аббревиатура GRUB означает Grand Unified Bootloader (Грандиозный унифицированный загрузчик). 
Программа запускает Linux и вообще очень полезна для работы с параллельными установками Windows и Linux, 
так как непосредственно после запуска компьютера позволяет выбрать для работы желаемую операционную систему.

Независимо от конкретного дистрибутива, для работы GRUB2 требуется предварительно установить пакет os-prober. 
Одноименная команда просматривает все доступные разделы дисков на наличие операционных систем. 
Результат выполнения os-prober интегрируется в автоматически создаваемое меню GRUB.

Внимание:

На вашем жестком диске может быть только одна главная загрузочная запись, но вполне может присутствовать несколько операционных систем. 
Разумеется, здесь есть потенциал для конфликтов! MBR перезаписывается как при установке Linux, так и при установке Windows. 
GRUB вполне может запускать и Windows, но Windows не учитывает возможного наличия Linux на диске. 
Поэтому после установки Linux GRUB приходится «ремонтировать». 
Для этого лучше всего воспользоваться «живым диском» или системой аварийного восстановления. 
Поэтому сначала лучше устанавливать Windows, уже потом — Linux. 
Если позже вы снова установите Windows и перепишете таким образом главную учетную запись, то советы, как справиться с данной проблемой, 
ремонтируем  GRUB с помощью "живого диска".
Рубрики
boot \ grub \ grub2 \ init \ systemd

Запуск \ загрузка Linux

Запуск Linux:

Если вы определяете в загрузчике, что необходимо запустить Linux, то загрузчик должен поместить в оперативную память файл ядра Linux и запустить этот файл. 
Обычно файл ядра Linux называется /boot/vmlinuz (последняя буква z указывает на то, что ядро архивировано). 
Иными словами, загрузчик должен быть в состоянии загрузить из файловой системы весь указанный файл.

Параметры ядра:

Обычно ядру сообщается несколько параметров. Как минимум один параметр передается обязательно: 
имя устройства системного раздела (например, root=/dev/sdbl3). 
Это делается для того, чтобы ядро знало, какой из разделов является системным. 
Когда ядро запустится, управление будет передано программе Linux /sbin/init, отвечающей за инициализацию системы Linux.

Доступ к модулям ядра:

Ядро Linux имеет модульную структуру. 
Это означает, что в самом ядре содержатся только самые элементарные функции. 
Дополнительные функции, необходимые для доступа к компонентам аппаратного обеспечения, для считывания и изменения файлов из различных файловых систем и т.д., 
напротив, находятся в модулях, которые при необходимости загружаются из файловой системы и, таким образом, дополняют ядро.
Чтобы процесс запуска прошел успешно, ядро должно иметь возможность получать доступ к системному разделу. 

Если этот раздел расположен в файловой системе, не поддерживаемой ядром напрямую, или на жестком диске SCSI, 
для которого в ядре нет подходящего драйвера, возникает проблема «курицы и яйца».
Рубрики
boot \ grub \ grub2 \ init \ systemd

grub EFI

В Apple система EFI (Extensible Firmware, расширяемый интерфейс между операционной системой и микропрограммами) применяется уже много лет, 
но на рынке ПК с другими системами постепенный отказ от BIOS продлился значительно дольше. 
Только с выходом на рынок Windows 8 можно ожидать, что EFI будет функционировать на каждом ПК. (Разумеется, Windows 8 можно устанавливать и на более старые компьютеры, работающие с BIOS.)

EFI и GPT. 
Даже притом, что EFI заново разрабатывался практически с нуля, выгоды для конечного пользователя остаются довольно ограниченными. 
Но не может не радовать, что теперь есть гигантские жесткие диски с таблицей секционирования GUID (GPT), совершенно не доставляющие проблем при работе. 
Не забывайте, что применение GPT не является обязательным, в том числе и на компьютерах с EFI! 

EFI нормально работает и с такими жесткими и твердотельными дисками, чья таблица секционирования сохранена в главной загрузочной записи (MBR). 
Использовать GPT предпочтительно и на жестких и твердотельных дисках, которые не превышают по размеру 2 Тбайт, поскольку такая таблица значительно упрощает весь процесс секционирования диска.

Параллельная установка. 
С введением EFI значительно изменился весь загрузочный процесс. 
В то время как BIOS в принципе предусматривал установку только одной операционной системы и при любой параллельной установке приходилось задействовать менеджер загрузок, 
EFI сам по себе поддерживает установку.

Чтобы EFI и GRUB правильно взаимодействовали, нужно настроить специальную версию EFI, рассчитанную на работу с GRUB. 
Установочные программы распространенных дистрибутивов решают эту задачу автоматически.
В любом случае такое взаимодействие предполагает, что установочная программа должна выполняться в EFI-режиме! 
(Многие варианты реализации EFI совместимы с BIOS. При запуске той или иной установки Linux решающее значение имеет то, в каком режиме происходит данная установка. 
На некоторых компьютерах один установочный носитель — то есть DVD или флешка — в меню EFI отображается как два: одно устройство в BIOS-режиме и одно в EFI-режиме. 
Вы должны выбирать именно ту запись, которая относится к EFI!)

Раздел EFI. 
На компьютерах с EFI код GRUB записывается не в главную загрузочную запись, а в каталог раздела с EFI. 
Это особый раздел диска, в котором применяется файловая система VFAT. 
Такой раздел должен быть помечен специальным идентификатором: (MBR) или (C12A7328-F81F-11D2-BA4B-00A0C93EC93B) (GPT).

Microsoft рекомендует создавать EFI-раздел как первый раздел жесткого диска, хотя стандарт EFI этого и не требует. 
Данный раздел не должен быть очень большим, вполне достаточно будет 100-200 Мбайт (в тех дистрибутивах, которые я протестировал, загрузчик EFI в каждом из случаев требовал менее 1 Мбайт. 
Windows 8 требует значительно больше места — ориентировочно порядка 25 Мбайт).
Раздел с EFI должен быть подключен к файловой системе Linux в каталоге /boot/efi! 
Если при установке Linux вы выполняете секционирование диска вручную, то об этом подключении должны позаботиться вы сами.

Ядро, файл Initrd. 
Если GRUB уже работает, то запуск Linux протекает точно так же, как и на компьютере с BIOS: 
GRUB загружает ядро и запускает его, и в ходе запуска происходит передача файла Initrd и параметров ядра.

Рубрики
boot \ grub \ grub2 \ init \ systemd

grub MBR

Если на компьютере установлена и Linux, MBR обычно заменяется кодом загрузчика GRUB. 
В таком случае GRUB может либо запустить Linux, либо совершить условный переход для запуска Windows.
Альтернативный метод заключается в том, чтобы не трогать MBR и установить GRUB в загрузочном секторе системного раздела Linux, пометив этот раздел как «активный». 
Такой метод хотя и не противоречит правилам MBR, менее надежен и поэтому почти не используется.

Основная загрузочная запись имеет размер всего 512 Мбайт, поэтому загрузчик не сможет полностью поместиться в MBR. 
Чтобы можно было обойти это ограничение, MBR может вместить ровно такой фрагмент кода, который позволит вам запустить оставшуюся часть загрузчика уже с жесткого диска. 
Соответственно, код GRUB подразделяется на две или три части: 
stagel находится в основной загрузочной записи и предназначена для того, чтобы загрузить первые сектора части stagel_5 или stage2. 
В части stagel_5 содержится дополнительный код, обеспечивающий доступ к файлам различных файловых систем. 
Наконец, в stage2 содержится сам загрузчик.

Когда запустится загрузчик, появится меню, в котором будут на выбор представлены все операционные системы, 
определенные в процессе конфигурации GRUB (обычно это Windows и Linux). 
Теперь с помощью клавиш управления курсором можно выбрать интересующую вас операционную систему и запустить, нажав Enter. 
Часто GRUB настроен так, чтобы но истечении определенного промежутка времени операционная система загружалась автоматически.        
Рубрики
boot \ grub \ grub2 \ init \ systemd

grub initrd

Файл Initrd:

Решение заключается в том, что GRUB должен загружать не только ядро, но и файл Initrd. 
Это специальный файл, в котором содержатся все модули ядра, необходимые для запуска системы. 
Ядро временно использует этот файл как псевдодиск, то есть оно может загрузить все модули сразу же после запуска псевдодиска (сокращение Initrd означает Initial RAM Disk — диск в оперативной памяти для начальной инициализации).
Обычно файл Initrd называется /boot/initrd или /boot/initrd.gz. 

В большинстве дистрибутивов имеются инструменты, позволяющие создать такой файл Initrd, 
который бы подошел к применяемому аппаратному обеспечению и к файловой системе, которая находится в системном разделе (команда mkinitrd).

Установка и конфигурация GRUB. 
Когда на страницах этой книги говорится об установке программы, обычно имеется в виду установка программного пакета на жесткий диск. 
В этой главе все иначе. Под установкой GRUB понимается процесс, в ходе которого стартовый код GRUB записывается в загрузочный сектор жесткого диска.
Конфигурация GRUB протекает по-разному в зависимости от версии GRUB. 
В GRUB 0.97 применяется центральный конфигурационный файл /boot/grub/menu.lst. 
В GRUB 2 есть целая коллекция конфигурационных сценариев, находящихся в каталоге /etc/grub.d/. 
Благодаря исполнению этих сценариев создается сам конфигурационный файл GRUB 2 /boot/grub/grub.cfg.

Файл initrd должен содержать такие модули ядра, версия которых точно совпадает с версией ядра. 
Поэтому всякий раз, когда вы устанавливаете или самостоятельно компилируете новую версию ядра, необходимо заново создавать соответствующий этому ядру Initrd-файл. 
При обновлении ядра этот процесс обычно автоматически выполняет сама программа обновления. 
А если вы самостоятельно устанавливаете ядро, то сами должны позаботиться и об Initrd-файле.
Строго говоря, название «initrd-файл>> в большинстве современных дистрибутивов уже неприменимо. 
На самом деле мы работаем с initramfs-файлами, организация которых будет описана немного ниже. 
Но поскольку и в параметрах GRUB, и в различных командах для создания файлов используется понятие initrd, а само ядро правильно интерпретирует файл, несмотря па неверное название,

Файл Initrd не всегда необходим для работы. 
Если ядро вашего дистрибутива содержит все компоненты, необходимые для загрузочного процесса, то запуск возможен и без Initrd-файла. 
Но для этого ядро нужно соответствующим образом скомпилировать — и именно такого в большинстве дистрибутивов не происходит. 
(Почти все модули ядра при желании можно интегрировать в само ядро. Разумеется, файл ядра от этого увеличится.)
К огромному сожалению, создание Inicrd-файлов не стандартизировано. 
В каждом дистрибутиве для этого используются собственные инструменты. 
Initrd-файлы содержат не только модули ядра, но и сценарии для инициализации оборудования. 
Исполнение этих сценариев длится достаточно долго и стало головной болью для многих разработчиков, так как сильно тормозит процесс загрузки.

Основные команды:

apt-get install initrd-tools
cp /boot/ initrd.img-2.6.20-16-generic /boot/ initrd.img-2.6.20-16-generic.back
mkinitrd -o /boot/initrd.img-2.6.20-16-generic
mkinitrd -o /boot/initrd.img-'uname -r' 'uname -r' 
uname -r - отображает версию ядра
uname -a - отображает всю доступную информацию о ядре
dmesg | less - лог загрузки/выполнения системы (кольцевой буфер системы)
less /var/log/dmesg - полный лог dmesg
lsmod - позволяет просмотреть/добавит/убрать имена загружаемых модулей
modinfo snd_ens1371 - выведет подробную информацию о модуле snd_ens1371
modprobe -l |grep c-qcam - отображает все модули, затем ищет c-qcam
modprobe c-qcam - загружает модуль c-qcam
modprobe -r c-qcam - удаляет модуль

sysctl -a | less - отображает все параметры ядра
sysctl kernel.hostname - отображает значения отдельных параметров ядра
sysctl -p - загружает параметры из файла /etc/sysctl.conf (перечитать конфигурацию)
sysctl -w kernel.hostname=joe - устанавливает значение kernel .hostname
sysctl -A | less - отобразить все динамические параметры ядра
sysctl -w net.ipv4.ip_forward=1 - включить перенаправление пакетов ipv4

lspci - отображает список устройств pci
lspci -v - отображает список устройств pci (подробно)
lspci -vv - отображает список устройств pci (более подробно)
dmidecode | less - отображает список устройств
lsusb - отображает список usb устройств

hdparm /dev/sda - отображает параметры диска /dev/sda
hdparm -I /dev/sda - выводит подробную информацию о диске /dev/sda
fdisk -l - отобразит все диски и файловые системы на них


Update-initramfs:

Update-initramfs (Debian, Ubuntu). 
В Debian и Ubuntu для создания Initrd-файлов и их последующего администрирования предусмотрен сценарий update-initramfs. 
В простейшем случае для обновления Initrd-файла новейшей установленной версии ядра вы просто задаете параметр -u. 
Но если вы хотите обновить Initrd-файл не до новейшей, а до какой-то другой версии ядра, то укажите помер версии с помощью параметра -k. 
Параметр -kail обновляет Initrd-файлы для всех установленных версий ядра.
С помощью параметров -с или -dcuenapuHupdate-initramfs создает новый или удаляет имеющийся Initrd-файл. 
В таком случае обязательно требуется указать версию ядра с помощью параметра -k.

update-initramfs -c -k 3.5-13-generic   (Debian, Ubuntu)
mkinitramfs -o myinitrd 3.5-13-generic  (Debian, Ubuntu)

dracut /boot/initrd-3.5.3      3.5.3    (Fedora, Red Hat)

mkinitrd (SUSE)