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 / 496777
Accepted
Tom Hale
Tom Hale
Asked: 2019-01-26 15:16:14 +0800 CST2019-01-26 15:16:14 +0800 CST 2019-01-26 15:16:14 +0800 CST

btrfs replace em RAID1 é super lento com disco com falha presente

  • 772

Estou tentando substituir um disco com falha em um sistema de arquivos RAID1 btrfs.

Ainda posso montar a partição rw(após cerca de 5 minutos de atraso e muitos erros de kernel de E/S).

Comecei replacecom -ruma tentativa de que o disco com falha não afetasse a velocidade da operação:

      -r
           only read from <srcdev> if no other zero-defect mirror exists.
           (enable this if your drive has lots of read errors, the access
           would be very slow)

Ainda assim, estou tendo um desempenho muito ruim. A partição é de 3,6 TiB e em 9,25 horas eu obtive:

3.8% done, 0 write errs, 0 uncorr. read errs

Nesse ritmo, levará mais de 10 dias para ser concluído!

Devido a circunstâncias além do meu controle, isso é muito tempo para esperar.

Estou vendo erros de kernel em relação ao disco com falha com bastante frequência, com média a cada 5 minutos ou mais:

Jan 26 09:31:53 tara kernel: print_req_error: I/O error, dev sdc, sector 68044920
Jan 26 09:31:53 tara kernel: BTRFS warning (device dm-3): lost page write due to IO error on /dev/mapper/vg4TBd2-ark
Jan 26 09:31:53 tara kernel: BTRFS error (device dm-3): bdev /dev/mapper/vg4TBd2-ark errs: wr 8396, rd 3024, flush 58, corrupt 0, gen 3
Jan 26 09:31:53 tara kernel: BTRFS error (device dm-3): error writing primary super block to device 2
Jan 26 09:32:32 tara kernel: sd 2:0:0:0: [sdc] tag#0 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
Jan 26 09:32:32 tara kernel: sd 2:0:0:0: [sdc] tag#0 Sense Key : Medium Error [current]
Jan 26 09:32:32 tara kernel: sd 2:0:0:0: [sdc] tag#0 Add. Sense: Unrecovered read error
Jan 26 09:32:32 tara kernel: sd 2:0:0:0: [sdc] tag#0 CDB: Read(10) 28 00 02 eb 9e 23 00 00 04 00
Jan 26 09:32:32 tara kernel: print_req_error: critical medium error, dev sdc, sector 391967000

Eu estou supondo que os erros são devidos ao btrfs tentando gravar dados contábeis no disco (mesmo que esteja completamente ocioso).

Mesmo montado ro, o btrfs pode tentar gravar em um disco. Opção de montagem -onologreplay:

        Warning
           currently, the tree log is replayed even with a read-only
           mount! To disable that behaviour, mount also with nologreplay.

Como posso acelerar o processo?

Este artigo diz que a replacecontinuará após a reinicialização.

Estou pensando:

  1. Cancelar a correntereplace
  2. Remova o disco com falha
  3. mount -o degraded,rw
    • Espero que não haja falta de energia, dada a pegadinha dessa opção de montagem única )

Neste momento, proponho-me a:

  1. Permitir replacecontinuar sem o disco com falha presente (um recente scrubmostrou que o disco bom tem todos os dados)
  2. Converta os dados para singlepermitir a montagem novamente rwem caso de falta de energia durante o processo

Este é um bom plano para ter o replacecompleto mais cedo?

Meus cálculos dizem que 6,5 horas (não 10 dias) seriam viáveis ​​dadas as velocidades de E/S do disco.

linux btrfs
  • 3 3 respostas
  • 1130 Views

3 respostas

  • Voted
  1. Best Answer
    Rucent88
    2022-09-22T07:04:34+08:002022-09-22T07:04:34+08:00

    Se você tiver dados importantes em uma unidade com falha, o programa desejado é o ddrescue.

    Primeiro, copie qualquer coisa vital

    Se houver algum dado no sistema de arquivos que você não possa prescindir por um tempo prolongado, faça isso primeiro.

    1. Desconecte a unidade com falha.

    2. Monte o sistema de arquivos como somente leitura e degradado.

      sudo mount -o degraded,ro /dev/sdX /mount/dir
      
    3. Copie os dados necessários para outro local.

    Então ddrescue drive

    Agora, para obter o restante dos dados, criamos uma imagem da unidade com ddrescue.

    1. Desmonte o sistema de arquivos Btrfs. Não o monte. Não o monte como somente leitura.

    2. Tenha uma nova unidade formatada como Ext4 ou Btrfs com Copy On Write desabilitado.

    3. Execute ddrescue para criar a imagem da unidade em extinção para a nova unidade

      sudo ddrescue /dev/sdX /path/to/save.img /path/to/save.map
      
    4. O Ddrescue pode levar horas ou até dias para ser concluído, dependendo do tamanho e da velocidade da unidade. Além disso, pode nunca ser concluído se a unidade estiver falhando demais. O tempo que você permite que ele resgate é com você.

    5. Quando o ddrescue terminar o processamento, remova/desconecte a unidade com falha e não a reconecte novamente.

    6. Monte a imagem da unidade em um dispositivo de loop.

      sudo losetup -Pf --show /path/to/save.img
      
    7. Agora você deve ser capaz de montar seu sistema de arquivos raid Btrfs com o comando normal de montagem e não no modo degradado. Ele usará automaticamente o dispositivo de imagem de loop no lugar da unidade ausente.

    8. Depois de montar a unidade Btrfs, execute imediatamente uma limpeza nela para reparar quaisquer dados que o ddrescue não conseguiu recuperar.

    A partir daí você tem 2 opções. Você pode continuar executando o sistema de arquivos Btrfs com o dispositivo de loop ou pode substituir o dispositivo de loop por outra unidade.

    • 1
  2. Tom Hale
    2019-01-26T23:58:02+08:002019-01-26T23:58:02+08:00

    Esta resposta menciona gravações no disco com falha, fazendo com que o disco replacepare.

    Ele sugere dmsetupconfigurar um dispositivo COW em cima do disco com falha, de modo que todas as gravações sejam bem-sucedidas.

    Cuidado : Neste caso, o sistema de arquivos foi colocado dentro de um dmcryptdispositivo. Veja meu comentário sobre a "pegadinha" e a possível perda de dados, se esse não for o caso.

    • 0
  3. Tom Hale
    2019-01-27T02:51:03+08:002019-01-27T02:51:03+08:00

    Dado que o replaceestava rastejando, fiz o seguinte:

    1. Garantiu que o sistema de arquivos degradado estava noautoem/etc/fstab
    2. Reinicializei a máquina (o que levou cerca de 20 minutos devido a travamentos de E/S)
    3. Desabilitou o LVM VG contendo o btrfs fs na unidade com falha:

      sudo vgchange -an <failed-vg>
      
    4. Desabilitou o dispositivo com falha:

      echo 1 | sudo tee /sys/block/sdb/device/delete
      
    5. Montado o sistema de arquivos -o ro,degraded( degradedsó pode ser usado uma vez )

    6. Verifiquei replace statuse vi que estava suspenso:

      Started on 26.Jan 00:36:12, suspended on 26.Jan 10:13:30 at 4.1%, 0 write errs, 0 
      
    7. Montei -o remount,rwe vi o replacecontinue:

      kernel: BTRFS info (device dm-5): continuing dev_replace from <missing disk> (devid 2) to target /dev/mapper/vg6TBd1-ark @4%
      

    Enquanto estou escrevendo isso:

    • replace statusmostra um progresso saudável de 0,1% a cada 30 segundos ou mais
    • iostat -d 1 -m <target-dev>mostra cerca de 145 MB/s (a Seagate anuncia 160 MB/s)

    Atualizar:

    Após a conclusão, notei que btrfs device usage /mountpointestava mostrando alguns Data,DUPe Metadata,single, ao invés de apenas RAID1, então rebalancei:

    btrfs balance start -dconvert=raid1,soft -mconvert=raid1,soft /mountpoint
    

    Além disso, considere resizese ambos os dispositivos agora contêm folga:

    btrfs filesystem resize max /mountpoint
    

    Eu também recomendaria que você scrub, pois eu tinha 262016 csumerros corrigíveis aparentemente relacionados aoreplace arquivo .

    • 0

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