スワップファイルから休止状態および再開する


23

スワップパーティションを使用する代わりに、スワップファイルを使用するようにノートブックで新しいUbuntuインストールを構成しました。

デフォルトでは、スワップファイルを使用してUbuntuを休止状態にすることはできないため、このチュートリアルを試しましたが、これはgrub1に固有であり、Ubuntuはgrub2を使用するようになりました

誰もこれを行う方法を知っていますか?

回答:


21

uswuspを使用したスワップファイルでの休止状態

ファイルをスワップするために休止状態にすることは可能ですが、カーネルパラメータを設定することでsystemdの休止状態で動作するはずです。しかし、私はそれを再開させることができなかったので、代わりにuswsusp(ユーザースペースソフトウェアのサスペンド)を使用するように切り替えました。Ubuntu 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

ユーザースペースソフトウェアサスペンド(uswsusp)のインストール

sudo apt install uswsusp

uswsuspを構成する

作成/etc/uswsusp.confおよび再作成するにはinitramfs

sudo dpkg-reconfigure -pmedium uswsusp
  • Yesto ' 有効なスワップスペースなしで続行しますか?' (ウィザードはまだスワップファイルを設定していません。)
  • スワップファイルが存在するパーティションを選択し、findmnt上記の詳細と相互参照します。(注:スワップファイル自体ではありません

注:手動で行った変更は、このコマンドを使用して後で/etc/uswsusp.conf再作成する必要がありますinitramfs

sudo update-initramfs -u

uswusp休止状態をテストする

sudo s2disk

snapshot休止状態および再開時に画面にメッセージが表示されます。

systemd休止状態でs2diskを使用する

デフォルトでは、systemdは独自のhibernateコマンドを使用するため、次をオーバーライドして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、オーバーライドの詳細を含むファイルが作成されます。

systemdの休止状態をテストします。

systemctl hibernate 

注:systemd override.confが作成され、ロードされ、エラーがないことを確認するには、次を実行します。

systemctl status systemd-hibernate.service

参照:


この指示は機能しているように見えますが、システム化された休止状態は機能していません。これを自分でテストしましたか?これExceStart=run-parts -a post /lib/systemd/system-sleepExceStartPost=run-parts -a post /lib/systemd/system-sleep
ホアキンアラメンディア

テスト済みで機能していましたが、おそらく追加が必要です。回答を更新しました。
Cas

これはまったく正しく見えません。 からへenablesystemctl シンボリックリンクのオプション。直接コピーするべきではありません/etc/systemd/system//lib/systemd/system//etc/systemd/system/
Auspex

1
私はこの作品を作ることができませんでした😞。スワップファイルをセットアップし、uswsuspをインストールおよび構成しましたが、sudo s2disklogsのみSaving snapshotが表示をオフにし、約5分間ハングした後、コンピューターをシャットダウンします。ただし、電源を入れた後は、通常は休止状態ではないように起動します。
m93a

1
私は、この行が考えるsudo findmnt -no SOURCE,UUID -T /mnt/4GiB.swapに変更する必要がありますsudo findmnt -no SOURCE,UUID -T /swapfile
user1915011

12

これがUbuntu 18.04で動作するようにしたことです。

  • あなたの作る/swapfileあなたのRAMの少なくとも大きさを持っています

    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 hibernateサービスを編集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を構成します。

    GRUB_CMDLINE_LINUX_DEFAULT="resume=UUID=20562a02-cfa6-42e0-bb9f-5e936ea763d0 resume_offset=34818 quiet splash"
    
  • Grubの更新:

    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 s2bothsudo s2ramsudo systemctl hibernate仕事に前のスクリプト用のパスワードを入力する必要はありません。

たとえば、powerdevグループを作成して現在のユーザーを追加し、次のsudoers構成を構成することでそれを行うことができます(で編集しますsudo visudo -f /etc/sudoers.d/powerdev)。

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

使用したドキュメント:


これありがとう!多くの方法を試しましたが、Ubuntu 18.04で動作するのはあなたの方法だけです:)
jirislav

これにより、ハイバネーションをもう一度試してみたい気分になります。ディスク上の破損が時々発生するという問題がありましたが、これはハイバネーションプロセスに関連しているようです。そのような何かに遭遇しましたか?
チャールズグリーン

ありがとう、@アンソニー!休止状態が機能するように多くのことを試しました。これが最終的な解決策でした。これがすぐに正しくセットアップされないのは非常に奇妙に思えます。:(
マイク・ウィリアムソン

このガイドをありがとう。手順を実行し、$ sudo systemctl hibernateを使用して休止状態にしようとすると、休止状態にしようとした後、数秒でラップトップが起動します。/ var / log / syslogには多くのエラーが表示されますが、これらは最も関連性が高いようです。-出力eDP-1の省電力モードの設定に失敗しました:許可が拒否されました...-Object。プロパティを設定することはできません。...-s2disk:再開デバイスを使用できませんでした(swapon -aを試してください)。理由:そのようなデバイスはありません
-systemd

1
これは私のために働いた唯一のソリューションです。この回答に賛成するためだけにサインインしました。ありがとう。
dpetrini

8

チュートリアルを簡単に読みましたが、正しく理解できていればresume、Linuxコマンドラインにオプションを指定するだけで済みます。Grub2の使用は非常に簡単で、変更は常に保存されます。/etc/default/grubファイル、特に次の行を編集する必要があります。

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

その後sudo update-grub、変更を有効にするために実行します。

変更してGRUB_CMDLINE_LINUXも、他のLinuxインストールに影響はあり/etc/grub.d/30_os-proberません(この変数を使用しないため)。

あなたが抱えている問題について:スワップファイルのパーティションは暗号化されていますか?その場合、休止状態は機能しません。そうでない場合は、の出力filefrag -v /swapfileが役立つ場合があります。


ありがとう!試してみます。しかし、この行でgrubのすべてのLinuxエントリを設定すると思います。
tfmoraes

忘れないでください:変更後、/etc/default/grubを実行する必要がありますupdate-grub
JanC

@tfmoraes:なぜこれをすべてのLinuxエントリに追加したくないのですか?
JanC

@JanC:他のLinuxディストリビューションがインストールされている可能性があるため。
tfmoraes

1
このコメントは8年前に書かれた@ didi_X8です。それ以来、物事が変化した可能性があります。共有してくれてありがとう。
アンドレアコルベリーニ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.