LFCS: Sistem Başlatma Sürecini ve Hizmetlerini Yönetme (SysVinit, Systemd ve Upstart) - Bölüm 7


Birkaç ay önce Linux Vakfı, amacı dünyanın her yerinden bireylerin Linux sistemlerinde temel ve orta düzey sistem yönetimi görevlerini gerçekleştirme konusunda sertifika alın. Bu, halihazırda çalışan sistem ve hizmetlerin desteklenmesinin yanı sıra, ilk elden sorun bulma ve analizin yanı sıra sorunların mühendislik ekiplerine ne zaman iletileceğine karar verme yeteneğini de içerir.

Aşağıdaki videoda Linux Foundation Sertifikasyon Programına kısa bir giriş anlatılmaktadır.

Bu yazı 10 eğitim serisinin 7. Bölümüdür, bu bölümde LFCS sertifikasyon sınavı için gerekli olan Linux Sistem Başlatma Sürecini ve Hizmetlerini Nasıl Yöneteceğinizi açıklayacağız.

Linux Başlangıç Sürecini Yönetmek

Bir Linux sisteminin önyükleme işlemi, her biri farklı bir bileşenle temsil edilen birkaç aşamadan oluşur. Aşağıdaki şema, önyükleme işlemini kısaca özetlemektedir ve ilgili tüm ana bileşenleri göstermektedir.

Makinenizdeki Güç düğmesine bastığınızda, anakarttaki EEPROM yongasında saklanan donanım yazılımı POST'u başlatır ( Sistemin donanım kaynaklarının durumunu kontrol etmek için Açılışta Otomatik Test). POST tamamlandığında, ürün yazılımı MBR veya EFI'de bulunan 1. aşama önyükleme yükleyicisini arar ve yükler. kullanılabilir ilk diskin bölümünü oluşturur ve ona kontrol sağlar.

MBR Yöntemi

MBR, BIOS ayarlarında önyüklenebilir olarak işaretlenmiş diskin ilk sektöründe bulunur ve 512 bayt boyutundadır.

  1. İlk 446 bayt: Önyükleyici hem yürütülebilir kodu hem de hata mesajı metnini içerir.
  2. Sonraki 64 bayt: Bölüm tablosu dört bölümün (birincil veya genişletilmiş) her biri için bir kayıt içerir. Diğer şeylerin yanı sıra her kayıt, her bölümün durumunu (aktif/aktif değil), boyutunu ve başlangıç/bitiş sektörlerini gösterir.
  3. Son 2 bayt: Sihirli sayı, MBR'nin doğrulama kontrolü görevi görür.

Aşağıdaki komut MBR'nin yedeğini alır (bu örnekte /dev/sda ilk sabit disktir). Ortaya çıkan mbr.bkp dosyası, bölüm tablosunun bozulması, örneğin sistemin yeniden başlatılamaz hale gelmesi durumunda kullanışlı olabilir.

Elbette daha sonra ihtiyaç duyulduğunda kullanabilmek için onu kaydetmemiz ve başka bir yerde saklamamız gerekecek (örneğin, USB sürücüsü gibi). Bu dosya MBR'yi geri yüklememize yardımcı olacak ve ancak bu arada sabit disk düzenini değiştirmezsek yeniden yola çıkmamızı sağlayacak.

MBR'yi yedekle
dd if=/dev/sda of=mbr.bkp bs=512 count=1

MBR'yi geri yükleme
dd if=mbr.bkp of=/dev/sda bs=512 count=1

EFI/UEFI Yöntemi

EFI/UEFI yöntemini kullanan sistemler için, UEFI donanım yazılımı, hangi UEFI uygulamasının nereden başlatılacağını (yani uygulamanın hangi diskte ve bölümde olduğunu) belirlemek için ayarlarını okur. EFI bölümü bulunur).

Daha sonra, 2. aşama önyükleme yükleyicisi (diğer adıyla önyükleme yöneticisi) yüklenir ve çalıştırılır. GRUB [GRand Unified Boot] Linux'ta en sık kullanılan önyükleme yöneticisidir. Günümüzde kullanılan çoğu sistemde iki farklı versiyondan biri bulunabilir.

  1. GRUB eski yapılandırma dosyası: /boot/grub/menu.lst (eski dağıtımlar, EFI/UEFI donanım yazılımları tarafından desteklenmez).
  2. GRUB2 yapılandırma dosyası: büyük ihtimalle /etc/default/grub.conf

LFCS sınavının hedefleri açıkça GRUB'un dahili özellikleri hakkında bilgi talep etmese de, eğer cesursanız ve sisteminizi bozmayı göze alabiliyorsanız (bunu denemek isteyebilirsiniz) her ihtimale karşı ilk önce sanal bir makinede), çalıştırmanız gerekir.

update-grub

Değişiklikleri uygulamak için GRUB'un yapılandırmasını değiştirdikten sonra root olarak.

Temel olarak, GRUB varsayılan çekirdeği ve initrd veya initramfs görüntüsünü yükler. Birkaç kelimeyle söylemek gerekirse, initrd veya initramfs, donanım algılamayı, çekirdek modülü yüklemeyi ve gerçek kök dosya sistemini monte etmek için gereken aygıt keşfini gerçekleştirmeye yardımcı olur.

Gerçek kök dosya sistemi çalıştığında, çekirdek normal kullanıcı işlemini başlatmak için sistemi ve hizmet yöneticisini (init veya systemd; bunların işlem kimliği veya PID'si her zaman 1'dir) çalıştırır. Bir kullanıcı arayüzü sunmak için alan önyükleme işlemi.

Hem init hem de systemd, başlatılan ilk hizmet (önyükleme sırasında) ve sonlandırılan son hizmet (kapatma sırasında) olarak diğer arka plan süreçlerini yöneten arka plan süreçleridir (arka plan işlemleri).

Hizmetleri Başlatma (SysVinit)

Linux'taki çalışma düzeyleri kavramı, hangi hizmetlerin çalıştığını kontrol ederek bir sistemi kullanmanın farklı yollarını belirtir. Başka bir deyişle, bir çalışma seviyesi mevcut yürütme durumunda=çalışma seviyesinde hangi görevlerin gerçekleştirilebileceğini (ve hangilerinin gerçekleştirilemeyeceğini) kontrol eder.

Geleneksel olarak, bu başlatma işlemi, System V UNIX'ten kaynaklanan geleneklere dayalı olarak gerçekleştirildi; sistem, makine belirli bir çalışma düzeyine (başka bir deyişle, , sistemi çalıştırmanın farklı bir modudur).

Her çalışma seviyesinde, bireysel hizmetler çalışacak veya çalışıyorsa kapatılacak şekilde ayarlanabilir. Bazı büyük dağıtımların en son sürümleri System V standardından uzaklaşarak systemd (sistem arka plan programı anlamına gelir) adı verilen oldukça yeni bir hizmet ve sistem yöneticisine doğru gidiyor, ancak genellikle uyumluluk amacıyla sysv komutlarını destekler. Bu, iyi bilinen sysv başlatma araçlarının çoğunu systemd tabanlı bir dağıtımda çalıştırabileceğiniz anlamına gelir.

Ayrıca Okuyun: Linux'ta neden 'systemd' 'init'in yerini alıyor?

Sistem sürecini başlatmanın yanı sıra init, hangi çalışma seviyesinin girilmesi gerektiğine karar vermek için /etc/inittab dosyasına bakar.

Runlevel

Açıklama

0

Sistemi durdurun. Çalışma seviyesi 0, sistemi hızlı bir şekilde kapatmak için kullanılan özel bir geçiş durumudur.

1

Ayrıca s veya S olarak da adlandırılan bu çalışma düzeyine bazen bakım modu denir. Bu çalışma düzeyinde hangi hizmetlerin (varsa) başlatıldığı dağıtıma göre değişir. Genellikle normal sistem çalışması nedeniyle bozulabilecek düşük seviyeli sistem bakımı için kullanılır.

2

Çok kullanıcılı. Debian sistemlerinde ve türevlerinde bu, varsayılan çalışma düzeyidir ve (varsa) grafiksel oturum açmayı içerir. Red-Hat tabanlı sistemlerde bu, ağ bağlantısı olmayan çok kullanıcılı moddur.

3

Red-Hat tabanlı sistemlerde bu, grafik ortamı dışındaki her şeyi çalıştıran varsayılan çok kullanıcılı moddur. Bu çalışma seviyesi ve seviye 4 ve 5 genellikle Debian tabanlı sistemlerde kullanılmaz.

4

Genellikle varsayılan olarak kullanılmaz ve bu nedenle özelleştirmeye uygundur.

5

Red-Hat tabanlı sistemlerde, GUI oturum açma özelliğiyle tam çok kullanıcılı mod. Bu çalışma seviyesi 3. seviyeye benzer, ancak GUI girişi mevcuttur.

6

Sistemi yeniden başlatın.

Çalışma seviyeleri arasında geçiş yapmak için init komutunu kullanarak bir çalışma seviyesi değişikliği gerçekleştirebiliriz: init N (burada N, yukarıda listelenen çalışma seviyelerinden biridir). Lütfen bunun, çalışan bir sistemi farklı bir çalışma düzeyine taşımanın önerilen yolu olmadığını unutmayın; çünkü bu, mevcut oturum açmış kullanıcılara herhangi bir uyarı vermez (böylece onların işlerini kaybetmelerine ve süreçlerin anormal şekilde sona ermesine neden olur).

Bunun yerine, sistemi yeniden başlatmak için shutdown komutu kullanılmalıdır (öncelikle oturum açmış tüm kullanıcılara bir uyarı mesajı gönderir ve sonraki oturum açma işlemlerini engeller; daha sonra çalışma seviyelerini değiştirmek için init sinyali verir); ancak, varsayılan çalışma düzeyinin (sistemin önyükleme yapacağı düzey) ilk önce /etc/inittab dosyasında düzenlenmesi gerekir.

Bu nedenle, çalışma seviyeleri arasında doğru şekilde geçiş yapmak için şu adımları izleyin. Kök olarak /etc/inittab'de aşağıdaki satırı arayın.

id:2:initdefault:

ve istediğiniz çalışma düzeyi için 2 sayısını vim gibi tercih ettiğiniz metin düzenleyiciyle değiştirin (Linux'ta vi/vim düzenleyici nasıl kullanılır – bu serinin 2. Bölümünde açıklanmıştır).

Daha sonra root olarak çalıştırın.

shutdown -r now

Bu son komut, sistemi yeniden başlatacak ve bir sonraki önyükleme sırasında sistemin belirtilen çalışma düzeyinde başlamasına neden olacak ve /etc/rc[runlevel].d hangi hizmetlerin başlatılıp hangilerinin başlatılmaması gerektiğine karar vermek için dizin. Örneğin aşağıdaki sistemdeki çalışma seviyesi 2 için.

Hizmetleri chkconfig kullanarak yönetme

Sistem hizmetlerini önyükleme sırasında etkinleştirmek veya devre dışı bırakmak için CentOS/openSUSE'de chkconfig komutunu ve Debian ve türevlerinde sysv-rc-conf komutunu kullanacağız. Bu araç ayrıca bize belirli bir çalışma seviyesi için bir hizmetin önceden yapılandırılmış durumunun ne olduğunu da gösterebilir.

Ayrıca Okuyun: Linux'ta İstenmeyen Hizmetler Nasıl Durdurulur ve Devre Dışı Bırakılır

Bir hizmetin çalışma düzeyi yapılandırmasını listeleme.

chkconfig --list [service name]
chkconfig --list postfix
chkconfig --list mysqld

Yukarıdaki resimde postfix'in, sistem 2 ile 5 arasındaki çalışma seviyelerine girdiğinde başlayacak şekilde ayarlandığını görebiliriz, oysa mysqld b>, 2 ile 4 arasındaki çalışma seviyeleri için varsayılan olarak çalışacaktır. Şimdi bunun beklenen davranış olmadığını varsayalım.

Örneğin, 5 çalışma seviyesi için de mysqld'yi açmamız ve çalışma seviyeleri 4 ve 5 için de postfix'i kapatmamız gerekir. Her durumda yapacağımız şey şu: root olarak komutları takip ederek).

Belirli bir çalışma düzeyi için bir hizmeti etkinleştirme
chkconfig --level [level(s)] service on
chkconfig --level 5 mysqld on
Belirli çalışma seviyeleri için bir hizmeti devre dışı bırakma
chkconfig --level [level(s)] service off
chkconfig --level 45 postfix off

Şimdi benzer görevleri sysv-rc-conf kullanarak Debian tabanlı bir sistemde gerçekleştireceğiz.

Hizmetleri sysv-rc-conf kullanarak yönetme

Bir hizmeti belirli bir çalışma düzeyinde otomatik olarak başlayacak ve diğer tüm düzeylerde başlatılmasını engelleyecek şekilde yapılandırma.

1. mdadm'in başlatılacak şekilde yapılandırıldığı çalışma seviyelerinin neler olduğunu görmek için aşağıdaki komutu kullanalım.

ls -l /etc/rc[0-6].d | grep -E 'rc[0-6]|mdadm'

2. Mdadm'ın 2 dışındaki tüm çalışma düzeylerinde başlatılmasını önlemek için sysv-rc-conf kullanacağız. İstediğiniz gibi işaretleyin veya işareti kaldırın (boşluk çubuğuyla) (ok tuşlarıyla yukarı, aşağı, sola ve sağa hareket edebilirsiniz).

sysv-rc-conf

Daha sonra çıkmak için q tuşuna basın.

3. Sistemi yeniden başlatacağız ve 1. ADIM'dan itibaren komutu yeniden çalıştıracağız.

ls -l /etc/rc[0-6].d | grep -E 'rc[0-6]|mdadm'

Yukarıdaki resimde mdadm'nin yalnızca 2 çalışma düzeyinde başlayacak şekilde yapılandırıldığını görebiliriz.

Peki ya systemd?

systemd, birçok büyük Linux dağıtımı tarafından benimsenen başka bir hizmet ve sistem yöneticisidir. Sistem başlatılırken paralel olarak daha fazla işlemin yapılmasına izin vermeyi amaçlamaktadır (işlemleri birer birer başlattığı için her zaman daha yavaş olma eğiliminde olan sysvinit'ten farklı olarak, birinin diğerine bağlı olup olmadığını kontrol eder ve bir işlemin gerçekleşmesini bekler) Daha fazla hizmetin başlayabilmesi için arka plan programlarının başlatılması) ve çalışan bir sistem için dinamik bir kaynak yönetimi olarak hizmet vermesi.

Böylece hizmetler, önyükleme sırasında herhangi bir neden olmadan başlatılmak yerine (sistem kaynaklarının tüketilmesini önlemek için) ihtiyaç duyulduğunda başlatılır.

Sisteminizde çalışan tüm işlemlerin (hem systemd yerel hem de SysV hizmetleri) durumunu görüntüleyerek aşağıdaki komutu çalıştırın.

systemctl

LOAD sütunu, birim tanımının (hizmeti veya systemd tarafından bakımı yapılan herhangi bir şeyi gösteren UNIT sütununa bakın) düzgün şekilde yüklenip yüklenmediğini gösterirken, AKTİF ve SUB sütunları bu birimin mevcut durumunu gösterir.

Bir hizmetin mevcut durumu hakkında bilgi görüntüleme

AKTİF sütunu bir birimin durumunun aktif dışında olduğunu gösterdiğinde, kullanarak ne olduğunu kontrol edebiliriz.

systemctl status [unit]

Örneğin, yukarıdaki resimde media-samba.mount başarısız durumda. Hadi koşalım.

systemctl status media-samba.mount

media-samba.mount'un başarısız olduğunu görüyoruz çünkü dev1 ana bilgisayarındaki bağlama işlemi //192.168.0.10/gacanepa< adresinde ağ paylaşımını bulamadı..

Hizmetleri Başlatma veya Durdurma

//192.168.0.10/gacanepa ağ paylaşımı kullanılabilir hale geldiğinde, media-samba.mount birimini başlatmayı, sonra durdurmayı ve son olarak yeniden başlatmayı deneyelim. Her eylemi gerçekleştirdikten sonra durumunu kontrol etmek için systemctl status media-samba.mount komutunu çalıştıralım.

systemctl start media-samba.mount
systemctl status media-samba.mount
systemctl stop media-samba.mount
systemctl restart media-samba.mount
systemctl status media-samba.mount

Önyükleme sırasında bir hizmetin başlatılmasını etkinleştirme veya devre dışı bırakma

systemd altında, bir hizmeti önyüklendiğinde etkinleştirebilir veya devre dışı bırakabilirsiniz.

systemctl enable [service] 		# enable a service 
systemctl disable [service] 		# prevent a service from starting at boot

Bir hizmetin önyükleme sırasında otomatik olarak başlatılmasını etkinleştirme veya devre dışı bırakma işlemi, /etc/systemd/system/multi-user.target.wants dizinine sembolik bağlantıların eklenmesinden veya kaldırılmasından oluşur.

Alternatif olarak, bir hizmetin mevcut durumunu (etkin veya devre dışı) komutla öğrenebilirsiniz.

systemctl is-enabled [service]

Örneğin,

systemctl is-enabled postfix.service

Ayrıca sistemi yeniden başlatabilir veya kapatabilirsiniz.

systemctl reboot
systemctl shutdown

Yeni başlangıç

Upstart, /sbin/init arka plan programının olay tabanlı bir alternatifidir ve hizmetleri yalnızca ihtiyaç duyulduğunda başlatma ihtiyacından doğmuştur (aynı zamanda onları denetler). çalışıyor) ve olayları meydana geldikçe ele alıyor, böylece klasik, bağımlılık tabanlı sysvinit sistemini geride bırakıyor.

Başlangıçta Ubuntu dağıtımı için geliştirildi ancak Red Hat Enterprise Linux 6.0'da kullanılıyor. sysvinit'in yerini alacak şekilde tüm Linux dağıtımlarında kullanıma uygun olması amaçlanmış olsa da, zamanla systemd'nin gölgesinde kaldı. 14 Şubat 2014'te Mark Shuttleworth (Canonical Ltd.'nin kurucusu), Ubuntu'nun gelecekteki sürümlerinin varsayılan başlatma arka plan programı olarak systemd'yi kullanacağını duyurdu.

Sistem için SysV başlangıç komut dosyası çok uzun süredir yaygın olduğundan, çok sayıda yazılım paketi SysV başlangıç komut dosyalarını içerir. Bu tür paketlere uyum sağlamak için Upstart bir uyumluluk modu sağlar: SysV başlangıç komut dosyalarını olağan konumlarda (/etc/rc.d/rc?.d, /etc/init.d/) çalıştırır. rc?.d, /etc/rc?.d veya benzer bir konum). Bu nedenle, henüz bir Upstart yapılandırma komut dosyası içermeyen bir paket yüklersek, yine de olağan şekilde başlatılması gerekir.

Ayrıca, chkconfig gibi yardımcı programları kurduysak, bunları SysV tabanlı hizmetlerinizi yönetmek için tıpkı sysvinit tabanlı sistemlerde yaptığımız gibi kullanabilmelisiniz.

Başlangıç komut dosyaları ayrıca SysV başlangıç komut dosyalarına göre daha geniş bir eylem yelpazesine dayalı olarak hizmetlerin başlatılmasını veya durdurulmasını destekler; örneğin Upstart, belirli bir donanım aygıtı bağlandığında bir hizmeti başlatabilir.

Upstart'ı ve yerel komut dosyalarını kullanan bir sistem, yalnızca /etc/inittab dosyasını ve çalışma düzeyine özgü SysV başlangıç komut dosyası dizinlerini .conf ile değiştirir. /etc/init dizinindeki komut dosyaları.

Bu *.conf komut dosyaları (iş tanımları olarak da bilinir) genellikle aşağıdakilerden oluşur:

    1. Sürecin açıklaması.
    2. Sürecin çalışması gereken çalışma seviyeleri veya onu tetiklemesi gereken olaylar.
    3. Sürecin durdurulması gereken çalışma seviyeleri veya onu durdurması gereken olaylar.
    4. Seçenekler.
    5. Süreci başlatma komutu.

Örneğin,

My test service - Upstart script demo description "Here goes the description of 'My test service'" author "Dave Null <[email >"
Stanzas

#
Stanzas define when and how a process is started and stopped
See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn
When to start the service
start on runlevel [2345]
When to stop the service
stop on runlevel [016]
Automatically restart process in case of crash
respawn
Specify working directory
chdir /home/dave/myfiles
Specify the process/command (add arguments if needed) to run
exec bash backup.sh arg1 arg2

Değişiklikleri uygulamak için, upstart'a yapılandırmasını yeniden yüklemesini söylemeniz gerekir.

initctl reload-configuration

Daha sonra aşağıdaki komutu yazarak işinize başlayın.

sudo start yourjobname

Burada işinizinadı, işinizinadı.conf komut dosyasıyla daha önce eklenmiş olan işin adıdır.

Upstart için daha eksiksiz ve ayrıntılı bir referans kılavuzu projenin web sitesinde “Yemek Kitabı” menüsü altında mevcuttur.

Özet

Linux önyükleme süreci bilgisi, sorun giderme görevlerinde size yardımcı olmanın yanı sıra bilgisayarın performansını uyarlamak ve hizmetleri ihtiyaçlarınıza göre çalıştırmak için gereklidir.

Bu makalede, makineyi açmak için Güç anahtarına bastığınız andan tamamen işlevsel bir kullanıcı arayüzü elde edene kadar ne olduğunu analiz ettik. Umarım siz de benim kitabı bir araya getirirken öğrendiğim kadar okumayı öğrenmişsinizdir. Yorumlarınızı veya sorularınızı aşağıya bırakmaktan çekinmeyin. Okuyucularımızdan her zaman haber almayı sabırsızlıkla bekliyoruz!