monitorando bloquear acesso ao disco

3

Estou procurando uma maneira de monitorar o acesso a blocos de disco e monitorar o acesso como um bitmap de blocos.

Eu também preciso da capacidade de congelar (e enfileirar) o acesso ao bloco do dispositivo (e também descongelar e gravar os blocos pendentes). Parece que esses recursos devem ser suportados no modo kernel (não pode ser feito provavelmente como um aplicativo de usuário). No kernel há blk-core.c que provavelmente é o portão antes de chamar o dispositivo de bloco real. Eu pensei que eu poderia usar isso para esse propósito.

Parece que já é usado algum mecanismo de fila, e que eu precisaria de alguma maneira de entender quando a gravação real no dispositivo é feita.

void blk_start_queue(struct request_queue *q)
{
    WARN_ON(!irqs_disabled());

        queue_flag_clear(QUEUE_FLAG_STOPPED, q);
           __blk_run_queue(q);
 }
 EXPORT_SYMBOL(blk_start_queue);

Eu também vejo que ele usa setores, não blocos (que é o que preciso rastrear).

É que a solicitação de gravação do sistema de arquivos do kernel está em setores, enquanto o driver de dispositivo abaixo do disco funciona em blocos? Se sim, então o monitoramento de bloco deve estar no driver de disco.

Eu também não tenho certeza sobre o bloco de dispositivo em si (por exemplo, hd.c) A estrutura da solicitação contém o local exato onde a transferência deve ser feita:

    struct request
     {
       ....
       sector  // the position in the device at which the transfer should be made
      ....
    }

fornece informações sobre o setor exato para leitura / gravação, mas como a camada acima da qual envia a solicitação pode decidir sobre ela? Não é a decisão do driver de bloco (hd.c neste caso) tomar?

Eu provavelmente sinto falta de algo no meu entender.

Obrigado por qualquer sugestão sobre o assunto.

    
por ransh 02.03.2016 / 12:56

0 respostas