Systemd / init olmadığında güçlendirme nasıl yapılır (örneğin init = / bin / bash kullanımı)?


9

poweroffDBus üzerinden systemd'e bağlanamadığından şikayet ediyor (tabii ki canlı değil). Ben yaptım sync, ardından kill $$PowerOff için çekirdek başlama işareti olur ölme 1 pid düşünme, ama bu çekirdek paniğe neden oldu. Daha sonra gücü zorlamak için güç düğmesini basılı tuttum.

Bu senaryoda gücü kapatmanın en uygun yolu nedir?


Systemd araç setinin kurulu olduğu sorusunun belirtilmemiş bir dolaysız önermesi vardır. "Bir systemd yok" aslında hiçbir sistemd araç setinin kurulu olmadığı anlamına gelir, bu da başlık da okunabilir, cevaplar oldukça farklıdır; ve bu muhtemelen kendi başına ayrı bir soruya değer.
JdeBP

@JdeBP Sadece başlığı okuyarak ve init=/bin/bashipucunu / imalarını göz ardı ederek, systemd kurulup kurulmadığı belirsizdir. Çalışan bir sistem yok demek istemiştim . Her durumda, çalışan bir systemd'ye sahip olmadan, systemd araç setinin işe yaramayacağını ve cevapların sysrq ile ilgili olanlar gibi başka araçlar kullanacağını düşündüm.
JoL

Yanıtlar:


10

Taktığınız dosya sistemlerini çıkarın. Kök dosya sistemi özel bir durumdur; bunun için kullanabilirsiniz mount / -o remount,ro. Linux'ta umount /da işe yarar, çünkü etkili bir şekilde eski komuta dönüştürülür.


Bununla birlikte, çok fazla sökme konusunda endişelenmenize gerek yok, aksi takdirde

  1. EFI sistem bölümü tarafından kullanıldığı gibi FAT veya eski bir dosya sistemini, günlük kaydı veya eşdeğeri uygulamayan ext2 taktınız. Modern bir dosya sistemi ile, syncyeterli olması gerekiyordu ve dosya sistemi bir sonraki önyüklemede kendini çok hızlı bir şekilde onaracak.
  2. Dosya sistemine yazan çalışan bir işlem bırakmış olabilirsiniz ve temiz bir şekilde kapatmayı amaçlamış olabilirsiniz. Bu durumda dosya sistemlerini taklit etmeye çalışmak yararlıdır, çünkü umount başarısız olur ve kalan yazıcıyı hatırlatmak için meşgul bir hata gösterir.

Yukarıdaki önemli kısımdır. Bundan sonra, donanımı kullanarak rahatça kapatabilirsiniz poweroff -f. Veya ile yeniden başlatın reboot -f.

Bir yoktur systemdait e özgü eşdeğer poweroff -f: systemctl poweroff -f -f. Ancak poweroff -faynı şeyi yapar ve systemdSysV uyumluluğu olmadan oluşturulmuş olsa bile bu komutu destekler.


Teknik olarak, USB sabit diskimin Windows "güvenli kaldırma" veya eşdeğerini gerektirdiği belgelendiğini hatırlıyorum. Ancak bu gereksinim güç kesintisi açısından güvenli değildir ve Linux yine de normal bir kapatma sırasında bunu yapmaz. Sabit sürücüyü dönerken döndürmemeniz gerektiği anlamına gelir - fişi çekmeye çalışmak da dahil olmak üzere. Tamamen güç kesilmesi, sürücünün dönmesini durdurmalıdır. Muhtemelen durmuyor, duyabilir, hissedebilir veya görebilirsiniz :-).


Sadece biliyorsun, kabul etmeyi unutmuyorum. Sadece başkalarının (belki de farklı zaman dilimlerinde) soruyu görmesine izin vermek ve kendi cevaplarını verme şansına sahip olmak için bir cevap kabul etmeden önce biraz beklemenin tavsiyesini gördüm.
JoL

sync()ext2 için yeterli. Kirli olmaktan şikayet edecek, ancak özet bilgiler dışında gerçekten bozulmayacak. Genellikle init = / bin / bash veya herhangi bir yerel eşdeğerin acil bir durum olduğunu düşünüyorum.
Joshua

@Joshua ext2 fsck inanılmaz . Ancak büyük dosya sistemlerinde fsck performansı, günlük tekrarından çok daha kötüdür. Acil bir durumda, kirli bir bağlantı kesilmesi nedeniyle gecikmek istemezsiniz.
sourcejedi

Doğru biliyor musun fsck.mode=skip?
Joshua

3
@Joshua hangisi önemlidir? Temiz bir bağlantıyı keserseniz, sonunda FS'yi onarmanız gerekecektir. Temiz olmayan fsck.mode=skipbir bağlantıdan sonra normal olarak önyükleme yapmak için kullanmayın !
sourcejedi

5

Sadece aşağıdaki iki komutu çalıştıracağım:

echo s > /proc/sysrq-trigger    <= For sync
echo o > /proc/sysrq-trigger    <= For shutdown the system

Çekirdekte sihirli anahtarın etkin olduğu varsayılarak


4

Tamam, bu yüzden bana bir seçeneğim vardı exec init. Oradan, muhtemelen daha sonra yapabilirdim poweroff. Yine de daha iyi alternatifler olup olmadığını merak ediyorum.


@ G-Man normal önyükleme işlemini başlatmaz ve sonunda normal merminizi vermez mi?
muru

2
@muru Yapabilirsin exec init 0. Bu, tüm init sistemleriyle çalışmaz, ancak aynı olanlar bir kapatma dizisinden geçecektir.
Austin Hemmelgarn

1
Bunun başka nedenlerle gerçekten iyi bir cevap olduğunu düşünüyorum; özellikle kapanma vakalarının çoğu yeniden başlatma kadar arzu edilmez ve bu, hasarı giderdikten sonra yeniden başlatmayı önler.
Joshua

1
@Joshua Bu kullanışlı, ancak en güvenli olmak istiyorsanız, genellikle tüm önyükleme sürecinin çalışmasını kontrol etmek iyi bir fikirdir :-).
sourcejedi

3

Etkili olarak, yeniden başlatma (2) sistem çağrısı çağırmak istersiniz .

Bunu iki şekilde yapabilirsiniz:

  1. Çalıştır reboot -fveya doğrudan poweroff -fçağırmalıdır reboot(2).

  2. Ctrl+ Alt+ Tuşlarına basarak gerçek Linux sanal terminalindeyseniz (GUI terminal öykünücüsü değil) Delete.

Klavye kısayolunun bazı kullanıcı alanı programı (genellikle init) tarafından devre dışı bırakılabileceğini unutmayın; devre dışı bırakıldığında kısayol bunun yerine init'e bir sinyal gönderir.

Yukarıdaki komutların tümü, tüm diskleri veya yeniden okumaları salt okunur olarak yeniden taktıktan ve senkronizasyonu çalıştırdıktan sonra yapılmalıdır, aksi takdirde yazılı olmayan verileri kaybedebilirsiniz. Kabuğunuz tek işlem çalışıyorsa, senkronizasyon yeterli olabilir.


1

Magic SysRq anahtarlarını kullanabilirsiniz ( https://en.wikipedia.org/wiki/Magic_SysRq_keyBilgisayarınızı kapatmak için ) kullanabilirsiniz.

Düzgün kapatmak için aşağıdakileri kullanabilirsiniz (Wikipedia alıntı formu):

Sihirli SysRq anahtarının yaygın bir kullanımı, aksi takdirde kilitlenmiş bir Linux bilgisayarın güvenli bir şekilde yeniden başlatılmasıdır (kısalt. REISUB ). Bu, fsckyeniden başlatma sırasında gerekli olmayı önleyebilir ve bazı programlara kaydedilmemiş işlerin acil yedeklemelerini kaydetme şansı verir. [5]   Q (veya AZERTY) kısaltmalar: " R aising e lephants I ler G O u tterly B oring", " R eboot e ven I f S istem U tterly Broken "veya basitçe geriye doğru okunan" BUSIER "sözcüğü genellikle aşağıdaki SysRq tuşları dizisini hatırlamak için kullanılır:

  • un Raw (klavyenin kontrolünü X'ten geri al),
  • t Erminate (SIGTERM'i tüm süreçlere göndererek zarif bir şekilde sonlanmalarını sağlar),
  • k Ill (SIGKILL'i tüm süreçlere gönderin, derhal sona erdirmeye zorlayın),
  • Sync (verileri diske temizle),
  • Unmount (salt okunur tüm dosya sistemlerini yeniden monte eder),
  • yeniden B.

Ancak son B yerine "power O ff" yerine O (azerty / qwerty yerine) koy


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.