Como eu testo para ver se todas as gravações no meu disco rígido estão alinhadas com seus setores 4k?

9

Estou usando o Linux com 4 discos rígidos que usam setores 4k. Existem várias camadas entre o meu sistema de arquivos e os dispositivos brutos: Discos > Linux Raid 5 > dm-crypt > LVM.

Cada recurso que encontrei explicou como configurar cada camada para garantir que as gravações no topo dessa camada sejam alinhadas ao limite do setor 4k. No entanto, não encontrei nada que explique como verificar se as gravações feitas nos discos rígidos estão realmente acontecendo em limites de 4k.

Não estou interessado em reexaminar minha configuração para usar a lógica para determinar se ela está alinhada corretamente. Quero examinar o que realmente está acontecendo quando as gravações são feitas no disco.

Como posso registrar ou visualizar os endereços e o tamanho das gravações que estão sendo feitas em meus discos rígidos, para que eu possa verificar se eles estão alinhados corretamente?

    
por Brian Pellin 21.09.2011 / 17:50

2 respostas

2

Perguntei-me a mesma pergunta há algum tempo e simplesmente fiz o seguinte:

Escrevi com o shell algumas vezes uma string bastante incomum em um arquivo (algo como "WackaWacka"). Então, simplesmente procurava com um dump hexadecimal (usado od ) o conteúdo real do disco e verificado se a primeira ocorrência da string foi armazenada exatamente no começo de um bloco de 4k.

Dica: não use um editor - ele pode criar arquivos temporários que você não conhece e que também podem conter strings. Faça assim:

 $ for i in 1 2 3 4 5 ...
 >  do
 >   echo "WackaWacka!"
 >  done > mytestfile

Então .sh_history pode conter a string de pesquisa, mas não 5 vezes seguidas; -)

E então, basta pesquisar:

 # sync
 # od -c /dev/sda | grep 'W   a   c   k   a'

Bem, é melhor que seja feito em um disco vazio para evitar serging através de Gigabytes de dados; -)

    
por 26.09.2011 / 17:29
2

Escreva um bloco de 4k e observe quantos dados são lidos / escritos com iostat (as colunas 'Blk_read' 'Blk_wrtn'). Se os dados não estiverem alinhados, uma gravação acionará as leituras primeiro e acionará mais de 4k de gravações.

Você precisará tomar cuidado para não medir as atualizações de metadados, embora ... ou simplesmente afogá-las, fazendo milhares de gravações em 4k .... Portanto, certifique-se de que nada mais esteja verificando discos ou mantendo arquivos abertos (eu acha que lsof seria suficiente?), abra um novo arquivo, espere, execute iostat , escreva 4k no arquivo, sincronize a gravação (ou espere um pouco?) e verifique iostat novamente.

Isso parece dar uma saída razoável para mim:

iostat  -d /dev/hdb3
dd if=/dev/urandom of=/mount/path/ofhdb3/tmptest bs=4k count=10000 conv=fdatasync
iostat  -d /dev/hdb3

A página de manual do iostat afirma que ele deve ser relatado em blocos de 512 bytes, e vejo que mais de 80000 blocos adicionais foram gravados e nenhum bloco foi lido. Se o seu alinhamento estiver desativado, você verá um número similar de leituras (já que para escrever um 4k desalinhado, é necessário ler os dois blocos impactados, alterá-los e escrevê-los novamente). Na verdade, a única razão pela qual o alinhamento é importante é evitar essas leituras (de modo que é realmente o que você deseja procurar: lê um disparador de carga de trabalho de gravação?)

    
por 13.10.2011 / 21:02