Qual é o comando do espaço do usuário para sair da hibernação?

Qual é o comando do espaço do usuário para sair da hibernação?

Durante muito tempo, usei

echo disk > /sys/power/state

Para hibernar /dev/sda10e eu estava usando o initrd da minha distribuição Debian para retomar.

Mas recentemente, mudei para um array raidque exigem que eu use um initramfs completamente personalizado (Tive que construí-lo do zero porque a tentativa de modificar o initrd existente não funcionou)para configurar o array raid antes de montar a partição raiz.

Há duas maneiras de retomar: o kernel pode ler diretamente o sistema de arquivos swap com o resume=parâmetro do kernel(e será retomado antes de iniciar o init) ; ou precisa de algum espaço de usuário(por exemplo, carregando módulos)para poder acessar a partição swap.

Então, qual é o comando de espaço do usuário para retomar de /dev/mapper/isw_qfyzrvbsusf_Volume0p9 ?

Responder1

A resposta curta é /sys/power/resume

Resposta muito mais longa, porque isso por si só não fará muito bem. A maioria das distros recomenda iniciar um currículo a partir do processo init/PID 1 (espaço inicial do usuário). No entanto, as instruções quase invariavelmente informarão você para adicionar um argumento de linha cmd do kernel ao seu carregador de boot com o destino de currículo. A razão para isso é, em quase todos os casos, que a própria ferramenta de construção do initramfs (dracut / mkinitcpio / initramfs-tools) é acionada por esse argumento na configuração.

Com base no seu exemplo e distribuição, presumo que você esteja usando a interface do kernel de baixo nível para suspensão (swsusp). Existem vários outros utilitários que podem ser usados ​​para iniciar o processo de suspensão; todos eles são fundamentalmente invólucros em torno do primeiro item, swusp.

  • swusp- interface de kernel de baixo nível; a interface do espaço do usuário é através do sysfs
  • uswswp- wrapper de suspensão de software de espaço de usuário de baixo nível - fornece utilitários s2disk, s2ram (não mantidos ativamente)
  • pm-utils- scripts de alto nível para configurar o processo
  • suspensão do systemd- em sistemas systemd, está disponível um alvo de suspensão que iniciará a operação de suspensão através da interface do kernel.

Retomar configuração

Um esboço simplificado da sequência de inicialização no Linux com o uso de uma imagem initramfs é:

[BIOS] ==> [Boot Loader] ==>[Kernel em rootfs temporários - initramfs] ==> [Kernel em rootfs - unidades]

Há uma pequena janela no final do estágio initramfs onde a retomada pode ocorrer; depois que o kernel iniciou o PID 1 (systemd ou init), carregou os drivers para o ataque, mas antes de montar as unidades reais.

Forneci um exemplo de configuração típica de currículo. Isso pressupõe que o caminho de currículo fornecido é uma partição swap; e não uma partição 'normal' contendo um arquivo de troca. Um arquivo de troca requer configuração adicional. O método systemd é diferente - ele usa uma regra udev baseada em resume.target que aciona o processo de retomada. Vale a pena verificar se a abordagem de imagem mais tradicional do bootloader/initramfs não funciona. Isto é uma correlação direta com a forma como um sistema baseado em init faria isso; mas é um pouco mais complicado inserir manualmente seu próprio script e corrigir as interdependências/tempo relativo.

O resultado final é que o momento em que a retomada é acionada é imediatamente anterior ao momento em que o kernel monta os discos rígidos 'reais'. Portanto, se o kernel puder montar o fs inteiro, ele também terá todos os recursos e informações necessárias para montar apenas a partição swap.

Certifique-se de que sua partição swap esteja montada via fstab; a ferramenta dracut initramfs procura especificamente por ele e não inclui o módulo resume se a partição swap não estiver lá.

configurar bootloader

Supondo que você esteja usando o grub2, você precisa anexar resume=/dev/mapper/isw_qfyzrvbsusf_Volume0p9ao GRUB_CMDLINE_LINUX_DEFAULTcampo em /etc/default/grub Atualizar sua imagem do grub, geralmente com o comando:sudo grub2-mkconfig -o /boot/grub2/grub.cfg

reconstruir initramfs

Você precisa reconstruir a imagem initramfs com o recurso de retomada (bem como as modificações de raid que você já fez). O Debian fornece ferramentas dracut e initramfs para gerar initramfs. Deve ser regenerado com o módulo de currículo. Com dracut, adicione o argumento de linha de comando --add resume. Com update-initramfs, adicione a entrada resume=/dev/mapper/isw_qfyzrvbsusf_Volume0p9ao arquivo de configuração/etc/initramfs-tools/conf.d/resume

Deveria ser isso; presumindo que fiz algumas suposições corretas sobre sua configuração.

Editar; supondo que você consiga cronometrar corretamente, você pode repetir o número do dispositivo principal/secundário da partição swap para /sys/power/resume a partir de um script de inicialização para acionar a retomada. Sua imagem initramfs (ou initd) precisa ter suporte para currículo, ou esse item sysfs e a capacidade que ele representa não existirão. Verhttps://bugs.launchpad.net/ubuntu/+source/initramfs-tools/+bug/983805

Responder2

O arquivo é /sys/power/resume.

Para acionar o currículo, o maior do dispositivo seguido do menor deve ser gravado nesse arquivo. Portanto, o seguinte comando pode alcançá-lo:

echo `stat -c %t /dev/mapper/isw_*_Volume0p9`\:`stat -c %T /dev/mapper/isw_*_Volume0p9` > /sys/power/resume

informação relacionada