Hazırda bekletme ve takas dosyasından devam etme


23

Bir takas bölümünü kullanmak yerine bir takas dosyasını kullanmak için Not Defterinde yeni bir Ubuntu yüklemesi yapılandırdım.

Varsayılan olarak bir takas dosyası kullanarak Ubuntu'nun hazırda bekletme modunu kullanması mümkün değildir, bu yüzden bu öğreticiyi denedim , ancak grub1'e özgü ve Ubuntu artık grub2'yi kullanıyor .

Birileri bunun nasıl yapıldığını biliyor mu?

Yanıtlar:


21

Uswusp kullanarak Swap dosyası ile hazırda bekleme

Her ne kadar dosyayı değiştirmek için hazırda bekleme yapmak mümkündür ve sözde çekirdek parametreleri ayarlayarak sistemd'de hazırda bekletme moduyla çalışır. Ancak, devam etmeyi alamadım, bunun yerine uswsusp (kullanıcı alanı yazılımı askıya alma) kullanmaya geçtim . İşte Ubuntu 17.04 / 17.10'da kullandığım adımlar.

Takas Dosyasını Oluştur

Komutlar monte ve ilave bir biçimlendirilmiş 4GiB takas dosyası oluşturmak için /etc/fstab:

sudo fallocate -l 4g /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab

Takas Dosya Bölümünü Doğrulayın

sudo findmnt -no SOURCE,UUID -T /swapfile
> /dev/sda1 11cc33ee-1234-abcd-1234-ddeeff112233

Userspace Software Suspend (uswsusp) yükleyin

sudo apt install uswsusp

Uswsusp yapılandırın

Oluşturmak için /etc/uswsusp.confve yeniden initramfs:

sudo dpkg-reconfigure -pmedium uswsusp
  • Yesgeçerli bir takas alanı olmadan devam etmek için ? ' (Sihirbaz, takas dosyasını henüz ayarlamamıştır.)
  • Seç bölümü bu konuda takas dosyası bulunduğu, gelen ayrıntılarla çapraz referans findmntyukarıda. ( Not: değil takas dosyası kendisi )

Not: Manuel olarak /etc/uswsusp.confyapılacak herhangi bir değişiklik , daha initramfssonra bu komutla yeniden oluşturulmasını gerektirir :

sudo update-initramfs -u

Uswusp hazırda beklet

sudo s2disk

snapshotHazırda bekletme ve devam etme ekranında mesajlar bulunmalıdır .

Systemd hazırda bekleme modunda s2disk kullanın

Varsayılan olarak systemd kendi hazırda bekleme komutlarını kullanır, bu nedenle onları geçersiz kılarak uswusp komutlarıyla değiştirin systemd-hibernate.service:

sudo systemctl edit systemd-hibernate.service

Açılan metin editöründe aşağıdaki metni girin (boş ExecStart gereklidir). Sonra kaydedin ve çıkın:

[Service]
ExecStart=
ExecStart=/usr/sbin/s2disk 
ExecStartPost=/bin/run-parts -a post /lib/systemd/system-sleep

Bu, /etc/systemd/system/systemd-hibernate.service.d/override.confgeçersiz kılma ayrıntılarına sahip bir dosya oluşturur .

Test sistemi ve hazırda bekleme

systemctl hibernate 

Not: Sistemin override.confoluşturulduğunu, yüklendiğini ve hata olmadığını kontrol etmek için aşağıdakileri çalıştırın:

systemctl status systemd-hibernate.service

Referanslar:


Bu talimatlar işe yarayacak gibi gözüküyor, ancak sistem hazırda bekletme modu benim için çalışmıyor. Bunu kendin test ettin mi? Bu ExceStart=run-parts -a post /lib/systemd/system-sleepolmalıExceStartPost=run-parts -a post /lib/systemd/system-sleep
Joaquín Aramendía

Test edildi ve çalışıyordu, ancak belki de buna ihtiyaç var. Cevabımı güncelledim.
Cas,

Bu pek doğru görünmüyor. enableSeçeneği systemctl sembolik gelen /etc/systemd/system/etmek /lib/systemd/system/. Asla doğrudan kopyalamamalısınız/etc/systemd/system/
Auspex

1
Bu işi yapmayı başaramadım 😞. Swapfile kurdum, uswsusp kurdum ve yapılandırdım, ancak ekranı kapattığımdan sudo s2disksadece günlükleri kapattım, Saving snapshot~ 5 dakika bekledikten sonra bilgisayarı kapattı. Ancak açtıktan sonra, kış uykusu yokmuş gibi normal şekilde açılıyor.
m93a

1
Bu satırın sudo findmnt -no SOURCE,UUID -T /mnt/4GiB.swapdeğiştirilmesi gerektiğini düşünüyorumsudo findmnt -no SOURCE,UUID -T /swapfile
user1915011

12

İşte Ubuntu 18.04 ile çalışmasını sağlamak için yaptıklarım.

  • Senin Make /swapfileRAM en az büyüklüğe sahip

    sudo swapoff /swapfile
    sudo dd if=/dev/zero of=/swapfile bs=$(cat /proc/meminfo | grep MemTotal | grep -oh '[0-9]*') count=1024 conv=notrun
    sudo mkswap /swapfile
    sudo swapon /swapfile
    
  • Aşağıdakileri içeren bölümün UUID'sini not edin /swapfile:

    $ sudo findmnt -no SOURCE,UUID -T /swapfile
    /dev/nvme0n1p5 20562a02-cfa6-42e0-bb9f-5e936ea763d0
    
  • Takas uswsuspdosyasını doğru kullanmak için paketi yeniden yapılandırın :

    sudo dpkg-reconfigure -pmedium uswsusp
    # Answer "Yes" to continue without swap space
    # Select "/dev/disk/by-uuid/20562a02-cfa6-42e0-bb9f-5e936ea763d0" replace the UUID with the result from the previous findmnt command
    # Encrypt: "No"
    
  • SystemD hazırda bekleme servisini kullanarak sudo systemctl edit systemd-hibernate.servicedüzenleyin ve aşağıdaki içerikle doldurun:

    [Service]
    ExecStart=
    ExecStartPre=-/bin/run-parts -v -a pre /lib/systemd/system-sleep
    ExecStart=/usr/sbin/s2disk
    ExecStartPost=-/bin/run-parts -v --reverse -a post /lib/systemd/system-sleep
    
  • Aşağıdaki özgeçmiş ofsetini not edin /swapfile:

    $ sudo swap-offset /swapfile
    resume offset = 34818
    
  • Grub'u /etc/default/grub, aşağıdaki satırı düzenleyerek ve değiştirerek takas dosyasından devam edecek şekilde yapılandırın :

    GRUB_CMDLINE_LINUX_DEFAULT="resume=UUID=20562a02-cfa6-42e0-bb9f-5e936ea763d0 resume_offset=34818 quiet splash"
    
  • Grub Güncellemesi:

    sudo update-grub
    
  • Aşağıdakileri oluşturun /etc/initramfs-tools/conf.d/resume:

    RESUME=UUID=20562a02-cfa6-42e0-bb9e-5e936ea763d0 resume_offset=34816
    # Resume from /swapfile
    
  • İnitramfs'ı güncelleyin:

    sudo update-initramfs -u -k all
    

Şimdi kış uykusunda kalabilirsin sudo systemctl hibernate.

Bir de bu komut dosyaları oluşturabilir:

    sudo tee /usr/local/bin/gotosleep <<EOF
    dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock
    sleep 2
    sudo /usr/sbin/s2both
    EOF
    sudo chmod +x /usr/local/bin/gotosleep
    sudo tee /usr/local/bin/gotohibernation <<EOF
    dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock
    sleep 2
    sudo systemctl hibernate
    EOF
    sudo chmod +x /usr/local/bin/gotohibernation

Böylece uyuyabilir gotosleepya da kış uykusunda kalabilirsiniz gotohibernation.

Sen yürütmek gerekir sudo s2both, sudo s2ramve sudo systemctl hibernateişe önceki komut için şifrenizi girmek zorunda kalmadan.

Bunu örneğin bir powerdevgrup oluşturarak , mevcut kullanıcınızı buna ekleyerek ve aşağıdaki sudoers config (ile düzenleme sudo visudo -f /etc/sudoers.d/powerdev) ile yapılandırabilirsiniz :

     %powerdev ALL=NOPASSWD: /usr/sbin/s2both, /usr/sbin/s2ram, /bin/systemctl hibernate

Kullanılan belgeler:


Bunun için teşekkür ederim! Birçok yöntem denedim, ama sadece sizinki Ubuntu
18.04'te

Bu neredeyse tekrar hazırda bekletme modunu yeniden denemek gibi hissetmemi sağlıyor - disklerimde zaman zaman yolsuzlukla ilgili bir sorun vardı, ki bu görünüşte hazırda bekletme işlemiyle ilgiliydi. Böyle bir şeyle karşılaştın mı?
Charles Green,

Teşekkürler, @Anthony! Çalışmak için kış uykusuna yatmak için pek çok şey denedim. Sizinki, yapılan son çözümdü. Bunun doğru şekilde kurulmaması bana çok garip geliyor. :(
Mike Williamson

Bu rehber için teşekkürler. Adımları uyguladıktan sonra $ sudo systemctl hazırda bekletme modunu kullanarak hazırda bekletme modunu kullandıktan sonra, dizüstü bilgisayar hazırda bekletme modundan birkaç saniye sonra uyanır. / var / log / syslog birçok hata gösteriyor, ancak bunlar en alakalı görünüyor: - eDP-1 çıkışı için güç tasarrufu modu ayarlanamadı: İzin reddedildi ... - Nesne .Gjs_AppIndicatorIconActor__1 (0x561c60a4d150), zaten tamamlandı. Herhangi bir özellik ayarlamak imkansız. ... - s2disk: Özgeçmiş cihazı kullanılamadı (-a takasını deneyin). Sebep: Böyle bir cihaz yok - systemd-hibernate.service: Ana işlem çıkıldı, kod = çıkıldı, ...
Jelani Nelson

1
Bu benim için çalışan tek çözüm. Sadece bu cevabı yükseltmek için giriş yaptınız. Teşekkürler.
dpetrini

8

Öğreticiye hızlı bir okuma yaptım ve eğer doğru anladıysam, resumeseçenekleri Linux komut satırına koymanız yeterli . Grub2 ile gerçekten basittir ve değişiklikleriniz her zaman korunur. /etc/default/grubDosyayı, özellikle bu satırı düzenlemeniz gerekir :

GRUB_CMDLINE_LINUX="resume=... resume_offset=..."

Bundan sonra sudo update-grubdeğişikliklerin etkili olması için koşun .

Değiştirme GRUB_CMDLINE_LINUX, sahip olduğunuz diğer Linux kurulumlarını etkilemez (çünkü /etc/grub.d/30_os-proberbu değişkeni kullanmaz).

Karşılaştığınız sorun hakkında: takas dosyasının bölümü şifreli mi? Öyleyse, hazırda bekletme modu çalışmaz. Eğer değilse, o zaman çıktısı yardımcı filefrag -v /swapfileolabilir.


Teşekkürler! Yapmaya çalışacağım. Ama bence tüm linux girişlerini bu satırda grub içinde yapılandırıyor.
tfmoralar

Unutmayın: değiştirdikten sonra /etc/default/grubçalıştırmak gerekir update-grub.
JanC

@tfmoraes: neden bunun tüm linux girişlerine eklenmesini istemiyorsun?
JanC

@JanC: Çünkü başka Linux dağıtımları kurulu olabilir.
tfmoralar

1
@ didi_X8 bu yorum 8 yıl önce yazıldı. O zamandan beri işler değişmiş olabilir. Paylaşım için teşekkürler.
Andrea Corbellini
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.