Medindo 'total de bytes gravados' no Linux

36

Estamos bastante interessados ​​em explorar a possibilidade de usar unidades SSD em um ambiente de servidor. No entanto, uma coisa que precisamos estabelecer é a expectativa de longevidade da unidade. De acordo com este artigo, os fabricantes estão relatando a resistência da unidade em termos de 'total de bytes gravados' (TBW). Por exemplo, a partir desse artigo, um SSD Crucial C400 é avaliado em 72 TB TBW. Existem scripts / ferramentas no ecossistema Linux para nos ajudar a medir o TBW? (e depois tome uma decisão mais instruída sobre a viabilidade do uso de unidades SSD)

más notícias
fonte

Respostas:

28

Outra possibilidade é olhar para / proc / diskstats . Não é persistente nas reinicializações, mas possui dados para todos os dispositivos de bloco. Provavelmente o mais interessante para você é o campo 10, que contém o número total de setores gravados. Em um sistema com discos scsi com um tamanho de setor de 512 bytes, você pode executar

awk '/sd/ {print $3"\t"$10 / 2 / 1024}' /proc/diskstats

para ver quantos megabytes foram gravados em cada dispositivo. A saída será semelhante

sda 728.759
sda1 79.0908
sda2 649.668

sciurus
fonte
4
Tamanho do setor poderia ser encontrado executando o comando #cat / sys / block / sda / Fila / hw_sector_size
Antonio
@Antonio thanks! Não tenho certeza de quando isso foi adicionado. Parece que está no 3.2, mas não no 2.6.18.
sciurus
@ sciurus você poderia explicar a matemática por trás de seus cálculos, por favor? Você está falando sobre o tamanho do setor = 512, mas seus cálculos estão dividindo o valor lido com 2/1024
giro
@gyre O campo 10 contém o número de setores de 0,5 kilobytes gravados. Divido isso por 2 para obter o número de kilobytes escritos. Em seguida, divido isso por 1024 para converter em megabytes.
Sciurus #
@antonio Isso faz mostrar o tamanho do setor a ser utilizado com o hardware subjacente, mas AFAICT da fonte kernel, iostat fonte e testes empíricos, o número "setores" em / proc / diskstats sempre refere-se a 512 bytes, mesmo quando hw_sector_sizeé diferente ( pelo menos desde a série 2.4). Veja block/cfq-iosched.c, particularmente cfqg_stats_update_dispatch().
the paul
23

Eu estava lutando com o mesmo problema no meu notebook, mas como eu o reiniciava diariamente, a resposta aceita não era útil. Eu tenho um SSD mSATA da Samsung, que possui o atributo SMART # 241 Total_LBAs_Written. De acordo com a documentação oficial ,

Para calcular o tamanho total (em bytes), multiplique o valor bruto desse atributo por 512B.

Portanto, o comando a seguir fornece o total de TB gravado no meu disco SSD (sdb)

sudo smartctl -A /dev/sdb | awk '/^241/ { print "TBW: "($10 * 512) * 1.0e-12, "TB" } '

Como também funciona no meu disco rígido, presumo que ele funcione em praticamente todos os discos rígidos modernos.

Gabriel Miretti tcp gmiretti
fonte
3
Não, isso só existe em alguns modelos de unidades SSD. Não é universal.
Michael Hampton
3
Eu queria salientar que a sua equação realmente produz um número que está fora seria mais precisos como: sudo smartctl -A /dev/sda1 | awk '/^241/ { print "TBW: "($10 * 512) * 1.0e-12, "TB" }'.
Jordon Bedwell
Meu Intel SSD tem o mesmo atributo, mas é chamado Host_Writes_32MiB. Também há o Atributo 249 NAND_Writes_1GiB. Então, estar ciente de que em cada SSD este parece ser diferente (por exemplo, um mSATA Intel SSD da mina não tem esses atributos)
Reox
No meu Intel SSD Pro 5400s (SATA), o Total_LBAs_Writtenespecificado em GBs! Não conseguia entender o pouco 4714inteligente que estava sendo mostrado. Mas, olhando na caixa de ferramentas Intel SSD no Windows, mostrou que estava em GB.
MrCalvin
15

Você pode ver quantos dados foram gravados em um sistema de arquivos ext4 consultando / sys / fs / ext4 / $ DEVICE / lif_write_kbytes.

sciurus
fonte
Esse é um recurso interessante que eu não conhecia! Uma vergonha a maioria dos nossos sistemas estão executando ext3 e também algumas partições LVM-primas para VMs :)
Badnews
ext3 (e um pouco menor) ext4 não foram projetados para gravação em flash. A falha ocorrerá dependendo do número de vezes que um local é gravado - e com sistemas de arquivos convencionais, os pontos ativos se desenvolvem muito rapidamente. Os números citados pelos fabricantes são muito enganadores, pois assumem uma distribuição uniforme de gravações. Existem sistemas de arquivos - como o JFFS2 - projetados especificamente para prolongar a vida útil dos seus SSDs.
symcbean 21/02
2
@symcbean - com os dispositivos flash atuais, isso não é problema. Todos eles têm rotinas de nível de desgaste incorporadas aos controladores a bordo.
EEAA 21/02
1
@symcbean - Existem dois tipos de dispositivos flash. Os dispositivos de tecnologia de memória (ou MTDs) apresentam uma interface direta com a memória flash. Eles são normalmente encontrados em dispositivos incorporados e são para isso que o sistema de arquivos como o JFFS2 foi projetado. O outro tipo de dispositivo flash oculta a memória flash atrás de um Flash Translation Later (FTL) para que pareça um dispositivo de bloco comum. É assim que a tecnologia do consumidor, como SSDs, pendrives e cartões de memória, é implementada. Sistemas de arquivos como o JFFS2 não são apropriados para eles; em vez disso, você deve usar sistemas de arquivos como o ext4, projetados para dispositivos de bloco.
sciurus 23/02
1
CUIDADO: O ext4 lif_write_kbytes e session_write_kbytes não são representativos das gravações da célula de memória SSD. Eu vi um sistema reportar 15 TB para ext4 lif_write_kbytes, enquanto o próprio SSD relatou apenas 1 TB através do atributo SMART 241. Suspeito que o ext4 possa estar adicionando todo o tamanho do espaço livre do sistema de arquivos a essas estatísticas toda vez que o SSD for executado obviamente, o controlador não apagaria repetidamente todos os blocos disponíveis se eles não tivessem sido tocados desde a última exclusão. A saída tune2fs -l parece igualmente enganosa.
precisa saber é o seguinte
2

Você pode tentar iostat. Ele fornece estatísticas relacionadas ao uso de E / S e CPU. Dê uma olhada no manual man iostat.

Khaled
fonte
Suponho que poderia funcionar, mas eu estava esperando que houvesse algo de nível superior disponíveis que poderiam fornecer totais de bytes cumulativos :)
Badnews
2

Para o meu KINGSTON SEDC400S37480G, no Ubuntu Server 14.04, uso o seguinte script para monitorar o TBW. Eu corro do cron uma vez por dia. O script gera um arquivo de log.

Você precisa calcular para que funcione. Instale o calc usando:

apt-get install apcalc

Conteúdo do script:

echo "*** $(date -R) ***" >> /scripts/tbw/log.txt
tbw=$(cat /sys/fs/ext4/sda1/lifetime_write_kbytes)
TB=1000000000
echo TB written to sda1: >> /scripts/tbw/log.txt | calc $tbw / $TB >> /scripts/tbw/log.txt

Saída:

*** Thu, 20 Jul 2017 03:02:51 +0300 ***
TB written to sda1:
    3.062138442
inteq
fonte
Em vez de calc, pode-se usar o GNU bc
Elton Carvalho