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 / unix / Perguntas / 769710
Accepted
melonfsck
melonfsck
Asked: 2024-02-20 20:16:34 +0800 CST2024-02-20 20:16:34 +0800 CST 2024-02-20 20:16:34 +0800 CST

Como o EXT4 lida com a súbita falta de espaço no armazenamento subjacente?

  • 772

Normalmente, os drivers de dispositivos de bloco informam o tamanho correto do dispositivo e é possível usar todos os blocos "disponíveis". Portanto, o sistema de arquivos sabe o quanto pode gravar nesse dispositivo anteriormente.
Mas em alguns casos especiais, como acontece com dispositivos dm-thinou dm-vdodispositivos, esta afirmação é falsa. Esse tipo de dispositivo de bloco pode retornar ENOSPCerro a qualquer momento, se seu armazenamento subjacente (sobre o qual o FS de nível superior nada sabe) ficar cheio.

Portanto, minha pergunta é: o que acontece nesse cenário: um sistema de arquivos EXT4 está montado r/w, no asyncmodo (que é o padrão), e está fazendo uma grande quantidade de gravações. O cache de disco (memória suja) também é envolvido e, no momento, há muitos dados a serem gravados se o usuário executar o synccomando.

Mas, de repente, o dispositivo de bloco subjacente desse sistema de arquivos EXT4 começa a recusar qualquer gravação devido a "não sobrar espaço". Qual será o comportamento do sistema de arquivos?
Ele imprimirá erros e entrará no r/omodo abortando todas as gravações e possivelmente causando perda de dados? Caso contrário, ele apenas esperará por espaço, repetindo periodicamente as gravações e recusando novas? Nesse caso, o que acontecerá com o enorme cache do disco, se outros processos tentarem alocar muita RAM? (No Linux, a memória suja é considerada Disponível, não é?).
Considerando o pior cenário, se o cache do disco estivesse ocupando a maior parte da RAM no momento do ENOSPCerro (porque o administrador configurouvm.dirty_ratiomuito alto), o kernel pode travar ou travar? Ou apenas fará com que todos os processos que desejam alocar memória esperem/travem? Finalmente, o comportamento difere entre os sistemas de arquivos?
Desde já, obrigado.

linux
  • 2 2 respostas
  • 353 Views

2 respostas

  • Voted
  1. Best Answer
    A.B
    2024-02-20T21:39:34+08:002024-02-20T21:39:34+08:00

    Quando o dispositivo de bloco compromete demais sua capacidade de dados disponível, como ao usar provisionamento thin, ou tem outros motivos para não poder aceitar mais gravações, como ter um snapshot cheio, ele precisa enviar uma mensagem para o que está gravando nele. ENOSPC não faria sentido neste contexto, então o erro escolhido geralmente é EIO (Erro de entrada/saída).

    ATUALIZAÇÃO: na verdade, o LVM tem um comportamento configurável. Para LV provisionado Thin :

    • --errorwhenfull n(padrão): bloqueia por até (configurável) 60 segundos, conforme considerado pelo OP, depois erros. A menos que uma ação automática seja executada durante esses 60 anos, é provável que o resultado seja o mesmo que um erro imediato.

      Observe também que se o tempo limite estiver completamente desativado:

      Desabilitar os tempos limite pode resultar na falta de recursos do sistema, esgotamento da memória, tarefas suspensas e conflitos. (O tempo limite se aplica a todos os thin pools do sistema.)

    • --errorwhenfull y: retorna imediatamente um erro

    Se o "usuário" for um sistema de arquivos, ele reagirá ao erro de E/S da mesma forma que se fosse causado por um erro de mídia real, possivelmente dependendo das opções de montagem (por exemplo, para ext4 as opções possíveis são errors={continue|remount-ro|panic}). Não posso dizer com certeza o que acontece com os dados sujos ainda no cache quando uma das opções sem pânico é escolhida. Pode-se imaginar que ele foi deixado no cache ou será perdido, mas deve-se presumir que será perdido de qualquer maneira.

    Como este é um resultado grave, esse espaço em disco deve ser monitorado ativamente e, uma vez atingido um limite, deve haver liberação de dados ou mais espaço real adicionado para que o espaço supercomprometido nunca fique cheio. O mesmo acontece com os snapshots, especialmente o tipo não-thin-provisionado que utiliza mais espaço ao longo do tempo: deve ser removido quando não for mais necessário. Existem até opções para aumentar automaticamente o espaço de provisionamento dinâmico para emergências (quando a camada que fornece espaço para a camada de provisionamento dinâmico ainda pode fornecer mais).

    outras referências:

    • Estender automaticamente o thin pool LV
    • Gerenciando espaço livre em volumes VDO
    • 5
  2. Austin Hemmelgarn
    2024-02-21T06:10:17+08:002024-02-21T06:10:17+08:00

    Depende do sistema de arquivos (e possivelmente das opções de montagem) e do armazenamento subjacente.

    Na maioria dos casos, uma falha na gravação em um dispositivo de bloco devido ao excesso de comprometimento do espaço será imediatamente propagada para o driver do sistema de arquivos como um erro de E/S. O LVM tem uma opção para atrasar isso (principalmente para que a funcionalidade de extensão automática tenha tempo de entrar em ação), mas está desabilitada por padrão. O QEMU tem uma opção que controla o comportamento disso com imagens de disco esparsas, mas por padrão ele propagará o erro para o sistema operacional convidado (também pode ser configurado para ignorar o erro ou pausar a VM). A maioria das outras coisas apenas lançará o erro imediatamente no driver do sistema de arquivos.

    A partir daí, o que acontece depende do sistema de arquivos. Em quase todos os casos, o erro será propagado para o espaço do usuário, embora quase sempre seja EIO e não ENOSPC (ENOSPC significa que o sistema de arquivos está sem espaço, mas tecnicamente não é isso que está errado aqui, e o sistema de arquivos também geralmente não consegue determinar o que causou o erro de IO obtido da camada inferior, então normalmente não há como saber que é devido à falta de espaço da camada inferior). Por padrão, ext4 não fará nada além disso, embora dependendo das opções de montagem (e das coisas definidas por tune2fs), ele poderá remontar somente leitura ou poderá desencadear um kernel panic. O BTRFS remontará somente leitura e, em algumas configurações de vários dispositivos, também poderá alternar para o modo degradado. Não tenho certeza sobre outros sistemas de arquivos (embora eu espere que o XFS remonte somente leitura neste caso).

    • 4

relate perguntas

  • Existe uma maneira de fazer ls mostrar arquivos ocultos apenas para determinados diretórios?

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

  • Necessidade de algumas chamadas de sistema

  • astyle não altera a formatação do arquivo de origem

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

Sidebar

Stats

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

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk 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