Linux, como alterar o estado do disco rígido do ReadOnly após uma falha temporária?

17

Neste momento não há ansver para este problema.

Geralmente, após alguns problemas com leituras ou escritas para bloquear o dispositivo, o kernel decide alternar o sinalizador para TODO O DISPOSITIVO como somente leitura. Após isso, qualquer gravação em qualquer partição / sistema de arquivos localizado neste dispositivo causa alterná-lo como somente leitura junto com o estado do dispositivo, porque quaisquer gravações são impossíveis.

Exemplo do dmesg, esta é uma simulação para o Linux convidado no windows8 usando o VirtualBox quando a desfragmentação leva a imagem do dispositivo para convidados:

[11903.002030] ata3.00: exception Emask 0x0 SAct 0x1 SErr 0x0 action 0x6 frozen
[11903.003179] ata3.00: failed command: READ FPDMA QUEUED
[11903.003364] ata3.00: cmd 60/08:00:a8:77:57/00:00:00:00:00/40 tag 0 ncq 4096 in
[11903.003385]          res 40/00:01:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
[11903.004074] ata3.00: status: { DRDY }
[11903.004248] ata3: hard resetting link
[11903.325703] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[11903.327097] ata3.00: configured for UDMA/133
[11903.328025] ata3.00: device reported invalid CHS sector 0
[11903.329664] ata3: EH complete
[11941.000472] ata3.00: exception Emask 0x0 SAct 0x1 SErr 0x0 action 0x6 frozen
[11941.000769] ata3.00: failed command: READ FPDMA QUEUED
[11941.000952] ata3.00: cmd 60/08:00:c8:77:57/00:00:00:00:00/40 tag 0 ncq 4096 in
[11941.000961]          res 40/00:01:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
[11941.001353] ata3.00: status: { DRDY }
[11941.001504] ata3: hard resetting link
[11941.320297] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[11941.321252] ata3.00: configured for UDMA/133
[11941.321379] ata3.00: device reported invalid CHS sector 0
[11941.321553] ata3: EH complete
[11980.001746] ata3.00: exception Emask 0x0 SAct 0x11fff SErr 0x0 action 0x6 frozen
[11980.002070] ata3.00: failed command: WRITE FPDMA QUEUED
[11980.002255] ata3.00: cmd 61/18:00:28:23:59/00:00:00:00:00/40 tag 0 ncq 12288 out
[11980.002265]          res 40/00:01:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
-------------------
There are many other errors, like "lost write page", "Journal has aborted", "Buffer I/O error", "hard resetting link" and many others.

Depois disso, remonte a causa:

mount / -o remount,rw
mount: cannot remount block device /dev/sda1 read-write, is write-protected

porque TODO dispositivo sda mantendo rootfs sda1 é READONLY.

Na minha experiência, isso ocorre em situações:

  1. HDD está realmente danificado. Os problemas de gravação retornados dependem da condição do disco rígido
  2. A máquina host está sobrecarregada e, em seguida, as gravações do HDD virtual do convidado Linux são atingidas pelo tempo limite
  3. O cabo FC ou o dispositivo SAN (discos da matriz sobre o Fibre Channel) está sobrecarregado
  4. Momentaneamente perdeu a conexão pelo FC ou FCoE. Talvez pacote FC perdido / com tempo limite

Nessas situações, o dispositivo é realmente de leitura e gravação, mas o kernel do linux marca esse dispositivo internamente como somente leitura e é usado como somente leitura. Essa é a funcionalidade do kernel criada para prevenção de danos, mas é utilizável apenas no 1. ponto.

Questão é. Como dizer manualmente ao kernel, o dispositivo de bloco de disco rígido opera normalmente?

Sem isso, o kernel serve ao dispositivo como somente leitura, como 'CD-ROM', e nenhum outro comando tem chance de funcionar corretamente, incluindo mount / remount -o read-write, fsck e outros.

Anversas inutilizáveis, realmente qualificadas como spam de pessoas que desejam ajudar, mas não entendem sobre a natureza do problema:

  1. Tente remontar como leitura e gravação (impossível, o dispositivo é RO)
  2. fsck this (para quê? o dispositivo é RO, nenhum reparo é possível)
  3. 'Eu não sei' (primeiro com sentido, mas inutilizável)
  4. 'Substitua o seu dispositivo' * (geralmente o problema é outra coisa)

Alguém tem alguma fórmula para a pergunta acima? Alternar sinalizador para dispositivo de bloco gravável que o reverte do estado somente leitura para o estado leitura / gravação? Neste momento, parece que ninguém sabe como.

São algumas soluções alternativas, mas geralmente semiusable ou inutilizáveis:

  1. O módulo Remover suporta o acesso ao disco rígido ou ao storage array especificado. Infelizmente, o dispositivo geralmente danificado mantém o rootfs ou o driver mantém o dispositivo danificado e o dispositivo que mantém o rootfs
  2. Remova o acesso do FC ao dispositivo e junte-o novamente (fctools), nem sempre possível, nem sempre funcionando.
  3. Reinicie a máquina inteira. Normalmente, apenas isso é sempre possível e sempre somos forçados a fazê-lo.

Nos pontos 1. e 2., informamos ao kernel que desconectamos completamente o dispositivo e nos conectamos a ele novamente. O kernel reconheceu isso como ingressar no novo dispositivo de operação adequada. Podemos simular isso usando o dispositivo USB e remover momentaneamente a energia. O ponto 3. é a última chance e geralmente funciona. Mas por que devemos reiniciar tudo? Infelizmente, em todos os momentos, perdemos todas as atualizações de periódicos e buffers sujos.

Observe que, nas mesmas situações, não tenho problemas com o Windows (desktop e servidor).

Znik
fonte
Não é uma resposta, mas possivelmente está relacionado no caso de # 2 (alta carga do host, tempo limite do disco rígido do convidado): Aumente o tempo limite do disco rígido do Linux para evitar a corrupção do sistema de arquivos causada por tempos limite do disco rígido no sistema convidado.
precisa saber é o seguinte
@Znik, essas máquinas virtuais convidadas são executadas no Citrix XenServer? Ou hardware físico? Nosso StorageServer faz a ponte entre a terra da Ethernet e a terra dos mini-sas. Quando esta máquina de ponte entra em pânico, precisa ser reiniciada à força. As VMs convidadas do Windows voltam. As máquinas virtuais convidadas do Linux exibem o mesmo problema exato que você possui. Nada sugerido aqui traz os pontos de montagem de volta para rw.
RJT
@rjt, isso ocorre em muitas situações. A situação principal é onde o dispositivo fica extremamente lento com qualquer problema, como danos físicos, sobrecarga de dispositivo, cabeamento, FC externo sobre Eth e eth está sobrecarregado; às vezes, o switch é reiniciado quando o bloco de transferência, o tempo limite, o pacote perdido etc. mas marcado como somente leitura. Reiniciar não é resolução, é uma solução alternativa, como descrevi na descrição principal da pergunta / problema.
Znik

Respostas:

12

tente com blockdev --setrwouhdparm -r 0

Jose Luis Martin
fonte
obrigado, isso deve ser útil. Eu estou esperando por algum tempo limite no controlador fc
Znik
Uma parte importante que precisa ser adicionada: Às vezes, é necessário fazer um fsckno sistema de arquivos somente leitura, antes de poder ser montado novamente.
Evi1M4chine
3
Não trabalha para mim. Eu tenho problema semelhante
jonneymendoza
1
Não funcionou para mim, mesmo com o fsck. Convidados do Citrix XenServer Linux.
RJT
Não está funcionando ! Esses comandos parecem eficazes, mas o dongle ainda é RO. (é um software, mas de onde ???) Se você quiser tentar, use qualquer Debian iso 9.4.
Sandburg
5

Como Jose Luis Martin sugeriu usar o blockdev, meu 2cent é fazer uma remontagem rw e forcefsck

(assumindo que sda ​​é seu disco)

blockdev --setrw /dev/sda
mount /dev/sda -o remount,rw
touch /forcefsck
Roberto
fonte
1
Faz mais sentido apenas executar fsckantes do mount, pois ele falhará ao montar sem fsck. (Pelo menos no meu caso ele fez.)
Evi1M4chine
`# blockdev --setrw / dev / xvda1 # # touch / tmp / date +%Y%m%d-%H%M%Stouch: não pode tocar? / tmp / 20170722-221904 ?: Sistema de arquivos somente leitura # # mount -o remount, rw / dev / xvda1 [137010.709883] EXT4 -fs error (device xvda1): ext4_remount: 4824: Interrompe forçado pela montagem do usuário: não é possível remontar o dispositivo de bloco / dev / xvda1 read-write, está protegido contra gravação `
rjt
2

Verifique esta página wiki, explica o erro gerado pela libata:

https://ata.wiki.kernel.org/index.php/Libata_error_messages

Pelo que vejo acima, você tem um problema de tempo limite e de acordo com o documento mencionado:

O controlador falhou ao responder a um comando ATA ativo. Isso pode ser qualquer número de causas. Na maioria das vezes, isso ocorre devido a um bug do subsistema de interrupção não relacionado (tente inicializar com 'pci = nomsi' ou 'acpi = off' ou 'noapic'), que não conseguiu interromper quando estávamos esperando um do hardware.

Você pode desabilitar o ACPI (verifique como se baseia em sua distribuição) ou verifique se há erros conhecidos no kernel e, possivelmente, atualize-o se não for o mais recente (ou faça o downgrade).

UnX
fonte
Sim, isso é realmente o tempo limite. Geralmente isso ocorre no controlador FC quando o dispositivo do array está sobrecarregado. Você está certo, na ATA locais subsistema este é geralmente qualquer erro hardware ou driver / implementação chipset
Znik
Então é um tempo limite? Bem, o que sudo hdparm -I /dev/sdX | grep lockeddiz? Ele deve dizer: 'não bloqueado'. Ele mostrava esses tempos limite enigmáticos no passado aqui sempre que um HDD era bloqueado pela senha ATA (devido a uma exclusão de segurança anterior e uma falha no sistema posterior, que fazia com que o pw de segurança não fosse limpo novamente). Esse material de senha realmente tem um grande impacto , também nos seus nervos. :) Até as ferramentas padrão fornecidas pelo fornecedor do seu HD drive se comportam loucamente, como se o HDD estivesse prestes a morrer quando a senha estiver ativa. O culpado por incontáveis ​​mechas de cabelo arrancadas ao longo dos anos.
Syntaxerror
1

Reinicie no Windows 10, vá para as opções de energia e desligue o desligamento rápido. então reinicie no linux ..gbamm está tudo bem.

o desligamento rápido no Windows 10 hiberna alguns arquivos e a unidade é parcialmente usada. então o linux vê é tão ocupado.

awas
fonte