हाइबरनेट करें और स्वैप फ़ाइल से फिर से शुरू करें


23

मैंने एक स्वैप फ़ाइल का उपयोग करने के लिए नोटबुक में एक नया उबंटू इंस्टॉलेशन कॉन्फ़िगर किया है, बजाय एक स्वैप विभाजन का उपयोग करने के।

डिफ़ॉल्ट रूप से एक स्वैप फ़ाइल का उपयोग करके उबंटू को हाइबरनेट करना संभव नहीं है, इसलिए मैंने इस ट्यूटोरियल की कोशिश की , लेकिन यह grub1 के लिए विशिष्ट है , और Ubuntu अब grub2 का उपयोग करता है ।

क्या किसी को भी पता है की यह कैसे किया जाता है?

जवाबों:


21

बेकार फ़ाइल का उपयोग करके स्वैप फ़ाइल के साथ हाइबरनेट करें

हालांकि यह स्वैप फ़ाइल के लिए हाइबरनेट करना संभव है और कर्नेल मापदंडों को सेट करके सिस्टम हाइबरनेट के साथ काम करता है। हालाँकि, मैं इसे फिर से शुरू करने के लिए नहीं मिल सकता है बजाय उपयोग करने के लिए बंद कर दिया (यूजरस्पेस सॉफ्टवेयर सस्पेंड) । यहां मैं उबंटू 17.04 / 17.10 पर उपयोग किए गए चरण हैं।

स्वैप फ़ाइल बनाएँ

एक स्वरूपित 4GiB स्वैप फ़ाइल बनाने के लिए कमांड, घुड़सवार और इसमें जोड़ा गया /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

स्वैप फ़ाइल विभाजन सत्यापित करें

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

यूजरस्पेस सॉफ्टवेयर सस्पेंड स्थापित करें (बेकार)

sudo apt install uswsusp

बेकार में कॉन्फ़िगर करें

बनाने /etc/uswsusp.confऔर बनाने के लिए initramfs:

sudo dpkg-reconfigure -pmedium uswsusp
  • Yes' एक वैध स्वैप स्थान के बिना जारी रखें? ' (विज़ार्ड ने अभी तक स्वैप फ़ाइल सेट नहीं की है।)
  • उस विभाजन का चयन करें, जो स्वैप-फ़ाइल पर रहता है, findmntऊपर से विवरण के साथ क्रॉस-संदर्भ । ( नोट: नहीं स्वैप फाइल ही )

नोट: मैन्युअल रूप से किए गए किसी भी परिवर्तन के बाद इस कमांड के साथ फिर से जुड़ने की /etc/uswsusp.confआवश्यकता होगी initramfs:

sudo update-initramfs -u

टेस्ट uswusp हाइबरनेट

sudo s2disk

snapshotस्क्रीन पर हाइबरनेट और फिर से शुरू करने के संदेश होने चाहिए ।

System2 हाइबरनेट के साथ s2disk का उपयोग करें

डिफ़ॉल्ट सिस्टमड के द्वारा यह स्वयं की हाइबरनेट कमांड का उपयोग करेगा ताकि उन्हें ओवरराइड करके uswusp कमांड के साथ प्रतिस्थापित किया जा सके systemd-hibernate.service:

sudo systemctl edit systemd-hibernate.service

पाठ संपादक में जो निम्न पाठ को खोलता है (रिक्त ExecStart की आवश्यकता है)। फिर सहेजें और बाहर निकलें:

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

यह /etc/systemd/system/systemd-hibernate.service.d/override.confओवरराइड विवरण के साथ फाइल बनाएगा ।

टेस्ट सिस्टम हाइबरनेट:

systemctl hibernate 

नोट: यह जांचने के लिए कि सिस्टमड override.confबनाया गया है, लोड किया गया है और कोई त्रुटि नहीं है, चलाएं:

systemctl status systemd-hibernate.service

संदर्भ:


यह निर्देश काम करने लगता है लेकिन सिस्टम हाइबरनेशन मेरे लिए काम नहीं कर रहा है। क्या आपने इसे अपना परीक्षण किया है? क्या यह ExceStart=run-parts -a post /lib/systemd/system-sleepहोना चाहिएExceStartPost=run-parts -a post /lib/systemd/system-sleep
जोआकिं अरमेन्डिया

यह परीक्षण किया गया था और काम कर रहा था लेकिन शायद इसके अलावा इसकी आवश्यकता है। मैंने अपना उत्तर अपडेट कर दिया है।
कैस

यह बिल्कुल सही नहीं लगता है। enableका विकल्प systemctl सिमलिंक से /etc/systemd/system/करने के लिए /lib/systemd/system/। आपको कभी भी सीधे कॉपी नहीं होना चाहिए/etc/systemd/system/
Auspex

1
मैंने यह काम करने के लिए प्रबंधन नहीं किया this। मैंने स्वैफ़ाइल स्थापित किया, स्थापित और कॉन्फ़िगर किया गया, लेकिन sudo s2diskकेवल लॉग Saving snapshot, डिस्प्ले बंद करने की तुलना में, ~ 5 मिनट के लिए लटका हुआ है और फिर यह कंप्यूटर को बंद कर देता है। हालाँकि मैं इसे चालू करने के बाद, यह सामान्य रूप से बूट करता है जैसे कोई हाइबरनेशन नहीं है।
m93a

1
मुझे लगता है कि इस लाइन sudo findmnt -no SOURCE,UUID -T /mnt/4GiB.swapको बदल दिया जाना चाहिएsudo findmnt -no SOURCE,UUID -T /swapfile
user1915011

12

यहाँ मैंने उबंटू 18.04 के साथ काम करने के लिए क्या किया।

  • /swapfileकम से कम अपने रैम का आकार बनाएं

    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
    
  • अपने विभाजन वाले UUID पर ध्यान दें /swapfile:

    $ sudo findmnt -no SOURCE,UUID -T /swapfile
    /dev/nvme0n1p5 20562a02-cfa6-42e0-bb9f-5e936ea763d0
    
  • uswsuspसही ढंग से स्वैप का उपयोग करने के लिए पैकेज को फिर से कॉन्फ़िगर करें :

    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 हाइबरनेट सेवा का उपयोग करके संपादित करें sudo systemctl edit systemd-hibernate.serviceऔर इसे निम्नलिखित सामग्री से भरें:

    [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
    
  • अपने के फिर से शुरू ऑफसेट पर ध्यान दें /swapfile:

    $ sudo swap-offset /swapfile
    resume offset = 34818
    
  • ग्रब को स्वैप से फिर से शुरू करने के लिए कॉन्फ़िगर करके /etc/default/grubनिम्नलिखित पंक्ति को संशोधित करें:

    GRUB_CMDLINE_LINUX_DEFAULT="resume=UUID=20562a02-cfa6-42e0-bb9f-5e936ea763d0 resume_offset=34818 quiet splash"
    
  • अपडेट ग्रब:

    sudo update-grub
    
  • निम्नलिखित बनाएँ /etc/initramfs-tools/conf.d/resume:

    RESUME=UUID=20562a02-cfa6-42e0-bb9e-5e936ea763d0 resume_offset=34816
    # Resume from /swapfile
    
  • अद्यतन initramfs:

    sudo update-initramfs -u -k all
    

अब आप हाइबरनेट कर सकते हैं sudo systemctl hibernate

कोई उन स्क्रिप्ट को भी बना सकता है:

    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

तो आप साथ सो सकते हैं gotosleepया हाइबरनेट कर सकते हैं gotohibernation

आपको कार्य करने के लिए पिछली स्क्रिप्ट के लिए अपना पासवर्ड दर्ज किए बिना sudo s2both, sudo s2ramऔर निष्पादित करने में सक्षम होना चाहिए sudo systemctl hibernate

आप ऐसा कर सकते हैं, उदाहरण के लिए एक powerdevसमूह बनाकर , उसमें अपने वर्तमान उपयोगकर्ता को जोड़ें, और निम्न sudoers कॉन्फिगर को कॉन्फ़िगर करें (इसे इसके साथ संपादित करें sudo visudo -f /etc/sudoers.d/powerdev):

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

उपयोग किए गए दस्तावेज़:


इसके लिए शुक्रिया! मैं कई तरीकों की कोशिश कर चुका हूं, लेकिन केवल तुम्हारा मेरे लिए उबंटू 18.04 :) पर काम करता है
jirislav

यह लगभग मुझे फिर से हाइबरनेशन की कोशिश करने जैसा महसूस करता है - मुझे अपने डिस्क पर सामयिक भ्रष्टाचार के साथ एक समस्या थी, जो स्पष्ट रूप से हाइबरनेशन प्रक्रिया से संबंधित थी। क्या आपने ऐसा कुछ भी सामना किया है?
चार्ल्स ग्रीन

धन्यवाद, @Anthony! मैंने काम करने के लिए हाइबरनेट होने के लिए बहुत सी चीजों की कोशिश की। तुम्हारा अंतिम समाधान जो किया था। यह मुझे बहुत अजीब लगता है कि यह सही ढंग से सीधे सेट नहीं है। :(
माइक विलियमसन

इस गाइड के लिए धन्यवाद। चरणों का पालन करने के बाद फिर $ sudo systemctl हाइबरनेट का उपयोग करके हाइबरनेट करने की कोशिश कर रहा है, हाइबरनेट करने की कोशिश करने के बाद मेरा लैपटॉप कुछ सेकंड तक जागता है। / var / log / syslog कई त्रुटियां दिखाता है, लेकिन ये सबसे अधिक प्रासंगिक लगते हैं: - आउटपुट eDP-1 के लिए पावर सेव मोड सेट करने में विफल: अनुमति से इनकार किया गया ... - Object .Gjs_AppIndicatorIconActor__1 (0x561c60a4d150), पहले ही अंतिम रूप दिया जा चुका है। किसी भी संपत्ति को स्थापित करना असंभव है। ... - s2disk: रिज्यूमे डिवाइस (स्वेपन-ए की कोशिश करें) का उपयोग नहीं कर सका। कारण: ऐसा कोई उपकरण नहीं है - systemd-hibernate.service: मुख्य प्रक्रिया से बाहर, कोड = बाहर निकल गया, ...
जेलानी नेल्सन

1
यह एकमात्र समाधान है जिसने मेरे लिए काम किया। इस उत्तर को उभारने के लिए साइन इन किया। धन्यवाद।
dpetrini

8

मैंने ट्यूटोरियल को एक त्वरित रीड दिया है और, अगर मुझे सही ढंग से समझ में आया है, तो आपको resumeलिनक्स कमांड लाइन के विकल्पों को निर्दिष्ट करने की आवश्यकता है । Grub2 के साथ वास्तव में सरल है, और आपके परिवर्तन हमेशा संरक्षित रहेंगे। आपको /etc/default/grubफ़ाइल को संपादित करने की आवश्यकता है , विशेष रूप से यह पंक्ति:

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

उसके बाद, sudo update-grubपरिवर्तनों को प्रभावी होने के लिए चलाएँ ।

बदलने GRUB_CMDLINE_LINUXसे आपके पास अन्य लिनक्स इंस्टॉलेशन प्रभावित नहीं होंगे (क्योंकि /etc/grub.d/30_os-proberयह वैरिएबल का उपयोग नहीं करता है)।

आपके द्वारा की जा रही समस्या के बारे में: क्या स्वैफ़ाइल का विभाजन एन्क्रिप्टेड है? यदि हां, तो हाइबरनेशन काम नहीं करेगा। यदि नहीं, तो आउटपुट filefrag -v /swapfileसहायक हो सकता है।


धन्यवाद! मै कोशिश करूँगा। लेकिन मुझे लगता है कि यह इस लाइन के साथ ग्रब में सभी लिनक्स प्रविष्टियों को कॉन्फ़िगर करता है।
tfmoraes

मत भूलो: बदलने के बाद /etc/default/grubआपको चलाने की आवश्यकता है update-grub
JanC

@tfmoraes: आप यह क्यों नहीं चाहेंगे कि सभी लिनक्स प्रविष्टियों को जोड़ा जाए?
जेएनसी

@JCC: क्योंकि मेरे पास अन्य लिनक्स वितरण स्थापित हो सकते हैं।
tfmoraes

1
@ didi_X8 यह टिप्पणी 8 साल पहले लिखी गई थी। यह संभव है कि तब से चीजें बदल गई हैं। साझा करने के लिए धन्यवाद।
एंड्रिया कोरबेलिनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.