回答:
ファイルをスワップするために休止状態にすることは可能ですが、カーネルパラメータを設定することで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
sudo apt install uswsusp
作成/etc/uswsusp.conf
および再作成するにはinitramfs
:
sudo dpkg-reconfigure -pmedium uswsusp
Yes
to ' 有効なスワップスペースなしで続行しますか?' (ウィザードはまだスワップファイルを設定していません。)findmnt
上記の詳細と相互参照します。(注:スワップファイル自体ではありません)注:手動で行った変更は、このコマンドを使用して後で/etc/uswsusp.conf
再作成する必要がありますinitramfs
。
sudo update-initramfs -u
sudo s2disk
snapshot
休止状態および再開時に画面にメッセージが表示されます。
デフォルトでは、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
、オーバーライドの詳細を含むファイルが作成されます。
systemctl hibernate
注:systemd override.conf
が作成され、ロードされ、エラーがないことを確認するには、次を実行します。
systemctl status systemd-hibernate.service
参照:
enable
のsystemctl
シンボリックリンクのオプション。直接コピーするべきではありません/etc/systemd/system/
/lib/systemd/system/
/etc/systemd/system/
sudo s2disk
logsのみSaving snapshot
が表示をオフにし、約5分間ハングした後、コンピューターをシャットダウンします。ただし、電源を入れた後は、通常は休止状態ではないように起動します。
sudo findmnt -no SOURCE,UUID -T /mnt/4GiB.swap
に変更する必要がありますsudo findmnt -no SOURCE,UUID -T /swapfile
これが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 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
使用したドキュメント:
チュートリアルを簡単に読みましたが、正しく理解できていれば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
が役立つ場合があります。
/etc/default/grub
を実行する必要がありますupdate-grub
。
ExceStart=run-parts -a post /lib/systemd/system-sleep
はExceStartPost=run-parts -a post /lib/systemd/system-sleep