AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 696064
Accepted
Jenny D
Jenny D
Asked: 2015-06-03 02:19:11 +0800 CST2015-06-03 02:19:11 +0800 CST 2015-06-03 02:19:11 +0800 CST

Não é possível criar arquivos em um grande sistema de arquivos XFS

  • 772

Temos um servidor Linux com um sistema de arquivos de 4 TB, que é usado para armazenar repositórios do Subversion. Existem muitos repositórios, vários dos quais estão em uso há vários anos.

O disco tinha originalmente cerca de 1 TB, mas começamos a ficar sem espaço e aumentamos para 4 TB há cerca de um ano. Agora, as pessoas estão relatando que não conseguem fazer check-in de arquivos em seus repositórios. A mensagem de erro é No space left on device.

O disco tem cerca de 1,5 TB livre e também relata ter inodes livres - e ainda assim, não é possível criar um novo arquivo nele. Ainda é possível atualizar arquivos antigos e, de forma intermitente, alguns repositórios serão atualizados, mas o mesmo repositório pode falhar na próxima tentativa.

linux
  • 1 1 respostas
  • 3513 Views

1 respostas

  • Voted
  1. Best Answer
    Jenny D
    2015-06-03T02:19:11+08:002015-06-03T02:19:11+08:00

    A razão do problema

    O problema acaba sendo como o XFS aloca inodes. Ao contrário da maioria dos sistemas de arquivos, a alocação ocorre dinamicamente à medida que novos arquivos são criados. No entanto, a menos que você especifique o contrário, os inodes são limitados a valores de 32 bits, o que significa que eles devem caber no primeiro terabyte de armazenamento no sistema de arquivos. Portanto, se você preencher completamente o primeiro terabyte e aumentar o disco, ainda não poderá criar novos arquivos, pois os inodes não podem ser criados no novo espaço.

    Solução 1 - alterar as opções de montagem

    Uma solução é remontar o sistema de arquivos com a opção mount inode64. No entanto, alguns aplicativos se comportarão de maneira estranha (por exemplo, MySQL) e o NFS ficará muito confuso. Portanto, se você não tiver certeza de que seu sistema funcionará com esta opção, poderá passar para a próxima opção.

    Solução 2 - mover arquivos

    A segunda solução é encontrar alguns dos arquivos que estão atualmente armazenados no primeiro terabyte e movê-los para outra área do sistema de arquivos.

    Mudança por idade

    No nosso caso, isso foi fácil - o sistema de arquivos estava em uso há anos, então poderíamos simplesmente encontrar os arquivos mais antigos, movê-los para fora do sistema de arquivos e, em seguida, movê-los de volta. Isso foi feito facilmente usando find:

    find /extra -mindepth 3 -maxdepth 3 -type d -mtime +730 -exec du -sh {} \; > /tmp/olddirs.txt
    

    nos deu uma lista contendo o tamanho e o nome do diretório para todos os diretórios exatamente 3 níveis abaixo do ponto de montagem, que tinham mais de 2 anos. Poderíamos então classificar a lista para encontrar os maiores diretórios e usá mv-los para movê-los para outro sistema de arquivos e vice-versa.

    Movendo por grupo de alocação

    Se você não pode simplesmente ir por idade, por exemplo, quando muitos arquivos foram criados ao mesmo tempo, você ainda pode encontrar os arquivos certos para mover, mas leva um pouco mais de tempo.

    O XFS tem grupos de alocação (também conhecidos como AG s), começando com 0. Você pode verificar o tamanho do bloco e o número de blocos de cada AG para descobrir quais grupos estão no primeiro terabyte, usando xfs_info /path/to/mountpoint. Ou você pode apenas verificar os primeiros AGs para ver quais estão cheios e, em seguida, limpá-los.

    1. Verificando o espaço livre nos primeiros quatro AGs:
    para ag em `seq 0 1 5`; faça echo freespace em AG $ag; xfs_db -r -c "freesp -s -a $ag" /dev/CACHE/CACHE ; grep "totalmente grátis"; feito

    Se o espaço livre total em qualquer grupo for menor que 40, você não poderá criar novos arquivos nele.

    1. Encontre arquivos nesse AG

    Isso requer a verificação dos metadados de cada arquivo no sistema de arquivos. Vai demorar muito ... Aqui vai uma sugestão:

       find /extra -mindepth 3 -type f -exec xfs_bmap -v {} \; > /tmp/agfilelist.txt
    

    Você pode então grep for " 0 "(que é um espaço, um zero e outro espaço) para encontrar todos os arquivos no AG 0, grep for " 1 "para encontrar os que estão no AG 1, etc... Comece com AG 0, mova os arquivos maiores para longe (usando mv, não cp!) e depois de volta. Repita até ter uma boa quantidade de espaço livre.

    Resultado

    Uma vez que movemos arquivos suficientes de /extra e depois voltamos, havia muito espaço no AG 0 e mais uma vez era possível criar novos arquivos.

    • 44

relate perguntas

  • Como descobrir detalhes sobre hardware na máquina Linux?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve