Hazırda bekleme systemctl
zor durumlarda kullanma ve çalıştırma
Benim için pm-hibernate
her zaman başarısız olur. Bazı tweaks sonra, systemd (16.04 ve üstü sistemde init sistemi) arabirimini kullanarak hazırda bekletebildim. Ayrıca 17.04 tarihinde bir takas dosyasıyla çalışmasını sağladım. Bu örnek olay incelemesi problemi olan başkaları için faydalı olabilir.
İlk deneme:
sudo systemctl hibernate
Bu başarısız olursa, sorun gidermeye başlayın: hazırda bekletme durumunda (HTD veya ACPI S4), makine durumu diske yazılır, böylece korumak için güç gerekmez. Durum bir takas bölümüne ya da bir takas dosyasına yazılır. Not: BTRFS kullanıyorsanız, dosya sisteminin bozulmasına neden olabileceğinden takas dosyası kullanmaya ÇALIŞMAYIN.
Kişisel swap bölümü veya takas dosyası hazırda beklemeye izin RAM ile aynı boyutta olması gerekebilir, ancak en az 2/5 RAM boyutu ise hazırda bekletme mümkün olacak iyi bir şans göre var Arch wiki sayfasından , bu nedenle, takas boyutunu büyütmeden önce diğer adımları deneyin.
Sorununuz beklenen özgeçmiş yerine temiz bir önyükleme yapmaksa, en azından disk görüntüsünü bulmak için büyük olasılıkla bir önyükleme parametresi ayarlamanız gerekir.
Takas alanınızı bulun:
grep swap /etc/fstab
benim için bu döner (kısmi çıktı)
# swap was on /dev/mmcblk0p3 during installation
/dev/mmcblk0p3
belirtilecek bölüm nerede
Bir önyükleme parametresi ekleyin:
sudoedit /etc/default/grub
Başlangıç çizgisine tırnak içinde belirtilen bölüme GRUB_CMDLINE_LINUX_DEFAULT
ekleyin resume=/dev/YourSwapPartition
(daha önce tanımladığınız bölümle değiştirin). Örneğimi kullanarak:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/mmcblk0p3"
Bu dosyayı ne zaman değiştirirseniz çalıştırmalısınız, sudo update-grub
aksi takdirde değişikliklerin bir etkisi olmaz.
Şimdi yeniden başlatmanız gerekiyor. Sonra komutu vererek, hazırda bekletme modunu deneyebilirsiniz:
sudo systemctl hibernate
Devam etmek için, güç düğmesine basın, sistem önyükleme yapacaktır.
Hala sorunlarınız varsa, hata ayıklamaya başlayın.
Davamı aşağıya örnek olarak ekliyorum, ancak S durumlarının hata ayıklaması hakkında ayrıntılı bilgiler bu blogda ve ayrıca bu konuda bulunabilir .
Daha fazla bilgi yakalamak için daha fazla önyükleme parametresi ayarlayın. Çıkarın quiet
ve splash
ekleyin initcall_debug
ve no_console_suspend
hangi init sistem çağrısının konsola yazdırılmasına neden olacak, böylece neyin yanlış gittiğini izleyebilirsiniz. Bunu ben ayarladım:
GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/mmcblk0p3 no_console_suspend initcall_debug"
Bu, kış uykusundaki özgeçmişinde neyin yanlış gittiğini görmeme yardımcı oldu.
Benim durumumda, devam ettikten sonra WiFi'yi kaybettim ve çekirdek, çoğu komutun (örneğin herhangi bir şeyi okumak /sys
, modülleri yeniden yüklemek veya herhangi bir systemctl
komutu okumak ) işe yaramayacağı kadar net bir şekilde üzüldü - süreç başlıyor ve sadece askıda kalıyordu (tüm bunlar olur. elbette yeniden başlatıldıktan sonra normale döndü). Sistemi yavaşça kapatıp tüm hata ayıklama mesajlarını okurken, "brcm" ile ilgili birçok sorun olduğunu fark ettim, bu yüzden Broadcom kablosuz sürücü modülümün suçlu olacağını tahmin ettim. Tabii ki, ilk önce modülü boşaltmak için hazırda bekleme prosedürümü ayarladım:
sudo modprobe -r brcmfmac
sudo systemctl hibernate
devam ettiğinde modülü tekrar taktım
sudo modprobe brcmfmac
Ve her şey mükemmel çalıştı. Ayrıca btsdio
uyumsuz görünen modülü de kara listeye almalıyım.brcmfmac
Güncelleme: 17.04'te bir takas dosyası kullanarak Hazırda Bekletme.
Bir kez daha Arch wiki sayfasının yardımı ve bazı ek bilgilerle, hazırda bekletme modunu 17.04'te bir takas dosyasıyla çalıştırmayı başardım. Bu, ek bir önyükleme parametresi gerektiriyordu, resume_offset=n
burada n, physical_offset
çıktıdaki ilk sayıdır sudo filefrag -v /swapfile
:
$ sudo filefrag -v /swapfile
Filesystem type is: ef53
File size of /swapfile is 1425873920 (348114 blocks of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 32767: 34816.. 67583: 32768:
1: 32768.. 63487: 67584.. 98303: 30720:
....
Bu nedenle, benim durumumda ek önyükleme parametresi resume_offset=34816
. Bölümün devam etmesi için bir önyükleme parametresi ayarlamanız gerekir. Bu kök bölüm olacaktır (veya takas dosyanızın bulunduğu bölüm ne olursa olsun) Parametrelerim şu anda:
GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=/dev/mmcblk1p2 resume_offset=34816"
/dev/mmcblk1p2
Kök bölümüm nerede (sizinki gibi bir şey olabilir /dev/sda2
).
Özgeçmiş sırasında görüntünün başarılı bir şekilde yüklendiğini gördüm, ancak benim durumumda (sadece bir örnek - YMMVAPD) daha sonra bazı sürücüler ( i2c_designware
) bazı hatalar attı ve özgeçmişe sistemde donma başladı. Hazırda Bekletme, ek olarak bu modülleri kaldırırsam çalışır brcmfmac
, ancak sistem bu modüller olmadan hızla kullanılamaz hale gelir. Bu nedenle, buggy modüllerini boşaltmak ve hemen devam ettirmek için onları yeniden yerleştirmek için bir çeşit script hazırladım:
# remove buggy modules
modprobe -r brcmfmac i2c_designware_platform i2c_designware_core &&
# hibernate
echo disk > /sys/power/state
# reinsert
modprobe i2c_designware_core i2c_designware_platform brcmfmac
Hazırda bekletmek istediğimde koşarım sudo bash script
. Bu harika çalışıyor.
TL; DR
Systemd kullanın, takastan devam etmek için bir önyükleme parametresi ayarlayın, buggy sürücülerini tanımlayın ve hazırda bekletme modunu başlatmadan önce bunları kaldırın. Sistem bu modüller olmadan uzun süre çalışamazsa veya birkaçını boşaltmanız gerekirse, hazırda bekletme modunu başlatmak için basit bir komut dosyası kullanmak daha kolay olabilir.