Por que recebo um erro de falha no Fsync?

0

Estou tentando seguir as instruções de documentação do MongoDB para configurar o LTH adequadamente para uma máquina executando o MongoDB.

Uma das instruções consiste em criar um script que é executado na inicialização. Infelizmente, nem o script sugerido, nem o código similar reescrito como um serviço systemd funciona.

Ao depurar o problema, encontrei outro. Quando eu executo:

root@demo:/# echo never > /sys/kernel/mm/transparent_hugepage/enabled

o comando parece ser executado com sucesso, mas o arquivo permanece inalterado, então, se eu executar:

root@demo:/# cat /sys/kernel/mm/transparent_hugepage/enabled

devolve o conteúdo original:

always madvise [never]

Eu tentei modificar o arquivo com vim ; ao tentar salvar o arquivo, ele reclama que Fsync falhou . Embora esse erro tenha sido documentado , no meu caso, há espaço em disco suficiente em / (20% usado, 7 GB disponível.)

Eu corro o comando no modo sudo e as permissões do arquivo parecem corretas:

-rw-r--r-- 1 root root 4096 ...

O diretório /sys não é montado em read apenas o modo , conforme mostrado por:

root@demo:/# grep sysfs /proc/mounts
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0

O que está acontecendo aqui?

    
por Arseni Mourzenko 13.03.2017 / 01:24

1 resposta

1

sysfs , o sistema de arquivos normalmente montado em /sys , é um sistema de arquivos virtual especial para fazer interface com o kernel Linux.

Os arquivos nele não são arquivos reais, eles representam estruturas de dados no kernel e apenas suportam métodos de acesso bastante simples. A leitura de tal arquivo pede informações ao kernel. Escrever em tal arquivo instrui o kernel a alterar uma configuração ou realizar uma ação.

É por isso que vim falha. Ele tenta acessar os arquivos virtuais de maneiras otimizadas para arquivos reais e isso não é suportado em sysfs .

Seu primeiro comando

root@demo:/# echo never > /sys/kernel/mm/transparent_hugepage/enabled

já foi bem sucedido!

Muitos "arquivos" sysfs, incluindo /sys/kernel/mm/transparent_hugepage/enabled , não imprimem somente a configuração atual quando lidos, mas imprimem todos os modos possíveis e usam colchetes para descrever qual dos vários modos está ativo.

No seu caso, never está entre parênteses, pelo que o modo que tentou ativar com echo já está ativo:

always madvise [never]

Se você estiver interessado em saber como o sysfs funciona, leia mais sobre ele na Wikipédia ou no site Documentação do kernel do Linux .

    
por 13.03.2017 / 02:23