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

3

Durante muito tempo, usei

echo disk > /sys/power/state

Para hibernar para /dev/sda10 e eu estava usando o initrd da minha distribuição Debian para continuar.

Mas recentemente, mudei para uma matriz de raid que exige que eu use um initramfs completamente personalizado (eu tive que construí-lo do zero porque tentar modificar o initrd existente não funcionou) , a fim de configurar o array RAID antes de montar a partição raiz.

Há 2 maneiras de continuar: ou o kernel pode ler diretamente o sistema de arquivos swap com o parâmetro resume= kernel (e ele será retomado antes de iniciar o init) ; ou precisa de algum espaço de usuário (por exemplo, carregar 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 ?

    
por user2284570 19.05.2016 / 17:42

2 respostas

0

O arquivo é /sys/power/resume .

Para acionar o currículo, a maior parte do dispositivo seguido pelo menor deve ser gravada nesse arquivo. Então, o seguinte comando pode alcançá-lo:

echo 'stat -c %t /dev/mapper/isw_*_Volume0p9'\:'stat -c %T /dev/mapper/isw_*_Volume0p9' > /sys/power/resume
    
por 27.05.2016 / 00:40
7

A resposta curta é / sys / power / resume

Resposta muito mais longa, porque isso por si só não fará muito se bem algum. 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 o informarão para adicionar um argumento de linha cmd do kernel ao seu carregador de boot com o destino de continuação. A razão para isso é que, em quase todos os casos, a ferramenta de criação do initramfs (dracut / mkinitcpio / initramfs-tools) é acionada por esse argumento na configuração.

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

  • swusp - interface de kernel de baixo nível; interface do espaço do usuário é através do sysfs
  • uswswp - software de espaço de usuário de baixo nível suspend wrapper - fornece utilitários s2disk, s2ram (não mantidos ativamente)
  • pm-utils - scripts de alto nível para configurar o processo
  • systemd-suspend - em sistemas systemd está disponível uma meta de suspensão que iniciará o suspender a operaçã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 temp rootfs - initramfs] == > [Kernel em rootfs - drives]

Existe uma pequena janela no final do estágio initramfs onde o currículo pode ocorrer; após o kernel ter iniciado o PID 1 (systemd ou init), carregou os drivers para o ataque, mas antes de montar os drives atuais.

Eu forneci um exemplo de uma configuração típica de currículo. Isso pressupõe que o caminho de continuação que você forneceu é 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 do udev baseada em resume.target, que aciona o processo de continuação. Vale a pena investigar se a abordagem de imagem bootloader / initramfs mais tradicional não funciona. Isso é um corelário direto da maneira que um sistema baseado em init faria isso; mas é um pouco mais complicado inserir manualmente o seu próprio script e obter a interdependência / tempo relativo correto.

A linha inferior é que o ponto no tempo em que o resumo é acionado é 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á toda a capacidade e as informações necessárias para montar apenas a partição de troca.

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

configure o bootloader

Supondo que você esteja usando o grub2, é necessário anexar resume=/dev/mapper/isw_qfyzrvbsusf_Volume0p9 ao campo GRUB_CMDLINE_LINUX_DEFAULT em /etc/default/grub Atualize sua imagem do grub, geralmente com o comando: sudo grub2-mkconfig -o /boot/grub2/grub.cfg

reconstruir o initramfs

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

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

Editar; supondo que você pode tempo corretamente, você pode ecoar o maior / menor número do dispositivo da partição de swap para / sys / power / resume a partir de um script de inicialização para acionar o currículo. Sua imagem initramfs (ou initd) precisa ter o suporte retomado ou o item sysfs e a capacidade que ele representa não existirão. Consulte o link

    
por 22.05.2016 / 07:33