Inodes não referenciados na instância do Linux EC2

3

Eu tenho uma instância do Amazon EC2 que estou usando como um servidor de arquivos NFS. Está usando um array RAID0 de volume 5x1TB. O sistema é muito intensivo em E / S e os arquivos estão sendo gravados / copiados / excluídos através do compartilhamento NFS o tempo todo. Muitas vezes, noto que há uma grande discrepância entre o espaço em disco usado e o espaço livre disponível. (Eu estou verificando enquanto o sistema está ocioso e nenhum arquivo está sendo gravado no compartilhamento de arquivo / sistema). Meu único "Fix" para isso é desligar a instância e reiniciá-lo (reinicialização não funciona e apenas trava a máquina). Quando ele é reiniciado, ele executa fsck e eu posso ver no log do sistema (muitos) Inodes "não referenciados" sendo limpos (esse não é o log inteiro):

   25.110924] EXT4-fs (dm-1): ext4_orphan_cleanup: deleting unreferenced inode 122291727
[   25.114687] EXT4-fs (dm-1): ext4_orphan_cleanup: deleting unreferenced inode 122291723
[   25.118610] EXT4-fs (dm-1): ext4_orphan_cleanup: deleting unreferenced inode 122291703
[   25.135184] EXT4-fs (dm-1): ext4_orphan_cleanup: deleting unreferenced inode 122291722
[   25.140005] EXT4-fs (dm-1): ext4_orphan_cleanup: deleting unreferenced inode 122291725
[   25.144013] EXT4-fs (dm-1): ext4_orphan_cleanup: deleting unreferenced inode 122291705
[   25.148008] EXT4-fs (dm-1): 735 orphan inodes deleted
[   25.150286] EXT4-fs (dm-1): recovery complete
[   26.126887] EXT4-fs (dm-1): mounted filesystem with ordered data mode. Opts: (null)
[  OK  ]

Não consigo encontrar nenhuma solução para isso em qualquer lugar on-line. Alguém sabe o que está causando isso ou como evitá-lo? Ou talvez consertá-lo sem desmontar a unidade?

Mais algumas informações:

Informação da versão:

Linux version 3.10.42-52.145.amzn1.x86_64 (mockbuild@gobi-build-64003) (gcc version 4.8.2 20131212 (Red Hat 4.8.2-7) (GCC) ) #1 SMP Tue Jun 10 23:46:43 UTC 2014

Montagem da matriz RAID0 em /etc/fstab da seguinte forma:

/dev/vg0/data /data ext4 defaults,auto,noatime,noexec 0 0

/etc/mdadm.conf:

DEVICE /dev/xvdk /dev/xvdj /dev/xvdi /dev/xvdh /dev/xvdg
ARRAY /dev/md0 metadata=1.2 name=ip-172-31-10-215:0 UUID=4c4fb472:e0540788:69a83d01:a75a8a3e

/ etc / exports:

/data *(rw,sync)

Os clientes montam o compartilhamento NFS da seguinte forma:

x.x.x.x:/data  /mnt/fileserver nfs defaults 0  0
    
por dtroy 14.07.2014 / 07:00

1 resposta

4

O comportamento que você descreve pode ser causado por aplicativos que mantêm arquivos abertos mesmo depois de serem excluídos. Se um aplicativo tiver um arquivo aberto (por exemplo, tail ) e outro aplicativo aparecer e excluir o arquivo (por exemplo, rm ), o primeiro aplicativo continuará mantendo uma referência ao arquivo até que o primeiro aplicativo feche o arquivo. Nesse ponto, o sistema de arquivos reconhecerá que o arquivo foi excluído e fechado e limpará as referências.

Aqui está uma explicação excessivamente simplista de como os arquivos e inodes estão relacionados. Um arquivo é essencialmente um registro em um sistema de arquivos que atribui um nome (ou nomes) a um inode específico. Arquivos abertos são realmente referenciados pelo inode. Quando você exclui um arquivo, na verdade, você está removendo o link entre o nome e o inode, mas um arquivo aberto também mantém um link entre o descritor de arquivo aberto e o inode também. Fechar o arquivo exclui o link entre o descritor de arquivo aberto e o inode. O inode não será recuperado pelo sistema de arquivos até que todos os links tenham sido excluídos.

Quando você observa o espaço livre informado pelo sistema de arquivos, ele informa o espaço associado a todos os inodes atualmente marcados como usados. Quando você examinar todos os diretórios e somar o espaço de arquivos usado por cada arquivo / diretório, poderá ser menor se os arquivos tiverem sido excluídos, mas ainda estiverem abertos. Sua varredura de diretório não verá o espaço usado pelos arquivos que tiveram seus links de nomes removidos.

Quando você desativa o sistema, não dá chance para que os aplicativos fechem seus arquivos. Sem essa chance, o sistema de arquivos não terá a chance de recuperar os inodes usados pelos descritores de arquivos abertos dos arquivos excluídos. Quando o sistema inicializa, o sistema de arquivos vê esses inodes sem nada que os aponte. Eles são chamados de "inodes órfãos" e o sistema de arquivos permite que você saiba que está excluindo a referência do arquivo.

Uma ferramenta que você pode usar para localizar processos com descritores de arquivos abertos é lsof . Se você executar isso em um processo, ele mostrará todos os descritores de arquivos abertos desse processo. Os arquivos excluídos geralmente aparecem como (deleted) , dependendo da versão.

    
por 05.08.2014 / 05:10