Systemd

從睡眠中醒來後不久,SIGSEGV 地址邊界錯誤

  • May 15, 2022

從 a 恢復後hybrid-sleep,我可以登錄 ( swaylock) 並且最初看起來沒問題 - pwdjournalctl -xe在我讓它進入睡眠狀態時仍然打開的 shell 中按預期執行。

過了一會兒,幾十秒,當我退出時journalctl(我只是想確認它實際上已經睡著了)CPU負載增加,我聽到風扇旋轉,以及我嘗試在同一個shell中執行的任何東西(pwd再次,比如說)導致 SIGSEGV - 地址邊界錯誤。

因此,我什至不能發出關機命令,所以我必須用電源按鈕強制關機。重新啟動journalctl --boot=-1後,它進入睡眠狀態後沒有任何條目,就像它從未醒來一樣。我假設當我看到它們時它們只儲存在 RAM 中,當我關閉時,它無法將它們寫入具有相同段錯誤的磁碟。

行為非常不穩定 - 在起草上述內容後,我再次測試並能夠swaylock通過輸入單個密鑰而不是我的完整密碼來“登錄”(繞過),但我嘗試在打開(恢復)shell 中執行的任何命令都崩潰了終端模擬器,和以前一樣,我無法再重新打開(我的鍵綁定執行的命令可能也出現了段錯誤)。

任何想法可能是什麼原因?或者甚至在系統穩定時如何在不訪問日誌的情況下進行調試?


一些可能相關的資訊,如果有人可以建議可能相關/可疑的內容,我將進行更多編輯:

# /etc/systemd/system/swapfile.swap
[Unit]
Description=providing a swapfile

[Swap]
What=/swapfile
Priority=20

[Install]
WantedBy=multi-user.target
# /etc/systemd/system/swapfile-creation.service
[Unit]
Description=creating a swap file at /swapfile
ConditionPathExists=!/swapfile
Before=swapfile.swap

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'dd if=/dev/zero of=/swapfile bs=1M count="$(expr "$(cat /sys/power/image_size)" / 1024 / 1024)" status=progress'
ExecStart=/usr/bin/chmod 600 /swapfile
ExecStart=/usr/bin/mkswap /swapfile

[Install]
RequiredBy=swapfile.swap

我打算包含該systemd-boot條目(或我用來創建它的腳本),但實際上我意識到我還沒有測試過斷電 - 這是從 RAM 恢復時發生的。我會仔細檢查磁碟的(未使用的)懸念是否不是罪魁禍首,從普通的systemctl suspend.

我不確定確切的原因;但我的問題的根源最終是我沒有使用resume&resume_offset核心參數啟動。我原以為只有在恢復啟動時才需要這些;不是休眠的啟動,但似乎並非如此

引用自:https://unix.stackexchange.com/questions/696939