Como você monta uma leitura ext3 fs ext3 depois que ela é montada somente leitura a partir de um erro de disco?

18

É um problema relativamente comum quando algo dá errado em uma SAN do ext3 para detectar erros de gravação no disco e remontar o sistema de arquivos somente leitura. Tudo bem, apenas quando a SAN é corrigida, não consigo descobrir como remontar a leitura / gravação do sistema de arquivos sem reiniciar.

Ver:

[root@localhost ~]# multipath -ll
mpath0 (36001f93000a310000299000200000000) dm-2 XIOTECH,ISE1400
[size=1.1T][features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=2][active]
\_ 1:0:0:1 sdb 8:16  [active][ready]
\_ 2:0:0:1 sdc 8:32  [active][ready]
[root@localhost ~]# mount /dev/mapper/mpath0 /mnt/foo
[root@localhost ~]# touch /mnt/foo/blah

Tudo bem, agora eu arranco o LUN por baixo dele.

[root@localhost ~]# touch /mnt/foo/blah
[root@localhost ~]# touch /mnt/foo/blah
touch: cannot touch `/mnt/foo/blah': Read-only file system
[root@localhost ~]# tail /var/log/messages
Mar 18 13:17:33 localhost multipathd: sdb: tur checker reports path is down
Mar 18 13:17:34 localhost multipathd: sdc: tur checker reports path is down
Mar 18 13:17:35 localhost kernel: Aborting journal on device dm-2.
Mar 18 13:17:35 localhost kernel: Buffer I/O error on device dm-2, logical block 1545
Mar 18 13:17:35 localhost kernel: lost page write due to I/O error on dm-2
Mar 18 13:17:36 localhost kernel: ext3_abort called.
Mar 18 13:17:36 localhost kernel: EXT3-fs error (device dm-2): ext3_journal_start_sb:   Detected aborted journal                      
Mar 18 13:17:36 localhost kernel: Remounting filesystem read-only

Ele só pensa que é somente leitura, na realidade nem está lá.

[root@localhost ~]# multipath -ll
sdb: checker msg is "tur checker reports path is down"
sdc: checker msg is "tur checker reports path is down"
mpath0 (36001f93000a310000299000200000000) dm-2 XIOTECH,ISE1400
[size=1.1T][features=0][hwhandler=0][rw]
\_ round-robin 0 [prio=0][enabled]
 \_ 1:0:0:1 sdb 8:16  [failed][faulty]
 \_ 2:0:0:1 sdc 8:32  [failed][faulty]
[root@localhost ~]# ll /mnt/foo/
ls: reading directory /mnt/foo/: Input/output error
total 20
-rw-r--r-- 1 root root     0 Mar 18 13:11 bar

Como ele ainda lembra que o arquivo 'bar' está lá ... mistério, mas não é importante no momento. Agora, apresento novamente o LUN:

[root@localhost ~]# tail /var/log/messages
Mar 18 13:23:58 localhost multipathd: sdb: tur checker reports path is up
Mar 18 13:23:58 localhost multipathd: 8:16: reinstated
Mar 18 13:23:58 localhost multipathd: mpath0: queue_if_no_path enabled
Mar 18 13:23:58 localhost multipathd: mpath0: Recovered to normal mode
Mar 18 13:23:58 localhost multipathd: mpath0: remaining active paths: 1
Mar 18 13:23:58 localhost multipathd: dm-2: add map (uevent)
Mar 18 13:23:58 localhost multipathd: dm-2: devmap already registered
Mar 18 13:23:59 localhost multipathd: sdc: tur checker reports path is up
Mar 18 13:23:59 localhost multipathd: 8:32: reinstated
Mar 18 13:23:59 localhost multipathd: mpath0: remaining active paths: 2
Mar 18 13:23:59 localhost multipathd: dm-2: add map (uevent)
Mar 18 13:23:59 localhost multipathd: dm-2: devmap already registered
[root@localhost ~]# multipath -ll
mpath0 (36001f93000a310000299000200000000) dm-2 XIOTECH,ISE1400
[size=1.1T][features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=2][enabled]
 \_ 1:0:0:1 sdb 8:16  [active][ready]
 \_ 2:0:0:1 sdc 8:32  [active][ready]

Ótimo, certo? Diz [rw] bem ali. Não tão rápido:

[root@localhost ~]# touch /mnt/foo/blah
touch: cannot touch `/mnt/foo/blah': Read-only file system

OK, não faz isso automaticamente, vou dar um empurrãozinho:

[root@localhost ~]# mount -o remount /mnt/foo
mount: block device /dev/mapper/mpath0 is write-protected, mounting read-only

Diabos você é:

[root@localhost ~]# mount -o remount,rw /mnt/foo
mount: block device /dev/mapper/mpath0 is write-protected, mounting read-only

Noooooooooo.

Eu tentei todos os tipos de comandos mount / tune2fs / dmsetup diferentes e não consigo descobrir como fazê-lo desmarcar o dispositivo de bloco como protegido contra gravação. A reinicialização corrigirá, mas eu prefiro fazê-lo on-line. Uma hora de pesquisar no google também não me levou a lugar algum. Salve-me ServerFault.

cagenut
fonte
3
hmm, algumas perguntas 'É um problema relativamente comum quando algo dá errado em uma SAN' por que sua SAN é tão confiável? Eu verificaria isso primeiro? Você já tentou desmontar com umount e montá-lo novamente? Existe uma boa razão para você precisar fazer uma remontagem? Normalmente, só preciso remontar meus sistemas de arquivos raiz após a manutenção.
The Unix Janitor
o umount salta nos manipuladores de arquivos abertos, que geralmente são de processos que você preferiria sair com segurança.
cagenut
Eu tenho um problema semelhante no qual, após um problema de SAN, os discos das VMs são somente leitura e a tentativa de remontar causa o mesmo erro no OP. As VMs estão no esxi 4.1 com armazenamento de canal de fibra. A reinicialização da VM corrige o problema. Pessoalmente, não acho que isso tenha algo a ver com o multipath. Certamente deve haver uma maneira de corrigir sem reiniciar, principalmente porque alguns serviços (apache) tendem a continuar executando em um FS somente leitura.
Will
Eu vim aqui procurando uma solução para o meu próprio problema (que é diferente, um disco corrompido). Eu sorri em vez disso. +1 para "O inferno que você é"
user1207217 23/03
Estou com o mesmo problema, mas estou usando o LVM. O mesmo lvdisplay me daria uma "falha na leitura após 0 de 4096 em 449197309952: Erro de entrada / saída" até que eu fiz um "caminho múltiplo -r", então o LVM começou a exibir tudo certo, sem erros. Ainda não consigo remontar a partição. Também não é possível desmontar, diz que o dispositivo está ocupado. Se eu encerrar todos os processos usando o dispositivo, posso desmontar e remontar com sucesso, mas eu prefiro apenas ser capaz de remontar o dispositivo de leitura e escrita, como eu deveria ser capaz de ...
mpontes

Respostas:

6

Recentemente, deparei com esse problema e o resolvi reiniciando, mas após uma investigação mais detalhada, parece que emitir o seguinte comando pode corrigi-lo.

echo running > /sys/block/device-name/device/state

Eu acho que você pode dar uma olhada na seção 25.14.4: Alterando o estado de leitura / gravação de uma unidade lógica online neste documento , no entanto, eu recomendo a reinicialização.

specialKevin
fonte
Obrigado Kevin. (Un) felizmente, o problema se foi há muito tempo, então não posso testar, mas essa parece ser a opção mais promissora.
cagenut
3
Em um problema semelhante, experimentei / sys / block / nome do dispositivo / dispositivo / estado já estava definido como 'em execução' e o comando acima não resolveu o problema.
Will
3

Tente usar:

mount -o remount,rw /mnt/fo
Desperatuss0ccus
fonte
Eu conheço o FreeBSD, não o Linux. Mas para o fBSD é mount -rw /mnt/foo, então este parece ser o mais adequado para mim.
Chris S
1
Eu nunca tive esse trabalho no cenário descrito na pergunta. Depois que o disco é marcado como somente leitura devido a erros, sempre é necessário reiniciar o computador.
Alex
1
Vou editar isso no OP, mas Alex está bem aqui, o problema parece estar abaixo do sistema de arquivos: [root @ localhost ~] # mount -o remount, rw / mnt / foo mount: block device / dev / mapper / mpath0 é protegido contra gravação, montagem de somente leitura
cagenut
1
Você já tentou desmontar a partição e remontá-la? Eu já tive erros de dados antes, com uma unidade, a desmontagem (ou remontagem, rw) corrigiu isso para mim. Isso ocorreu com as unidades SATA (e EIDE / SCSI) mais antigas. No entanto, na sua situação, pergunto-me se o problema é que o canal da unidade precisa ser redefinido. Gostaria de saber se HDIO_DRIVE_RESET enviado através do ioctl de alguma forma. O blockdev pode ser usado para forçar a releitura da tabela de partições que pode fazê-lo. O IDE expõe isso com hdparm -w, talvez com suas unidades FC, você tem uma maneira de enviar o ioctl para o canal.
2

Sou fã de evitar o problema em primeiro lugar. A maioria das caixas UNIX corporativas tentará novamente as operações do sistema de arquivos para sempre. Você, como administrador, precisa fazer alguns trabalhos de casa antes de ajustar sua configuração do MPIO. Se o seu aplicativo esperar até o dispositivo retornar a um estado utilizável, aqui está uma solução. No seu arquivo /etc/multipath.conf, verifique se o tipo de dispositivo que você gosta tem uma configuração para "no_path_retry" definida como "fila". Definir isso fará com que as E / Ss com falha fiquem na fila até que haja um caminho válido. Fizemos isso para que nossas caixas EMC Symmtrix / DMX funcionassem sobre soluços sob certas condições de falhas / recuperação do caminho da unidade / controlador / srdf.

Essa abordagem salvou nosso bacon inúmeras vezes e é nosso padrão para centenas de caixas em uma SAN multicabinete / fornecedor múltiplo com replicação para recuperação de desastres.

Apenas pensei em compartilhar com todos vocês. Cuidar.

TomF
fonte
2

Eu tive um problema que resolvi usando o hdparm com a -ropção em subdrives de dispositivos lógicos de vários caminhos.

-r Obter / definir sinalizador somente leitura para o dispositivo. Quando definido, o Linux não permite operações de gravação no dispositivo.

c4f4t0r
fonte
1

Você acha que está relacionado à seção deste documento intitulada Por que os sistemas de arquivos ext3 na minha SAN (Storage Area Network) repetidamente se tornam somente leitura ?

É um artigo bastante antigo e está falando sobre canal de fibra, mas pode estar relacionado ao seu problema.

O zelador do Unix
fonte
Sim, não é esse bug específico exato, pois estou executando versões muito mais recentes do que aquelas a que se referem, mas todos os tipos de situações semelhantes podem causar isso. O mundo do canal de fibra, hbas / hba-firmware / hba-drivers, firmware do array, firmware do comutador, design de malha, configuração do mapeador de dispositivo / multipathd, lvm e ext3 é simplesmente um monte de partes móveis. Trabalhe em ambientes suficientes e você verá esse cenário causado por uma sacola de problemas semelhantes, mas não idênticos. A questão em questão é: como recuperar / remontar sem reiniciar.
cagenut
0

Corrupção do sistema de arquivos? Experimentar:

dumpe2fs /dev/c/c | grep Filesystem\

Se estiver limpo com erros, será necessário digitalizar e limpar.

codycook
fonte
-4

O Linux simplesmente não lida bem o suficiente com SANs de médio e grande porte. Você DEVE tomar alguns cuidados e ajustar os tempos limite de entrada / saída e o manuseio de tempo limite de vários caminhos, todos eles com os padrões prontos para desktop.

(Lembre-se de "rejeitar E / S para dispositivo inoperante"?)

darkfader
fonte
1
Você realmente precisa fazer backup de instruções como "Linux não lida com SANs" e "padrões prontos para desktop" com referências e fatos concretos.
Chris S
1
Tempo limite de E / S de disco padrão de 30 segundos? O tópico acima? A nota do RedHat (por desatualizada) informando que eles não podem lidar com uma "notificação de alteração de estado" normalmente, da maneira como seria planejada. Que o Redhat, por padrão, colocou as ligações de caminhos múltiplos em um local (/ var / lib) que não seria acessível no tempo de carregamento do driver de caminhos múltiplos? Que você não pode desativar recursivamente a quente um hba de hotplug PCI e temporariamente automagicamente colocar todos os LUNs dependentes offline até que ele seja substituído. Que ele não possui um HW multithreaded e leva "um tempo" para gerar> 1k luns. Udev, sendo um shell script ...
darkfader