Desligamento normal com suspensão de trabalho no syscall

Desligamento normal com suspensão de trabalho no syscall

Quando suspendi o sistema ontem, o trabalho não foi encerrado e estou com um systemd-suspend.servicetrabalho suspenso em suspensão ininterrupta desde então:

# 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

Quando tento acionar a suspensão manualmente, o kernel (5.4.14) responde ao EBUSY:

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

Parece que o kernel está travado na sincronização de um dos discos:

# 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

Agora, neste estado, não consigo nem desligar a máquina normalmente:

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

Então o que eu faço? Estou tentado a pegar a arma grande (Sysrq), mas me pergunto se isso realmente funcionará. sync(1)como esperado, apenas trava, então estou relutante em tentar.

Além disso, existe uma maneira de descobrirqualdispositivo de disco que o kernel está esperando? Espero que seja apenas algum dispositivo USB, nada sério.

Responder1

Eu sei que isso não responde exatamente à pergunta, mas talvez ajude um pouco.
Você ou outra pessoa que irá ler isso.

Eu tive (ou ainda tenho) um problema semelhante agora. Suspend não terminou de retornar ao sistema com o trabalho suspenso.

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

Recebi a mesma mensagem que você ao tentar continuar.

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


Meu objetivo era suspender, não desligar. Aqui está o que eu fiz.

# systemctl cancel
# systemctl stop systemd-suspend.service

Primeiro, para interromper a operação de suspensão.
Em segundo lugar, fez com que o sistema fosse suspenso instantaneamente.

Após o cancelamento, tentei suspender systemctl suspend, mas o resultado foi o mesmo problema novamente.
Ao acordar iniciei o serviço, que suspendeu novamente o sistema.

Espero poder suspender sem essa solução alternativa agora.

Responder2

Encontrei problemas semelhantes. Eu matei mais de um dia para encontrar a causa raiz no meu caso. Felizmente, esta foi uma instalação do Ubuntu 20.04 com apenas algumas semanas de idade, então estava perto de uma nova instalação.

Para mim, o NetworkManager não estava funcionando, reiniciando ou algo semelhante depois de fazer login no gerenciador de exibição (inalterado no padrão), então não tive acesso WiFi.

Eu também vi o equivalente ao mencionado acima:

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

Usar isso systemctl cancel 21593interromperia o trabalho e contornaria o problema que demonstrava que esse era realmente o problema.

Do man systemd-sleepencontrado

Imediatamente antes de entrar na suspensão e/ou hibernação do sistema, systemd-suspend.service (e as outras unidades mencionadas, respectivamente) executará todos os executáveis ​​em /lib/systemd/system-sleep/ ... Todos os executáveis ​​neste diretório são executados em paralelo, e a execução da ação não continua até que todos os executáveis ​​tenham terminado.

Então, examinando, /lib/systemd/system-sleeppercebi que continha scripts para tlpos quais eu havia instalado recentemente. Desinstalei o tlp e os pacotes associados usando

sudo apt --purge remove tlp tlpui tlp-rdw

E o problema desapareceu completamente.

informação relacionada