user@linux-tutorials: ~/tutorials/15-boot-and-systemd — linux-tutorials

tutorials / linux / chapter-15.md · utf-8 ⬇ download chapter-15.md

فصل پانزدهم: فرآیند Boot و مدیریت Systemd

Linux Boot Process and Systemd

وقتی یک سیستم لینوکسی را روشن می‌کنیم، سیستم‌عامل بلافاصله اجرا نمی‌شود.

قبل از اینکه کاربر بتواند وارد محیط لینوکس شود، چندین مرحله مهم اتفاق می‌افتد:

  • بررسی سخت‌افزار
  • اجرای Firmware
  • بارگذاری Bootloader
  • اجرای Kernel
  • راه‌اندازی سرویس‌ها
  • آماده‌سازی محیط کاربر

شناخت فرآیند Boot برای یک مدیر سیستم لینوکس بسیار مهم است؛ زیرا بسیاری از مشکلات سیستم در همین مراحل اتفاق می‌افتند.

فرآیند Boot چیست؟

Boot Process مجموعه مراحلی است که سیستم از لحظه روشن شدن تا آماده شدن محیط کاربر طی می‌کند.

ساختار کلی:

Power On

    |

    ▼

BIOS / UEFI

    |

    ▼

Bootloader (GRUB)

    |

    ▼

Linux Kernel

    |

    ▼

Systemd

    |

    ▼

Services

    |

    ▼

User Environment

مرحله اول: Power On

با فشردن دکمه Power:

  • CPU شروع به کار می‌کند.
  • Firmware اجرا می‌شود.
  • سخت‌افزار بررسی می‌شود.

این مرحله توسط BIOS یا UEFI مدیریت می‌شود.

BIOS چیست؟

BIOS مخفف:

Basic Input/Output System

است.

BIOS یک Firmware قدیمی است که وظیفه دارد:

  • سخت‌افزار را شناسایی کند.
  • دستگاه Boot را پیدا کند.
  • Bootloader را اجرا کند.

UEFI چیست؟

UEFI نسخه جدیدتر BIOS است.

مزایا:

  • سرعت بیشتر
  • پشتیبانی از دیسک‌های بزرگ‌تر
  • امنیت بهتر
  • پشتیبانی از Secure Boot

امروزه اکثر سیستم‌های جدید از UEFI استفاده می‌کنند.

Bootloader چیست؟

Bootloader برنامه‌ای است که مسئول بارگذاری سیستم‌عامل است.

وظیفه:

  • پیدا کردن Kernel
  • انتقال کنترل سیستم به Kernel

در لینوکس رایج‌ترین Bootloader:

GRUB

است.

GRUB چیست؟

GRUB مخفف:

Grand Unified Bootloader

است.

GRUB به کاربر اجازه می‌دهد:

  • سیستم‌عامل را انتخاب کند.
  • Kernelهای مختلف را اجرا کند.
  • وارد Recovery Mode شود.

فایل‌های GRUB

مسیرهای مهم:

/boot/grub

تنظیمات:

/etc/default/grub

بروزرسانی GRUB

بعد از تغییر تنظیمات:

user@linux-tutorials: ~/ch-15BASH
sudo update-grub

اجرا می‌شود.

Kernel چیست؟

Kernel هسته اصلی سیستم‌عامل لینوکس است.

Kernel مسئول مدیریت:

  • CPU
  • Memory
  • Hardware
  • Processes
  • Devices

است.

مشاهده Kernel فعلی

دستور:

user@linux-tutorials: ~/ch-15BASH
uname -r

مثال:

6.17.0-35-generic

Kernel در Boot

بعد از اجرای GRUB:

Kernel از دیسک خوانده شده و در حافظه RAM قرار می‌گیرد.

سپس کنترل سیستم را در دست می‌گیرد.

Init چیست؟

پس از اجرای Kernel، اولین Process سیستم اجرا می‌شود.

این Process:

PID 1

نام دارد.

در گذشته این وظیفه بر عهده:

user@linux-tutorials: ~/ch-15BASH
init

بود.

Systemd چیست؟

در اکثر توزیع‌های مدرن لینوکس، Init با:

user@linux-tutorials: ~/ch-15BASH
systemd

جایگزین شده است.

Systemd مهم‌ترین سیستم مدیریت سرویس‌ها در لینوکس است.

وظایف Systemd

Systemd مسئول:

  • اجرای سرویس‌ها
  • مدیریت Startup
  • کنترل Processها
  • ثبت Logها
  • مدیریت Dependencyها

است.

مشاهده PID یک Systemd

دستور:

user@linux-tutorials: ~/ch-15BASH
ps -p 1

نمونه خروجی:

user@linux-tutorials: ~/ch-15BASH
systemd

Unit در Systemd چیست؟

Systemd همه چیز را به شکل:

Unit

مدیریت می‌کند.

انواع Unit:

  • Service
  • Socket
  • Target
  • Timer
  • Mount

Service چیست؟

Service یک برنامه یا Daemon در حال اجرا است.

مثال:

user@linux-tutorials: ~/ch-15BASH
ssh.service

nginx.service

مشاهده سرویس‌ها

مشاهده همه سرویس‌ها:

user@linux-tutorials: ~/ch-15BASH
systemctl list-units --type=service

بررسی وضعیت یک سرویس

مثال:

user@linux-tutorials: ~/ch-15BASH
systemctl status ssh

شروع یک سرویس

ساختار:

user@linux-tutorials: ~/ch-15BASH
sudo systemctl start service-name

مثال:

user@linux-tutorials: ~/ch-15BASH
sudo systemctl start ssh

توقف سرویس

user@linux-tutorials: ~/ch-15BASH
sudo systemctl stop service-name

مثال:

user@linux-tutorials: ~/ch-15BASH
sudo systemctl stop ssh

ری‌استارت سرویس

user@linux-tutorials: ~/ch-15BASH
sudo systemctl restart service-name

فعال کردن سرویس هنگام Boot

برای اجرای خودکار:

user@linux-tutorials: ~/ch-15BASH
sudo systemctl enable service-name

مثال:

user@linux-tutorials: ~/ch-15BASH
sudo systemctl enable ssh

غیرفعال کردن Startup

user@linux-tutorials: ~/ch-15BASH
sudo systemctl disable service-name

بررسی فعال بودن سرویس

user@linux-tutorials: ~/ch-15BASH
systemctl is-enabled ssh

Target چیست؟

Target در Systemd شبیه Runlevelهای قدیمی است.

Target مشخص می‌کند سیستم در چه حالت کاری قرار دارد.

Target های مهم

حالت گرافیکی:

user@linux-tutorials: ~/ch-15BASH
graphical.target

حالت چندکاربره:

user@linux-tutorials: ~/ch-15BASH
multi-user.target

حالت خاموش:

user@linux-tutorials: ~/ch-15BASH
poweroff.target

حالت Restart:

user@linux-tutorials: ~/ch-15BASH
reboot.target

مشاهده Target فعلی

دستور:

user@linux-tutorials: ~/ch-15BASH
systemctl get-default

تغییر Target پیش‌فرض

مثال:

user@linux-tutorials: ~/ch-15BASH
sudo systemctl set-default multi-user.target

Journal چیست؟

Systemd سیستم ثبت Log داخلی دارد:

user@linux-tutorials: ~/ch-15BASH
journal

ابزار مشاهده:

user@linux-tutorials: ~/ch-15BASH
journalctl

مشاهده تمام Logها

user@linux-tutorials: ~/ch-15BASH
journalctl

Logهای Kernel

user@linux-tutorials: ~/ch-15BASH
journalctl -k

Log یک سرویس

مثال:

user@linux-tutorials: ~/ch-15BASH
journalctl -u ssh

مشاهده Logهای جدید

user@linux-tutorials: ~/ch-15BASH
journalctl -f

مانند:

user@linux-tutorials: ~/ch-15BASH
tail -f

کار می‌کند.

بررسی مشکلات Boot

اگر سیستم مشکل دارد:

بررسی Logهای Boot:

user@linux-tutorials: ~/ch-15BASH
journalctl -b

مشاهده خطاهای Boot

user@linux-tutorials: ~/ch-15BASH
journalctl -b -p err

فقط خطاها را نمایش می‌دهد.

Recovery Mode چیست؟

Recovery Mode یک حالت تعمیر سیستم است.

کاربردها:

  • تعمیر فایل‌ها
  • تغییر رمز عبور
  • رفع مشکل Boot
  • تعمیر Packageها

Single User Mode

یک حالت حداقلی برای تعمیر سیستم است.

در این حالت:

  • سرویس‌های کمتری اجرا می‌شوند.
  • دسترسی مدیریتی فراهم است.

مدیریت Startup برنامه‌ها

برنامه‌هایی که هنگام Boot اجرا می‌شوند توسط Systemd مدیریت می‌شوند.

مشاهده:

user@linux-tutorials: ~/ch-15BASH
systemctl list-unit-files

ساخت Service شخصی

فرض کنید Script داریم:

/home/user/script.sh

یک Service بسازیم:

/etc/systemd/system/myscript.service

ساختار Service

نمونه:

[Unit]

Description=My Script Service


[Service]

ExecStart=/home/user/script.sh


[Install]

WantedBy=multi-user.target

Reload کردن Systemd

بعد از ساخت Service:

user@linux-tutorials: ~/ch-15BASH
sudo systemctl daemon-reload

اجرای Service جدید

user@linux-tutorials: ~/ch-15BASH
sudo systemctl start myscript

فعال کردن:

user@linux-tutorials: ~/ch-15BASH
sudo systemctl enable myscript

Systemd Timer

Systemd قابلیت زمان‌بندی نیز دارد.

مانند:

Cron

اما با امکانات بیشتر.

مشاهده Timerها:

user@linux-tutorials: ~/ch-15BASH
systemctl list-timers

تفاوت Cron و Systemd Timer

Cron:

  • ساده‌تر
  • قدیمی‌تر
  • مناسب کارهای روزمره

Systemd Timer:

  • مدرن‌تر
  • مدیریت بهتر
  • هماهنگ با Systemd

مشکلات رایج Boot

سیستم بالا نمی‌آید

دلایل:

  • مشکل GRUB
  • خرابی Kernel
  • مشکل Disk
  • مشکل File System

بررسی فضای Boot

مشاهده:

user@linux-tutorials: ~/ch-15BASH
ls /boot

بررسی Kernelهای نصب شده

Ubuntu:

user@linux-tutorials: ~/ch-15BASH
dpkg --list | grep linux-image

تعمیر GRUB

در صورت مشکل:

user@linux-tutorials: ~/ch-15BASH
sudo grub-install

سپس:

user@linux-tutorials: ~/ch-15BASH
sudo update-grub

پروژه عملی فصل

ساخت یک Service شخصی

هدف:

ساخت سرویسی که هنگام Boot اجرا شود.

مراحل:

ساخت Script:

user@linux-tutorials: ~/ch-15BASH
nano startup.sh

اجازه اجرا:

user@linux-tutorials: ~/ch-15BASH
chmod +x startup.sh

ساخت فایل Service:

/etc/systemd/system/startup.service

Reload:

user@linux-tutorials: ~/ch-15BASH
sudo systemctl daemon-reload

فعال کردن:

user@linux-tutorials: ~/ch-15BASH
sudo systemctl enable startup

تمرین‌های فصل پانزدهم

[01]مشاهده Kernel

user@linux-tutorials: ~/ch-15BASH
uname -r

[02]بررسی Systemd

user@linux-tutorials: ~/ch-15BASH
systemctl status

[03]مشاهده سرویس‌ها

user@linux-tutorials: ~/ch-15BASH
systemctl list-units --type=service

[04]بررسی Logهای Boot

user@linux-tutorials: ~/ch-15BASH
journalctl -b

[05]ساخت یک Service ساده.

جمع‌بندی فصل پانزدهم

در این فصل یاد گرفتیم:

  • سیستم لینوکس چگونه Boot می‌شود.
  • BIOS و UEFI چیست.
  • GRUB چگونه کار می‌کند.
  • Kernel چه وظیفه‌ای دارد.
  • Systemd چیست.
  • چگونه سرویس‌ها را مدیریت کنیم.
  • چگونه Logها را بررسی کنیم.
  • چگونه Service شخصی بسازیم.
  • چگونه مشکلات Boot را عیب‌یابی کنیم.

شناخت Boot Process و Systemd یکی از مهم‌ترین مهارت‌های یک مدیر سیستم لینوکس است.

بدون شناخت این بخش‌ها، مدیریت حرفه‌ای سرورها و سیستم‌های لینوکسی امکان‌پذیر نیست.