Tamanho do cache da página de disco no Linux para fins de integridade

2

Estou tentando vincular a corrupção em um formato de disco baseado em blocos na presença de falhas de máquina plausíveis em um aplicativo específico do Linux. Ou seja, o arquivo é lido e escrito em unidades de tamanho fixo definidas pelo aplicativo em deslocamentos que são múltiplos desse tamanho de unidade essencialmente de forma aleatória.

Eu percebo que uma gravação para bloquear n pode ou não ser corrompida se algo terrível acontecer durante a gravação ou antes da gravação ser sincronizada: isso é inevitável.

O que eu gostaria de tentar evitar é a possibilidade deste bloco de corrupção n-1 ou bloco n + 1 se eles estão quiescentes (sem atividade durante o período).

Agora, se o tamanho do bloco for ridiculamente pequeno, dizem 4 bytes, fica claro que o bloco n será, em vários sentidos de hardware e sistema operacional, "na mesma página" como os blocos n-1 e n + 1 e quando a escrita desta página está em operação, então alguma calamidade pode causar não apenas o bloqueio n, mas n-1, n + 1, ... para se tornarem corrompidos (mesmo que não sejam alterados?) no disco.

Existe algum tamanho no qual eu posso definir meus blocos de forma que uma gravação para o bloco n seja essencialmente independente de blocos adjacentes no sentido de que se um bloco é quiescente então um bloco adjacente ocupado não pode fazer com que ele fique corrompido no bloco? evento de uma falha não-bizantina?

Problemas de alinhamento podem ser tratados pela inserção de preenchimento, se necessário, de modo que não seja intransponível.

Aqui estão os meus pensamentos até agora: o bloco de discos comumente citado de 512 bytes parece improvável, pois é muito pequeno, e não tenho certeza se isso se aplica a discos modernos e com certeza o sistema operacional O tamanho da unidade de cache de gravação de memória é maior do que isso, de qualquer maneira. Eu sei que as tabelas de páginas x86 podem ser 4k (o que parece um tamanho razoável) ou 4M (o que parece muito grande). sysconf (_SC_PAGESIZE) retorna um número, mas é o certo?

Podemos supor que minhas gravações são para um tipo de sistema de arquivos não-daft (ext-n ou xfs, digamos) e que a máquina é uma caixa Linux x86 padrão de 64 bits, se alguma delas for relevante.

    
por Dan Sheppard 24.09.2014 / 13:54

0 respostas