Linux Sistemlerde Shutdown -r ve Reboot Komutları Arasındaki Farklar

Bir Windowsçu olarak Linux türevlerini “gözünün yağını yediğim işletim sistemleri” olarak adlandırırım. Kişisel kullanımda Windows tercih ederken, sunucu ve benzeri ortamlar için Linux türevleri kullanırım.

Windows ile 1995’de tanışırken, Linux ile ilk olarak 2000 yılında tanışmıştım. Ufkumun açıldığı o yıllardan beridir de bir linux işletim sistemimi (türevi ne olursa olsun) yeniden başlatmam gerektiğinde komut satırına “reboot” yazarak ilerlerdim.

Evet, shutdown -r yazmaya üşendiğim, ezberim, uğraşmak istemediğim veya Linux’un yapısına olan güvenim ile sürekli kullanmama rağmen beni reboot sırasında yarı yolda bırakmayan tecrübelerim “reboot” komutunu seçmeme neden olmuştur. Halbuki yeniden başlatmak için farklı seçenekler de mevcuttu.

Bugün bir arkadaşımla benim sunucuya ufak bir ayar çekiyorduk. Yeniden başlatmam gerekti ve komut satırına “Reboot” yazarak gömdüm sistemi…

Arkadaşım Musab; “Hamza Shutdown -r yapsaydın ya?” (kendisi müthiş bir linux uzmanıdır) uyardı. Uyardı da dinleyen kim? Hacım ne olacak, yürüsün gitsin bugüne kadar sıkıntı çıkmadı…

İlk yeniden başlatma sırasında da sorun çıkmadı. Neyse biz ayar çekip diğer bir yandan reboot komutu atmaya devam ediyordum ki… Komut satırına yazdığım üçüncü “Reboot” sonrasında makinede büyük bir sorunla karşılaştım. Makine ayağa kalktı kalkmasına da Maria DB patlamıştı. Yalnızca içerideki databaselerim değil, MariaDB komple çöktü!

Lan! MariaDB gitmiş lan! Veritabanı ayağa kalkmıyor?

Neyse ellem ettik, kullem ettik, Mysql’i ayağa kaldırdık. Ancak bu sefer de WordPress databasemde sorun vardı ve içerideki yorumlar tablosu (wp_comments) zarar görmüştü. Uğraşıp düzeltmeye çalışırken geri dönülmez bir hale geldiğini fark edip, yedekten geri dönmek zorunda kaldım.

Reboot Komutunda Bugüne Kadar Şansım Yaver Gitmişti…

Reboot Komutu Nedir?

Reboot komutu sistemi yeniden başlatmak için kullanılır. İlk olarak sistemi kapatır, ardından da sistemi açar ve işletim sistemi ayağa kalkar. Linux’u yeniden başlatmak için herhangi bir seçenek olmadığı durumlarda, doğrudan yeniden başlatma komutu olan reboot’u çağırmanız yeterli olacaktır. Yalnız bu komut biraz riskli bir durum ortaya koyar. Sistem cevap vermediğinde servisler kilitlendiğinde veya işletim sisteminizde oluşan ve sistemin kilitlenmesine sebep olan servisler gibi durumlarda kullanılır. Bir nevi acil durum yeniden başlatma komutu olarak görebilirsiniz.

Windows üzerinde taskmgr komutunu çağırıp, çalışan tüm prosesleri sağ tıklayarak “işlemi durdur” yaptığınızı düşünün. Sonrasında ise CTRL ALT DELETE yaparak sistemi yeniden başlattığınızı….

Bu sebeple, genel olarak sudo komutu ile birlikte kullanılması gerekecektir. Eğer root yetkiniz yoksa, reboot komutunu çalıştırmak için “sudo reboot” olarak kullanmanız zorunludur. Çünkü reboot komutu arka planda çalışan prosesleri öldürür ve Init tarafında root yetkisi ister.

Shutdown Komutu Nedir?

Sistemi kapatmak veya yeniden başlatmak için (shutdown -r) komutu kullanılır. Güvenli bir yeniden başlatma yöntemidir. Çünkü Reboot komutunun aksine Shutdown -r ile sistemi yeniden başlatırsanız arka plandaki tüm servislere durdurma ve kendilerini kapatma emri gönderilir. Uygulamaların kendini kapatmasının ardından sistem kapatılır ve sonrasında yeniden açılır. Kısacası arka planda çalışan servisler öldürülmez, servisin kendini kapatması için emir gönderilir. Bu, bilgisayarın zarif bir şekilde kapatılmasını ve yeniden başlatılmasını sağlar. Grafik arayüz üzerinden yeniden başlat’ı tıklattığınızda olan budur.

Reboot ile Shutdown -r Arasındaki Farklar Nelerdir?

Reboot komutu ile shutdown -r arasındaki tek fark budur. Birisi güvensiz bir şekilde servisleri öldürerek sistemi yeniden başlatır, diğeri ise güvenli bir şekilde yani servislerin kendini kapatmasına fırsat vererek çalışır.

Reboot yazarak sistemi yeniden başlatmak çok kısa sürecektir. Çünkü yalnızca Init tarafından cevap bekler. Uygulamalarınızı umursamaz. Ancak Shutdown -r now komutunda çalışan tüm proseslerin kendini kapatması emredilerek beklemeye başlanır. Bu sebeple shutdown -r now komutu reboot’a göre biraz daha uzun bekleme süresine sahiptir.

Reboot komutunu da kullanmamız gereken durumlar vardır. Mesela bir servis arka planda kilitlenebilir ve Shutdown -r now yaptığınızda servis cevap vermediği için güvenli yeniden başlatma yöntemi işe yaramayabilir. Shutdown komutu o prosesin kilitlendiğine bakmaz ve prosesten cevap bekler. Doğal olarak bu gibi durumda reboot komutunu kullanırız.

Ancak reboot komutunun servisleri direkt olarak öldürdüğünü kritik servislere kadar her çalışan uygulamayı öldürmesi sırasında işleyen bir veri varsa veri kaybına yol açabileceğini unutmamanız gerekiyor.

Bugün başıma gelen de bu duruma sebep oldu. Sunucu üzerindeki Maria DB yüksek bir işlem gerçekleştiriyordu. Ben bundan habersiz olarak ve aklımın ucuna dahi getirmeden, reboot komutunu kullandım. Doğal olarak arka planda çalışan Maria DB ve WordPress database üzerindeki işlem kill edildi ve yarıda kalan işlemler yüzünden Maria DB çöktü. Reboot sonrası bir daha ayağa kalkmadı. Maria DB’yi bir şekilde yeniden yükledim ve düzelttim. Amma ve lakin o sırada 35 bin yorumu barındıran wp_comments tablosu da bozulmuştu. Onarmak ise işe yaramadı ve yedekten geri dönmek zorunda kaldım.

Bu yüzden bir saat vakit kaybettim ve sorunu çözmek, neden olduğunu anlamak için birkaç dakika afalladığımı da itiraf etmeliyim. Elbette ki ilk şoktan sonra kafama dank etti.

Ancak 19 senedir kullandığım reboot komutu ilk defa bana veri kaybı yaşatmıştı.

Yahu yum update yapıp, kernel güncellemesi aldığımda dahi reboot yazıp enter yapıyordum. Bugüne kadar veri kaybı ile karşılaşmadım!

Evet, karşılaşmama ihtimalimiz var ancak düşük, sistemi çökertme, devre dışı bırakma, veri kaybına uğratma gibi birçok sorunun arkasında yatan işlem sırasında processi yarıda kesip öldürmektir.

Sonuca baktığımızda iki komut da sistemi yeniden başlatmaya yarıyor. Temel mantık olarak aralarında hiçbir fark yok da denilebilir. Aynı işi yapıyorlar.

Tüm çalışan işlemleri sonlandırmak, tüm dosya sistemlerini kaldırmak ve sonunda çekirdeğe ACPI güç komutu vermesini bildirmek için kullanılan kapatma komutlarını ayıran nokta, prosesleri öldürerek kapatmak veya güvenle servisleri durdurup, yeniden sistemi başlatmak.

Eski dağıtımlar yeniden başlatma komutu verdiğinizde işlemlerden çıkmak için süreçleri zorluyordu. SIGKILL sinyali ve dost init init 1 -> shutdown -r gibi kullanılmaktaydı. Bu dalemonların kapanmadan önce kendilerini temizlemelerini sağlardı.

Günümüzde, her iki komut da aynı şekilde hareket ettiği için pek bir fark yoktur. Bu iki komutu yazıp giriş yaptığınız zaman kapatma komut dosyalarını çağırarak hizmetleri / günlükleri başlatmak için kullanılan init komut dosyalarına öncelik gösterilerek işlem yapılır.

Eskiden böyle değildi. Eski sistemlerde reboot komutunu attığınız zaman direkt olarak anakarta gücü kes emri giderdi. Sonuçları da genellikle ağır olurdu. Ancak yeni nesil işletim sistemlerinde servisleri öldürse de reboot komutunun dahi INIT süreçlerinden cevap beklendiğini unutmamak gerekiyor.

Dilerseniz Reboot -f -r Now Komutuyla İntihar da Edebilirsiniz 🙂

Neden reboot -f kullanırsak intihar etmiş oluruz, güvenli olmadığına dair man sayfalarından yapılan küçük bir açıklamadan bahsetmek istiyorum.

-f, –force: Hemen durmaya zorla, kapat, yeniden başlat. Init sistemiyle temas kurmayın.

Yani bu komutta arka planda çalışan servisleri geçtim, sistemin INIT işlevleri ile dahi ilişki kurmaz. Direk olarak anakarta gücü kapat emri gönderilir. Doğal olarak sistemi çökertmeye kadar yolu var diyebiliriz.

Güvenli Yeniden Başlatma!

Sisteminizi güvenle yeniden başlatmak istiyorsanız aşağıdaki komutu kullanmanız en mantıklı yol olacaktır.

shutdown -r now

Now değeri yeniden başlatmayı zamanlamayı sağlar. Eğer Now yerine 22:00 yazarsanız sistem 22:00’da kendini kapatacaktır.

Geleneksel birliklerde reboot ve shutdown -r now çok farklı komutlar vardır. Tipik kullanım altında reboot, sadece tek kullanıcı modunda kullanmak güvenlidir. Eğer çoklu kullanıcı olan bir sistemde reboot kullanıyorsanız karşı tarafın proseslerini öldüreceğinizi de unutmayın.

Gerçi Linux türevleri çok gelişti. Yeni nesil sistemlerde Reboot komutunu dahi güvene almaya başladılar. Artık bazı sistemlerde eskisi gibi…

Kill -9 -1…

rm -rf ./

Komutunu atamıyorsunuz, sizi hemen uyarıyor. Eskiden uyarı mı vardı? Çat diye tüm diski uçurur arkasına bile bakmazdı 🙂

Okuduğum kadarı ile reboot komutunda da bazı güncellemeler yapılıyormuş. Yakında reboot yazıp entere bastığımızda kullandığımız sistem… Dur arkadaş arkada izin bekleniyor! şeklinde uyarı yaparsa hiç şaşırmayacağım.

Varsa yanlışım yorum kutucuklarına yazmanızı rica ediyorum. Güvenli yeniden başlatmalar dileklerimle….

“Linux Sistemlerde Shutdown -r ve Reboot Komutları Arasındaki Farklar” üzerine 3 yorum

  1. Ben her zaman GNU-Linux Dağıtımlarımda (Mandriva/Ubuntu/Debian)sudo /s reboot force komutunu daima kullandım ve işin garibi hiçte VERİ KAYBI DA YAŞAMADIM.

    Sizin durumunuz “BAHTSIZ BEDEVİNİN ÇÖL’DE KUTUP AYISI İLE KARŞILAŞMASINA ” benziyor……!

    Yanıtla
  2. Hocam Yanlış bilgi vermeyin insanlara. Shutdown kullanarak database corrupt yapacaklar db servisinide düzgün kapatıyor diye düşünerek. .Shutdown -r ile reboot arasında bir fark yoktur.

    There is no difference in them. Internally they do exactly the same thing: reboot uses the shutdown command (with the -r switch). The shutdown command used to kill all the running processes, unmount all the file systems and finally tells the kernel to issue the ACPI power command

    Yanıtla

Yorum yapın