Backup de disco lento para um ramdisk no Linux?

5

Resumo rápido e sujo: quero algo como um cache de gravação que drena somente quando o sistema não está ocupado.

Eu quero algo ao longo das linhas desta questão disco RAM e RAID físico com uma ligeira torção.

Para uma compilação em particular que estou fazendo com frequência, gostaria de manter a saída de compilação em um ramdisk que eventualmente é gravado em disco. Um alvo em particular que estou construindo é realmente um monte de cp, tar, gzip e tal, estou com o limite de disco. Em um ciclo de depuração apertado, quero que seja rápido e não me importo muito se a saída de compilação for destruída pelo desligamento. No entanto, seria bom se o ramdisk fosse sincronizado para o disco quando o sistema não estivesse ocupado. Eu posso imaginar fazendo isso com um cron job, mas eu estou perguntando a todos se há uma solução mais coerente que combina as características da outra pergunta (ramdisk que transborda para o disco) com essa nova reviravolta (dado disco ocioso suficiente) tempo, o conteúdo do ramdisk também é enviado para o disco). O ideal é que a coisa toda pareça um único ponto de montagem, onde defino o tamanho total e a quantidade de memória RAM a ser usada.

--- atualizado ---

Eu não acho que o cache da página faça o que eu quero, porque eu realmente quero um desempenho de gravação bastante rápido.

    
por kbyrd 20.10.2009 / 18:28

3 respostas

1

Algumas ideias malucas. Primeiro, o Puppy Linux meio que faz isso; Ele sincroniza seu espaço de trabalho para permanente de vez em quando. Parece fazer isso com scripts inteligentes e comandos simples de cópia.

Segundo ... e se você programou um rsync entre o ramdisk- > disco real de vez em quando?

    
por 21.10.2009 / 13:43
4

but I'm asking you all on the off chance there's a more coherent solution that combines the characteristics of the other question (ramdisk that overflows to disk) with this new twist (given enough idle disk time, the contents of the ramdisk make it out to disk too).

O que você está pedindo é um mecanismo de gravação adiada, ou seja, as gravações no ramdisk recebem prioridade sobre as gravações no armazenamento permanente, mas todos os dados eventualmente gravam no disco, correto?

Idealy, the whole thing looks like a single mountpoint, where I set the total size and the amount of ram to use.

Por mais engraçado que pareça, você pode conseguir usar um espelho LVM para concluir esse processo.

  1. Faça do ramdisk um membro de um grupo de volumes com uma unidade física.

  2. Espelhe o ramdisk no disco rígido. Note que os espelhos LVM são específicos da direção, ou seja, os dados fluem de um PV para outro unidirecionalmente.

  3. Monte o volume do LVM em algum lugar como um sistema de arquivos unificado.

As gravações são colocadas em spool e gravadas no disco RAM baseado em LVM (e em virtude do espelho, a unidade física também). Ao contrário de um RAID-1 em que as gravações são síncronas e paralelas (as duas unidades são gravadas de uma só vez), um espelho LVM é assíncrono e sequencial (a unidade principal recebe a gravação e, em seguida, o LVM envia a gravação ao espelho). Isso chega perto (mas não 100%) do comportamento que você está procurando. Tenha em mente que o LVM faz pressão sobre as gravações pendentes para limpar no disco, então qualquer "inativo" que você vir será medido em segundos, na melhor das hipóteses, segundos parciais, na pior das hipóteses.

O outro lado desse arranjo é que agora você tem um mecanismo de persistência muito interessante. Quando você iniciar, crie seu ramdisk e espelhe a unidade existente nele; Quando o espelho estiver completo, quebre o espelho e inverta a direção (ramdisk - > hdd). Isso significa que toda reinicialização resultará em seus dados sendo colocados no disco, e antes do desligamento, gravados do disco em disco de volta para um disco rígido. Provavelmente poderia ser script em perl ou um script de shell.

Tenho certeza de que existem outras maneiras de fazer isso, mas essa é a versão rápida e sem recursos. Vou pensar um pouco mais e ver o que consigo descobrir.

    
por 20.10.2009 / 23:06
2

O que você descreve é exatamente o que o cache de disco do seu sistema operacional deve fazer. O sistema operacional moderno é muito bom se tiver memória suficiente à sua disposição.

Na minha opinião: Dê à sua máquina memória RAM suficiente e deixe o SO fazer o trabalho pesado.

    
por 20.10.2009 / 18:50