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.
-
Faça do ramdisk um membro de um grupo de volumes com uma unidade física.
-
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.
-
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.