- GNU/Linux'ta hazırda bekletme (hibernation) işlemi, RAM'in tüm durumunu takas alanına kaydeder ve bilgisayarı kapatır; askıya alma (suspend) işlemi ise düşük güç tüketimiyle RAM'deki belleği korur.
- Uyku modunun güvenilir bir şekilde çalışması için çekirdek desteği ve yeterli takas alanı gereklidir; bu, bir takas bölümü veya iyi yapılandırılmış bir takas dosyası olabilir.
- Çeşitli araçlar (systemd, pm-utils, uswsusp ve PolicyKit), dağıtım ve kullanım senaryosuna bağlı olarak hazırda bekletme ve askıya alma özelliklerini etkinleştirmenize, kontrol etmenize veya devre dışı bırakmanıza olanak tanır.
- Askıya alma, hazırda bekletme veya oturum geri yükleme ile yeniden başlatma seçeneklerinden birini seçmek, enerji tasarrufu, işe dönüş hızı ve sistem istikrarı arasında aradığınız dengeye bağlıdır.
GNU/Linux'taki hazırda bekletme modu , herkesin duyduğu ancak her zaman iyi anlaşılmayan veya doğru şekilde yapılandırılmayan özelliklerden biridir. Birçok kullanıcı, Windows veya dizüstü bilgisayarlarının beklenmedik şekilde kapanmasıyla ilgili sorunlar yaşıyor ve her güç modunun tam olarak ne işe yaradığını ve Linux dağıtımlarında nasıl kontrol edileceğini öğrenmek istiyor.
En yeni çekirdek sürümlerinde ve ana dağıtımlarda işler önemli ölçüde iyileşti, ancak hazırda bekletme, askıya alma ve belge yeniden açma ile kapatma arasında önemli nüanslar ve takas kullanımı (bölüm veya dosya) gibi anlaşılması gereken teknik ayrıntılar hala mevcut. Tüm bunları sakin, ancak açık ve pratik bir şekilde ele alalım.
Uyku modu, askıya alma ve oturum geri yükleme ile yeniden başlatma: Aralarındaki farklar
Ayarlarda herhangi bir şeye dokunmadan önce, her güç tasarrufu modunun aslında ne işe yaradığını anlamak çok önemlidir , çünkü kavramlar sıklıkla karıştırılır ve ardından veri kaybı veya pilin bitmesi gibi sorunlar ortaya çıkar.
İşletim sistemlerinde hazırda bekletme (hibernasyon) dediğimizde, tüm sistem durumunu donduran bir işlemden bahsediyoruz : açık programlar, belgeler, hizmetler, masaüstü ayarları, tamponlar vb. RAM'deki tüm bu içerik kalıcı bir depolama ortamına (genellikle disk takas alanına) kaydedilir ve makine tamamen kapatılır.
Bu , hazırda bekletmenin, dosyaları açık bırakıp bilgisayarı kapatmakla veya askıya almakla aynı şey olmadığı anlamına gelir . RAM'e askıya almaktan daha yavaştır, ancak bilgisayar tamamen kapalı olduğundan ve elektrik tüketimi olmadığından önemli ölçüde daha fazla enerji tasarrufu sağlar.
Öte yandan, bazı sistemler "belgeleri yeniden açarak yeniden başlatma"ya benzer bir özellik sunar; bu özellikte sistem normal şekilde kapanır, ancak yeniden başlatıldığında açık olan uygulamalar otomatik olarak yeniden başlatılır . GNU/Linux'ta birçok dağıtım bu masaüstü ortamı davranışını taklit eder, ancak bu hazırda bekletme değildir: tüm hizmetlerin sıfırdan başlatıldığı bir soğuk başlatma işlemidir.
Hazırda bekletme modunun, uygulama geri yükleme ile yeniden başlatmaya göre avantajı, çekirdek ve kullanıcı alanının sıfırdan yeniden başlatılmamasıdır ; bunun yerine, önceki durumun eksiksiz bir görüntüsü geri yüklenir. Bu nedenle, her şey doğru çalıştığında, belgeleri yeniden açmadan veya pencereleri yeniden yapılandırmadan, kaldığınız yerden işinize devam edebilirsiniz.
Linux'ta askıya alma (suspension) nedir ve neden kullanmaya değer?
Uyku modunda, işletim sistemi mevcut durumun (programlarınız, belgeleriniz, masaüstünüz) canlı bir görüntüsünü oluşturur, ancak bunu diske yazmak yerine, geçici olan RAM'de bırakır.
Sistem askıya alındığında, çekirdek neredeyse tüm donanım aygıtlarını kapatır: disk, ekran, yonga setinin çoğu... Güç açık kalan tek bileşenler RAM ve anakartın en temel bileşenleridir ; bu sayede bir tuşa bastığınızda, fareyi hareket ettirdiğinizde veya dizüstü bilgisayar kapağını açtığınızda "uyanma" sağlanabilir.
Bu mod , masaüstünüze neredeyse anında dönmek istediğinizde ve bilgisayar boşta iken güç tüketimi konusunda çok endişelenmediğinizde harika bir seçenektir. Modern bir dizüstü bilgisayar, pil gücüyle bir ila üç gün boyunca uyku modunda kalabilir, ancak bu süre zarfında RAM'i çalışır durumda tutmak için bir miktar enerji tüketir.
Normal uyku modu, özellikle 2 GB'tan fazla RAM'iniz varsa ve disk alanınız sınırlıysa (örneğin, küçük SSD'lerde) veya bilgisayarı çok yakında tekrar kullanacaksanız önerilir. Bu durum, ders aralarında birkaç dakika için kapağı kapattığınızda veya öğle yemeği için durduğunuzda tipiktir.
Hibrit süspansiyon: RAM ve disk frenlerin birleşimi
Üçüncü ve daha az bilinen bir mod daha var: hibrit askıya alma . Bu durumda, sistem tüm hazırda bekletme işlemini gerçekleştirir (belleğin içeriğini diske, genellikle takas alanına yazar), ancak tamamen kapanmak yerine RAM'de askıya alınmış bir duruma geçer.
Bu durum karma bir senaryo yaratıyor: Pil ömrü yeterliyse, sistemi normal bir uyku modunda olduğu kadar hızlı bir şekilde uyandırabilirsiniz ; ancak güç biterse, kaydedilen disk görüntüsü, oturumu sanki hazırda bekletme moduna geçmiş gibi geri yüklemenizi sağlayacaktır.
Bu modun dezavantajı, diske yazma işlemi yaptığı ve RAM'i de açık tuttuğu için, saf bir askıya alma işlemine göre giriş ve çıkış sürelerinin daha uzun olmasıdır . Bu nedenle, durum kaybına karşı ekstra güvenlik seviyesi gerektiren sunucularda veya iş istasyonlarında sıklıkla kullanılır.
GNU/Linux'ta hazırda bekletme modu dahili olarak nasıl çalışır?
Bir GNU/Linux sistemini uyku moduna aldığınızda, çekirdek makinenin tüm durumunu yakalamak ve geri yüklemek için önceden tanımlanmış bir dizi adım yürütür . Bu, sadece "RAM'i bir dosyaya kaydetmek" ve işin bitmesi meselesi değildir.
Tipik diskten askıya alma işlemi şu genel sırayı izler:
- Kullanıcı işlemleri durduruldu. Yakalama işlemi yapılırken durumunu dondurmak ve belleği değiştirmeye devam etmesini önlemek.
- Denetleyiciler ve DMA ile ilgili bellek değişikliklerini önlemek için donanım aygıtları dondurulur veya durdurulur.
- Kış uykusunun görüntüsü oluşturuldu: RAM'in tüm içeriği kopyalanır. Kesintiler devre dışı bırakılarak.
- Donanım aygıtları kontrollü bir şekilde yeniden etkinleştirilir.
- Resim şu şekilde yazılmıştır: takas alanıBu durumda, askıya alma alanı (swsusp veya linux-suspend) olarak kabul edilir.
- Son olarak, tüm aygıtlar askıya alınır ve bilgisayar tamamen kapatılır.
Yeniden başlatma işleminde, önyükleme sistemi geçerli bir hazırda bekletme görüntüsünün olup olmadığını kontrol eder :
- Evet var, Normal şekilde başlamıyor.Ancak takas işleminden gelen görüntüyü okuyor.
- Paraziti önlemek için cihazlar tekrar donduruldu.
- Görüntü takas belleğinden RAM'e kopyalanır ve süreçleri ve cihazları yeniden etkinleştir Kış uykusuna yatmadan önceki hallerine benziyorlardı.
Gerçek dünya testlerinde gözlemlenen ilginç bir ayrıntı, uyku modundan çıktıktan sonra, eski "linux-swap partition" bölümünün GParted veya parted gibi araçlarda linux-suspend veya swsusp olarak etiketlenmesidir . Bölüm türündeki bu değişiklik, sistemin uyku modundan geri yükleme mi yoksa temiz önyükleme mi yapacağına karar vermek için kullandığı ipuçlarından biridir.
Kış uykusu sırasında takas yapmanın önemi
Bu mekanizmanın tamamı temel bir gereksinimi içerir: Linux'ta hazırda bekletme moduna geçmek için hem boyut hem de yapılandırma açısından yeterli takas alanına ihtiyacınız vardır . Takas alanı olmadan, sistemin RAM görüntüsünü depolayacak yeri olmaz.
Takas şu şekilde olabilir:
- bir özel bölüm Linux-swap sistem türüyle.
- Un takas dosyası Normal bir dosya sisteminde bulunur (örneğin, /swapfile dizininde).
Pratik amaçlar için, çekirdek her ikisini de şeffaf bir şekilde takas alanı olarak ele alır. Ancak, bir takas dosyası, hazırda bekletme hedefi olarak Çekirdeğe, önyükleme yöneticisi aracılığıyla, aşağıdaki gibi parametreleri bildirmeniz gerekir: resume= (cihaz) ve resume_offset= (Dosya içindeki yer değiştirme). Bu yapılmazsa, sistem sıfırdan başlatılacak ve diske yazılmış olsa bile imaj geri yüklenmeyecektir.
Boyut konusunda, güvenilir hazırda bekletme için klasik öneri, takas alanının en az fiziksel RAM boyutu kadar olmasıdır . Sistem ağır yük altındaysa, bazen biraz daha küçük bir takas alanı ile hazırda bekletme mümkün olabilir, ancak bu kesin bir şey değildir ve genelleştirilmemelidir. 32 GB veya 64 GB veya daha fazla RAM'e sahip sistemlerde, birçok yönetici zaman ve alan kısıtlamaları nedeniyle hazırda bekletmeyi tamamen önermez.
Ayrıca , zram veya zswap gibi mekanizmaların RAM'in içinde sıkıştırılmış bir takas alanı oluşturduğunu da hatırlamakta fayda var . Bunlar, sınırlı belleğe sahip sistemlerde performansı artırmak için harika olsa da, uyku moduna geçmek için uygun değiller: uçucu oldukları için, güç kesildiğinde görüntü kaybolur.
Takas bölümünde hazırda bekletme mi yoksa takas dosyasında mı?
Yıllarca, sorunsuz bir şekilde hazırda bekletme moduna geçmek istiyorsanız, özel bir takas bölümüne sahip olmak neredeyse zorunlu kabul ediliyordu . Çekirdeğin ve initramfs gibi araçların davranışı büyük ölçüde bu klasik modele dayanıyordu.
Ancak, Ubuntu'nun son sürümleri gibi birçok modern dağıtım, varsayılan olarak bölümleme yerine takas dosyası kullanmaya geçmiştir . Bu, hazırda bekletme özelliğini kaybettiğiniz anlamına gelmez; sadece sistem durumunun kaydedildiği yeri değiştirir.
Her iki durumda da temel süreç aynıdır: RAM'deki görüntü kalıcı takas alanına aktarılır.Aradaki fark şu ki, takas dosyası kullanıldığında sistemin dosyanın başladığı disk üzerindeki tam bloğu bilmesi gerekiyor (bu nedenle parametre kullanılıyor). resume_offset(Başlangıç aşamasında görüntüyü erken okuyabilmek için.)
Debian ve Debian tabanlı makinelerde yapılan pratik deneyler, hazırda bekletme görüntüsünün depolandığı takas bölümünün biçimlendirilmesinin veya silinmesinin, hazırda bekletme hiç gerçekleşmemiş gibi temiz bir önyükleme ile sonuçlandığını göstermiştir . Bu, görüntünün gerçekten takas bölümünde depolandığını ve diskin başka bir yerinde depolanmadığını doğrulamaktadır.
Dağıtımlarda çekirdek gereksinimleri ve desteği
Takas alanına ek olarak, Linux çekirdeğinde hazırda bekletme desteğinin etkinleştirilmiş olması gerekir . Kendi çekirdeğinizi derlerseniz ve bu seçeneği devre dışı bırakırsanız, dağıtımda ne kadar yapılandırma değişikliği yaparsanız yapın, hazırda bekletme moduna geçemezsiniz.
Pratikte, çoğu dağıtım projenin kendisi tarafından paketlenmiş çekirdeği kullanır ve bu durumlarda uyku modu, diğer olağan güç yönetimi işlevleri ve sürücüleriyle birlikte genellikle varsayılan olarak etkinleştirilir .
Ancak, tüm dağıtımlar grafik menülerinde "Hazırda Beklet" düğmesini her zaman göstermez. Ubuntu'nun bazı sürümleri gibi bazıları, çekirdek ve hazırda bekletme altyapısı tamamen çalışır durumda olsa bile, masaüstündeki bu seçeneği varsayılan olarak gizler .
PolicyKit kullanarak Ubuntu'da hazırda bekletme modunu nasıl etkinleştiririm?
Ubuntu sistemlerinde, kapatma menüsünde hazırda bekletme seçeneği görünmüyorsa, bazı PolicyKit kurallarını değiştirerek nispeten kolay bir şekilde yeniden etkinleştirilebilir . Buradaki fikir, normal kullanıcıların upower ve logind'in hazırda bekletme işlemlerini çağırmasına izin vermektir.
Tipik işlem, örneğin bir yapılandırma dosyası oluşturmayı içerir. com.ubuntu.enable-hibernate.pklaİçeriği buna benzer (araçlarınızın kullandığı sözdizimine uyarlanmış):
Kimlik = Unix kullanıcı: *
Eylem = org.freedesktop.upower.hibernate
ResultActive = yes
Kimlik = Unix kullanıcı: *
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate-multiple-sessions
ResultActive = yes
Dosya oluşturulduktan sonra, ilgili klasöre yerleştirilmelidir. /etc/polkit-1/localauthority/50-local.d/Bunu yapmak için dosya yöneticinizi yönetici olarak açabilirsiniz (örneğin şu komutla): gksudo nautilus (Hâlâ destekleyen ortamlarda) ve o dizine yapıştırın.
Sistemi yeniden başlattıktan sonra, Ubuntu masaüstü, kapatma, yeniden başlatma ve askıya alma seçeneklerinin yanında hazırda bekletme seçeneğini de gösterecektir . Elbette, yeterince büyük bir takas alanı ve hazırda bekletme desteği olan bir çekirdek hala gereklidir.

Terminalden uyku moduna geçme ve askıya alma komutları
Önceden yapılandırılmış güç düğmelerinin bulunmadığı terminal veya hafif ortamları (Fluxbox, IceWM, Openbox, JWM, vb.) tercih ediyorsanız, hazırda bekletme ve uyku modlarını doğrudan komutlarla kontrol edebilirsiniz.
pm-utils kullanımı
Birçok klasik Debian/Ubuntu dağıtımında, pm-utils paketi birkaç basit komut sağlar:
- pm-askıya alBu işlem, makineyi RAM'e askıya alır. Çoğu aygıt kapatılır ve durum bellekte saklanır. Güç tüketimi önemli ölçüde azalır, ancak yine de enerji kullanılır.
- pm-uyku haliSistemi uyku moduna geçirir; bu işlemde RAM diske (takas alanına) kaydedilir ve bilgisayar tamamen kapatılır.
- pm-askıya alma-hibritDisk üzerinde hazırda bekletme işlemi gerçekleştirir ve kapanmak yerine RAM'i uyku moduna alarak "hibrit uyku" sağlar.
Temel kullanım şekli şöyle olurdu:
sudo pm-suspend
sudo pm-hazırda bekletme
sudo pm-suspend-hybrid
Arch Linux tabanlı sistemlerde ve depolarında bu özelliği barındıran diğer dağıtımlarda da bu komutları kullanabilirsiniz, ancak pm-utils birçok modern dağıtımda systemd lehine terk edilmiştir .
systemd (systemctl) kullanarak
Systemd kullanan dağıtımlarda (OpenSUSE, Arch ve türevlerinin birçok sürümü, modern Debian vb.), önerilen yöntem systemctl kullanmaktır :
- systemctl askıya alRAM'i askıya alır.
- systemctl hibernate: Diske uyku moduna geçiyor.
- sistemctl hibrit-uykuHibrit süspansiyonu etkinleştirir.
Örneğin, OpenSUSE'de veya herhangi bir tipik systemd sisteminde, doğrudan şu komutu çağırabilirsiniz:
sudo systemctl hazırda bekletme
Birçok dağıtımda, eski araçlarla uyumluluğu korumayı tercih ederseniz, pm-hibernate hala mevcuttur ve yapılandırmaya bağlı olarak systemd ile birlikte çalışır veya ona yetki devreder.
uswsup: s2ram, s2disk ve s2both komutlarını kullanma
Günümüzde daha az yaygın olan bir diğer araç ailesi ise s2ram, s2disk ve s2both komutlarını sağlayan uswsusp'tur . Bu araç, belirli sürümlere kadar (Debian 10; Ubuntu 20.04 ve sonraki sürümlerinde kullanımdan kaldırılmıştır) Debian ve Ubuntu'da mevcuttu.
- s2ram: Sistemi RAM'e (S3 modu) askıya alır. Bu, pm-suspend veya systemctl suspend komutlarına eşdeğerdir.
- s2disk: Tüm durumu diske kaydeder ve makineyi kapatır (klasik hazırda bekletme).
- s2bothBu yöntem, her iki işlemi de birleştirir: görüntüyü diske yazar ve ardından RAM'e askıya alır, böylece hibrit bir davranış elde eder.
Komutlar şöyle olurdu:
sudo s2ram
sudo s2disk
sudo s2both
Bu yardımcı programlar, başlatma sırasında devam mekanizmasının çağrılması ve varsa imajın geri yüklenmesi için initramfs'nin doğru şekilde yapılandırılmasını gerektirir .
GNU/Linux sistemlerinde uyku ve hazırda bekletme modlarını nasıl devre dışı bırakabilirim?
Sınıf ortamları, paylaşımlı bilgisayarlar veya halka açık iş istasyonları gibi bazı ortamlarda, uyku ve hazırda bekletme modları, kullanıcılara açıklanması zor olan beklenmedik kapanmalara, ağ sorunlarına veya donmalara neden olabilir . Bu gibi durumlarda, bazen en pratik çözüm bu işlevleri tamamen devre dışı bırakmaktır.
systemd kullanarak devre dışı bırak (hedef maskesi)
Sisteminiz systemd kullanıyorsa, uyku ve hazırda bekletme ile ilgili hedefleri maskeleyerek bunların ne grafik menülerden ne de terminalden etkinleştirilememesini sağlayın:
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
Bu işlem, söz konusu hedefleri /dev/null'a yönlendirerek sembolik olarak "çöp kutusuna" gönderir. Yeniden başlatmanın ardından, askıya alma veya hazırda bekletme girişimlerinin tümü sorunsuz bir şekilde başarısız olur.
Daha sonra normal davranışı geri yüklemek isterseniz, yalnızca şunu kullanmanız gerekecektir:
sudo systemctl unmask sleep.target suspend.target hibernate.target hybrid-sleep.target
PolicyKit ile hazırda bekletme ve askıya alma düğmelerini devre dışı bırakın.
Daha iyi bir seçenek de şudur: PolicyKit ile askıya alma/uyku moduna geçme izinlerini kaldırma Tüm kullanıcılara. Örneğin, dosyaları şu şekilde oluşturabilirsiniz: /etc/polkit-1/localauthority/90-mandatory.d/ gibi:
/etc/polkit-1/localauthority/90-mandatory.d/disable-suspend.pkla
Kimlik = Unix kullanıcı: *
Action=org.freedesktop.upower.suspend
ResultActive = hayır
ResultInactive=no
ResultAny=no
Kimlik = Unix kullanıcı: *
Eylem=org.freedesktop.login1.suspend
ResultActive = hayır
Kimlik = Unix kullanıcı: *
Action=org.freedesktop.login1.suspend-multiple-sessions
ResultActive = hayır
Ve kış uykusu için :
/etc/polkit-1/localauthority/90-mandatory.d/disable-hibernate.pkla
Kimlik = Unix kullanıcı: *
Eylem = org.freedesktop.upower.hibernate
ResultActive = hayır
ResultInactive=no
ResultAny=no
Kimlik = Unix kullanıcı: *
Eylem=org.freedesktop.login1.hibernate
ResultActive = hayır
Kimlik = Unix kullanıcı: *
Action=org.freedesktop.login1.hibernate-multiple-sessions
ResultActive = hayır
Yeniden başlatmanın ardından, askıya alma ve hazırda bekletme düğmeleri grafik menülerden kaybolacak ve kullanıcının bunları yanlışlıkla etkinleştirmesi önlenecektir.
Klavye kısayollarını ve doğrudan komutları engelle
Düğmeleri gizleseniz bile, bazı masaüstü bilgisayarlar ve klavyelerde hala işlev görebilecek özel uyku/hazırda bekletme tuşları bulunur . Klasik GNOME'un kullanıldığı eski ortamlarda bu, şu komutlarla ayarlanabiliyordu:
gconftool -s /apps/gnome-power-manager/buttons/hibernate -t string interactive
Ayrıca, komut dosyaları oluşturabilirsiniz. /etc/pm/sleep.d/Gibi /etc/pm/sleep.d/000cancel-hibernate-suspend, hangi basitçe Askıya alma veya uyku moduna geçirme girişimlerini iptal edin. Kontrolü sisteme geri vermek. Tipik bir iskelet şu şekilde olabilir:
#! / Bin / sh
# hazırda bekletme ve askıya almayı engeller
. «$PM_FONKSİYONLARI»
durum «${1}» içinde
askıya al|uyku moduna al)
engellemek
;;
özgeçmiş|çözülme)
çıkış 0
;;
esac
Çalıştırma izinlerini vermeyi unutmayın:
chmod 0755 /etc/pm/sleep.d/000cancel-hibernate-suspend
Kış uykusuna yatmak ne zaman uygun, ne zaman uygun değil?
Tüm bu teori ortaya konulduktan sonra, pratik kısım kalıyor: GNU/Linux'ta uyku moduna geçmek gerçekten ne zaman faydalı olur? Tek bir cevap yok, ancak bazı makul kılavuzlar mevcut.
Önceliğiniz enerji tasarrufu ise (örneğin, uzun saatler boyunca kullanılmadan bıraktığınız bir dizüstü bilgisayarda) ve bellek görüntüsü için yeterli disk alanınız varsa, hazırda bekletme modu çok cazip bir seçenektir; bilgisayarınızı kapatma, askıya alma veya hazırda bekletme arasında nasıl seçim yapacağınızı okuyabilirsiniz . Hazırda bekletme modunda enerji tüketimi sıfırdır ve yeniden başlattığınızda, soğuk başlatmaya göre çok daha hızlı açılır.
Masaüstüne dönüşte saf hız istiyorsanız ve bilgisayarı yalnızca kısa bir süre için boşta bırakacaksanız , RAM'e askıya alma daha uygun olabilir. Makine yine de bir miktar pil gücü kullanacaktır, ancak devam etme neredeyse anında gerçekleşecektir.
Çok fazla RAM'e sahip bilgisayarlarda veya yeniden başlatmada kararlılığın garanti edilmediği sistemlerde (bazı sıra dışı donanımlar, egzotik sürücüler vb.), hazırda bekletme modundan vazgeçip, gerektiğinde belge kurtarma ile temiz bir yeniden başlatmayı tercih etmek genellikle faydalıdır.
Sonuç olarak, bu işlevlerin takas belleğine nasıl dayandığını, çekirdeğin perde arkasında neler yaptığını ve systemd, pm-utils, uswsusp veya PolicyKit gibi araçlarla nasıl kontrol edileceğini anlamak, hazırda bekletme ve askıya alma işlevlerini, bazen çalışan bazen de dizüstü bilgisayarı görünürde hiçbir açıklama olmadan "sıkışmış" halde bırakan gizemli işlevler olarak değil, kendi avantajınıza kullanabileceğiniz araçlar olarak ele almanızı sağlar.
