Pode trocar ser compartilhado com segurança enquanto hibernando?

4

Suponha que eu tenha duas instalações Linux A e B , ambas usando a mesma partição swap.

Pelo que entendi, rodar A ou B não causará problemas com o swap, já que apenas um deles o está usando em um determinado momento. No entanto, se eu inicializar A , hibernar, então inicializar B , a troca está sendo usada por ambos ( A em uma forma passiva, mas os dados estão lá).

A pergunta é: o sistema hibernado sobreviverá depois disso? Se não, a memória será corrompida ou o A não poderá ser retomado, causando uma inicialização normal?

Nota: Meu show principal é um sistema ao vivo que detecta e usa partições swap disponíveis no disco rígido. Eles destruirão sistemas hibernados?

    
por Darkhogg 07.04.2014 / 15:57

2 respostas

6

The question is: Will the hibernated system survive after this?

Se o sistema B usar o espaço de troca, o que você pode presumir, então duvido que o sistema A possa ser reiniciado da hibernação com sucesso, e as conseqüências podem ser ruins se isso acontecer.

If not, will the memory be corrupted or will A just be unable to resume?

Embora os documentos do kernel contenham:

 * BIG FAT WARNING *********************************************************
 *
 * If you touch anything on disk between suspend and resume...
 *                              ...kiss your data goodbye.

Isso se aplica ao sistema de arquivos real, já que o mesmo [src]/Documentation/power/swsusp.txt também observa:

The resume process checks for the presence of the resume device, if found, it then checks the contents for the hibernation image signature. If both are found, it resumes the hibernation image.

Então, presumindo que esta assinatura está no começo do dispositivo swap, e presumindo que o uso normal de swap também começa no começo do dispositivo, então o swap normal o uso destruirá a "assinatura da imagem de hibernação" e, quando o sistema A inicializar, ele não encontrará essa assinatura e não sairá da hibernação. Ela será iniciada novamente.

Mas enquanto essas suposições parecem razoáveis, sem qualquer promessa das pessoas que implementaram o sistema, é impossível dizer que elas são completamente sólidas - meu conselho é que você pode estar fazendo uma aposta séria ao fazer isso.

Se você estiver usando a hibernação e ainda não tiver essa opção no menu do gerenciador de inicialização, é uma boa idéia ter uma que contenha noresume na linha do kernel para que você possa optar por ignorar a continuação da hibernação. Tanto quanto sei, infelizmente não existe tal parâmetro de linha de kernel para desabilitar o uso de swap, por exemplo. para o sistema B quando você sabe que o sistema A usou o swap para hibernação.

    
por 07.04.2014 / 16:21
3

O primeiro sistema armazena sua memória em swap, então se você tentar inicializar o segundo sistema que também usa a mesma troca, então uma das duas coisas acontecerá: ou o segundo sistema tentará continuar usando os dados do primeiro sistema, e isso irá travar e queimar, ou apagará a memória do primeiro sistema para que ele não possa ser retomado.

Como regra geral, você nunca deve inicializar em outro sistema operacional enquanto um estiver em hibernação. Se o segundo tentar montar a mesma partição que o primeiro montou, ele corromperá o sistema de arquivos, já que o segundo SO não tem idéia de quais dados o primeiro ainda pode ter armazenado em cache, e o primeiro não faz ideia do que o segundo mudou enquanto estava em hibernação .

    
por 07.04.2014 / 19:10