web-dev-qa-db-ja.com

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

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

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

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

22
tfmoraes

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

ただし、ファイルをスワップするために休止状態にすることは可能ですが、カーネルパラメータを設定することでsystemdの休止状態で動作するはずです。ただし、再開することができなかったため、代わりにuswsusp(ユーザースペースソフトウェアサスペンド)を使用するように切り替えました。 Ubuntu 17.04/17.10で使用した手順は次のとおりです。

スワップファイルを作成する

マウントされ、/etc/fstabに追加され、フォーマットされた4GiBスワップファイルを作成するコマンド:

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 /mnt/4GiB.swap
> /dev/sda1 11cc33ee-1234-abcd-1234-ddeeff112233

Userspace Software Suspendのインストール(uswsusp)

Sudo apt install uswsusp

Uswsuspを構成する

/etc/uswsusp.confを作成し、initramfsを再作成するには:

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

注:/etc/uswsusp.confに手動で加えられた変更は、このコマンドで後でinitramfsを再作成する必要があります:

Sudo update-initramfs -u

Uswusp休止状態をテストする

Sudo s2disk

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

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

デフォルトでは、systemdは独自のhibernateコマンドを使用するため、systemd-hibernate.serviceをオーバーライドしてuswuspコマンドに置き換えます。

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

参照:

18
Cas

これが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
    
  • /swapfileを含むパーティションのUUIDに注意してください。

    $ 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"
    
  • Sudo systemctl edit systemd-hibernate.serviceを使用してSystemD hibernateサービスを編集し、次のコンテンツを入力します。

    [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 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

使用したドキュメント:

10
Anthony O.

チュートリアルを簡単に読みましたが、正しく理解できた場合は、Linuxコマンドラインにresumeオプションを指定するだけで済みます。 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の出力が役立つ場合があります。

8