syscall에 정지 작업이 걸려 있는 경우 정상적인 종료

syscall에 정지 작업이 걸려 있는 경우 정상적인 종료

systemd-suspend.service어제 시스템을 일시 중지했을 때 작업이 종료되지 않았고 그 이후로 작업이 중단 없는 절전 모드 상태에 있습니다 .

# systemctl list-jobs
  JOB UNIT                    TYPE  STATE  
21595 post-resume.target      start waiting
21593 systemd-suspend.service start running
21592 suspend.target          start waiting
21596 post-resume.service     start waiting

# systemctl status systemd-suspend.service
● systemd-suspend.service - Suspend
   Loaded: loaded (/nix/store/2jspk70lir7jcn1krax8haw2j7486i3a-systemd-243.3/example/systemd/system/systemd-suspend.se>
   Active: activating (start) since Sat 2020-04-04 03:07:36 CEST; 23h ago
     Docs: man:systemd-suspend.service(8)
 Main PID: 16761 (systemd-sleep)
       IP: 0B in, 0B out
    Tasks: 1 (limit: 4915)
   Memory: 1.0M
      CPU: 20ms
   CGroup: /system.slice/systemd-suspend.service
           └─16761 /nix/store/2jspk70lir7jcn1krax8haw2j7486i3a-systemd-243.3/lib/systemd/systemd-sleep suspend

Apr 04 03:07:36 phlegethon systemd[1]: Starting Suspend...
Apr 04 03:07:36 phlegethon systemd-sleep[16761]: Suspending system...

# ps aux |grep suspend
root     16761  0.0  0.0  10364  2052 ?        Ds   Apr04   0:00 /nix/store/2jspk70lir7jcn1krax8haw2j7486i3a-systemd-243.3/lib/systemd/systemd-sleep suspend

일시 중단을 수동으로 트리거하려고 하면 커널(5.4.14)이 EBUSY에 응답합니다.

# echo mem >/sys/power/state
-bash: echo: write error: Device or resource busy

커널이 디스크 중 하나를 동기화하는 데 멈춘 것 같습니다.

# cat /proc/16761/stack
[<0>] iterate_bdevs+0x98/0x142
[<0>] ksys_sync+0x6e/0xb0
[<0>] ksys_sync_helper+0x13/0x90
[<0>] pm_suspend.cold.8+0x213/0x361
[<0>] state_store+0x80/0xe0
[<0>] kernfs_fop_write+0xc1/0x1a0
[<0>] vfs_write+0xa5/0x1a0
[<0>] ksys_write+0x59/0xd0
[<0>] do_syscall_64+0x4e/0x120
[<0>] entry_SYSCALL_64_after_hwframe+0x44/0xa9

이제 이 상태에서는 정상적으로 시스템 전원을 끌 수도 없습니다.

# systemctl poweroff
Failed to power off system via logind: There's already a shutdown or sleep operation in progress

그럼 어떻게 해야 하나요? 나는 큰 총(Sysrq)에 손을 뻗고 싶은 유혹을 느끼지만 그것이 실제로 작동할 것인지 궁금합니다. sync(1)예상대로 작동이 중단되므로 시도하기가 꺼려집니다.

또, 알 수 있는 방법이 있나요?어느커널이 기다리고 있는 디스크 장치는 무엇입니까? 나는 그것이 USB 장치일 뿐이고 심각한 것은 아니기를 바랍니다.

답변1

나는 이것이 질문에 대한 정확한 대답은 아니지만 어쩌면 어느 정도 도움이 될 것이라는 것을 알고 있습니다.
당신이나 이 글을 읽을 다른 사람이요.

나는 지금도 비슷한 문제를 겪고 있습니다. 일시 중단 작업이 중단된 상태에서 시스템으로의 복귀가 완료되지 않았습니다.

24913 systemd-suspend.service start running
24912 suspend.target          start waiting

계속하려고 할 때 당신과 같은 메시지를 받았습니다.

# systemctl suspend
Failed to suspend system via logind: There's already a shutdown or sleep operation in progress


내 목표는 종료가 아니라 일시 중단이었습니다. 내가 한 일은 다음과 같습니다.

# systemctl cancel
# systemctl stop systemd-suspend.service

먼저 hang 작업을 중지합니다.
둘째, 시스템이 즉시 일시 중단되었습니다.

취소한 후 일시 중지하려고 했지만 systemctl suspend결과적으로 같은 문제가 다시 발생했습니다.
깨어난 후 서비스를 시작했는데 시스템이 다시 일시 중지되었습니다.

이제 이 해결 방법 없이 일시 중지할 수 있기를 바랍니다.

답변2

비슷한 문제가 발생했습니다. 내 경우에는 근본 원인을 찾는 데 하루 이상을 보냈습니다. 운 좋게도 이것은 Ubuntu 20.04를 설치한 지 불과 몇 주밖에 되지 않았기 때문에 새로 설치하는 것과 거의 비슷했습니다.

나에게는 디스플레이 관리자에 로그인한 후(기본값에서 변경되지 않음) NetworkManager가 실행되거나 다시 시작되지 않았으므로 WiFi에 액세스할 수 없었습니다.

나는 또한 위에서 언급한 것과 동등한 것을 보았습니다.

# systemctl list-jobs
  JOB UNIT                    TYPE  STATE  
21593 systemd-suspend.service start running

이를 사용하면 systemctl cancel 21593작업이 중지되고 실제로 문제임을 입증한 문제를 해결할 수 있습니다.

man systemd-sleep발견된 것에서

시스템 일시 중지 및/또는 최대 절전 모드에 들어가기 직전에 systemd-suspens.service(및 각각 언급된 다른 장치)는 /lib/systemd/system-sleep/에 있는 모든 실행 파일을 실행합니다. ... 이 디렉터리의 모든 실행 파일은 병렬로 실행됩니다. 모든 실행 파일이 완료될 때까지 작업 실행이 계속되지 않습니다.

그래서 조사해 보니 여기 에 제가 최근에 설치한 /lib/systemd/system-sleep스크립트가 포함되어 있다는 것을 알게 되었습니다 . tlp다음을 사용하여 tlp 및 관련 패키지를 제거했습니다.

sudo apt --purge remove tlp tlpui tlp-rdw

그리고 문제는 완전히 사라졌습니다.

관련 정보