Durante muito tempo, usei
echo disk > /sys/power/state
Para hibernar /dev/sda10
e 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_Volume0p9
ao GRUB_CMDLINE_LINUX_DEFAULT
campo 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_Volume0p9
ao 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