Jak ponownie zamontować readwrite ext3 fs po zamontowaniu tylko do odczytu z powodu błędu dysku?

18

Jest to stosunkowo częsty problem, gdy coś idzie nie tak w sieci SAN dla ext3, aby wykryć błędy zapisu na dysku i zamontować system plików tylko do odczytu. To wszystko dobrze i dobrze, tylko gdy SAN jest naprawiony, nie mogę wymyślić, jak ponownie zamontować system plików do odczytu i zapisu bez ponownego uruchamiania.

Ujrzeć:

[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

Wszystko dobrze, teraz wyciągam spod niej jednostkę LUN.

[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

Myśli tylko, że jest tylko do odczytu, w rzeczywistości nawet jej nie ma.

[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

Jak to wciąż pamięta, że ​​plik „paska” jest tam… tajemnica, ale teraz nie jest ważna. Teraz ponownie przedstawiam 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]

Świetnie prawda? Tutaj jest napisane [rw]. Nie tak szybko:

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

OK, nie rób tego automatycznie, po prostu trochę go popchnę:

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

Do diabła jesteś:

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

Nieeeeeeee.

Próbowałem różnego rodzaju poleceń mount / tune2fs / dmsetup i nie mogę wymyślić, jak to zrobić, aby odznaczyć urządzenie blokowe jako chronione przed zapisem. Ponowne uruchomienie naprawi to, ale wolałbym zrobić to online. Godzina googlingu nigdzie mnie też nie doprowadziła. Save me ServerFault.

kagenut
źródło
3
hmm, kilka pytań „To stosunkowo częsty problem, gdy coś się nie powiedzie w sieci SAN”. Dlaczego twoja sieć SAN jest tak niewiarygodna, że ​​najpierw to sprawdzę? Czy próbowałeś po prostu odmontować za pomocą umount, a następnie zamontować go ponownie? Czy jest dobry powód, dla którego musisz dokonać ponownego montażu ?. Zwykle po konserwacji muszę tylko ponownie zamontować główne systemy plików.
The Unix Janitor
umount odbija się od otwartych uchwytów plików, które często pochodzą z procesów, które raczej wolałbyś wyjść zdrowo.
cagenut
Mam podobny problem, w którym po problemie z siecią SAN dyski maszyn wirtualnych są tylko do odczytu, a próba ponownego zamontowania powoduje ten sam błąd w PO. Maszyny wirtualne są na esxi 4.1 z pamięcią Fibre Channel. Ponowne uruchomienie VM rozwiązuje problem. Nie sądzę, żeby to miało coś wspólnego z wieloma ścieżkami. Z pewnością musi istnieć sposób na naprawienie bez ponownego uruchamiania, zwłaszcza że niektóre usługi (apache) mają tendencję do działania na FS tylko do odczytu.
Czy
Przybyłem tutaj, szukając rozwiązania mojego problemu (który jest inny, uszkodzony dysk). Zamiast tego uśmiechnąłem się. +1 za „The hell you are”
user1207217
Mam dokładnie ten sam problem, ale używam LVM. Ten sam lvdisplay dałby mi „odczyt nieudany po 0 z 4096 w 449197309952: Błąd wejścia / wyjścia”, dopóki nie zrobiłem „wielościeżkowego -r”, a następnie LVM zaczął wyświetlać wszystko poprawnie bez błędów. Jednak nadal nie mogę zmontować partycji. Nie można też odmontować, mówi, że urządzenie jest zajęte. Jeśli zamknę wszystkie procesy za pomocą urządzenia, mogę odmontować, a następnie ponownie zamontować z powodzeniem, ale wolałbym po prostu móc ponownie podłączyć urządzenie do odczytu i zapisu, ponieważ powinienem być w stanie ...
mpontes

Odpowiedzi:

6

Niedawno natknąłem się na ten problem i rozwiązałem go poprzez ponowne uruchomienie, ale po dalszych badaniach wydaje się, że wydanie następującego polecenia może go naprawić.

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

Myślę, że możesz zajrzeć do rozdziału 25.14.4: Zmiana stanu odczytu / zapisu jednostki logicznej online w tym dokumencie , jednak zalecam ponowne uruchomienie.

specialKevin
źródło
Dzięki, Kevin. (Nie) na szczęście problem już dawno minął, więc nie mogę go przetestować, ale wygląda to na najbardziej obiecującą opcję.
cagenut
3
W podobnym problemie wystąpiłem, że / sys / block / device-name / device / state było już ustawione na „uruchomione” i powyższe polecenie nie rozwiązało problemu.
Czy
3

Spróbuj użyć:

mount -o remount,rw /mnt/fo
Desperatuss0ccus
źródło
Znam FreeBSD, nie Linux. Ale w przypadku fBSD jest mount -rw /mnt/footo najbardziej odpowiednie dla mnie.
Chris S
1
Nigdy nie miałem tej pracy w scenariuszu przedstawionym w pytaniu. Gdy dysk jest oznaczony jako „tylko do odczytu” z powodu błędów, zawsze przeprowadzał się dla mnie restart.
Alex
1
Zedytuję to w OP, ale Alex jest tutaj, problem wydaje się być poniżej systemu plików: [root @ localhost ~] # mount -o remount, rw / mnt / foo mount: block device / dev / mapper / mpath0 jest chroniony przed zapisem, jest montowany tylko do odczytu
cagenut
1
Czy próbowałeś odmontować partycję i zamontować ją ponownie? Miałem wcześniej błędy danych na dysku, odmontowanie (lub ponowne zamontowanie, rw) naprawiło to dla mnie. Tak było w przypadku napędów SATA (i starszych EIDE / SCSI) Jednak w twojej sytuacji zastanawiam się, czy problem polega na tym, że kanał napędu musi zostać zresetowany. Zastanawiam się, czy HDIO_DRIVE_RESET jakoś wysłał przez ioctl. Blockdev może być użyty do wymuszenia ponownego odczytania tablicy partycji, która może to zrobić. IDE ujawnia to za pomocą hdparm -w, być może z napędami FC masz sposób na przesłanie ioctl na kanał.
2

Jestem fanem zapobiegania temu problemowi. Większość pudełkowych systemów UNIX ponownie spróbuje wykonać operacje na systemie plików tak jak zawsze. Jako administrator musisz odrobić pracę domową przed dostrojeniem konfiguracji MPIO. Jeśli aplikacja powinna poczekać, aż urządzenie powróci do stanu używalności, oto rozwiązanie. W pliku /etc/multipath.conf upewnij się, że typ urządzenia, na którym Ci zależy, ma ustawienie „no_path_retry” ustawione na „kolejka”. Ustawienie tego spowoduje, że nieudane operacje we / wy ustawią się w kolejce do momentu uzyskania prawidłowej ścieżki. Zrobiliśmy to, aby nasze skrzynki EMC Symmtrix / DMX działały na czkawkę w określonych warunkach awarie / odzyskiwanie dysku / kontrolera / srdf.

Takie podejście pozwoliło nam zaoszczędzić wiele lat i jest naszym standardem dla setek urządzeń w sieci SAN z wieloma kabinami / wieloma dostawcami z replikacją do odzyskiwania po awarii.

Pomyślałem, że mogę się z wami wszystkimi podzielić. Dbać.

TomF
źródło
2

Miałem jakiś problem, który rozwiązałem za pomocą hdparm z -ropcją na subdrivach logicznych urządzeń wielościeżkowych.

-r Pobierz / ustaw flagę „tylko do odczytu” dla urządzenia. Po ustawieniu Linux nie zezwala na operacje zapisu na urządzeniu.

c4f4t0r
źródło
1

Czy uważasz, że jest to związane z sekcją tego dokumentu zatytułowaną Dlaczego systemy plików ext3 w mojej sieci pamięci masowej (SAN) wielokrotnie stają się tylko do odczytu ?

To dość stary artykuł, który mówi o kanale światłowodowym, ale może być związany z twoim problemem.

The Unix Janitor
źródło
Tak, to nie jest dokładnie ten konkretny błąd, ponieważ korzystam z dużo nowszych wersji niż te, do których się odnoszą, ale mogą go powodować różnego rodzaju podobne sytuacje. Świat Fibre Channel, hbas / hba-firmware / hba-drivers, oprogramowania układowego macierzy, oprogramowania układowego przełącznika, projektowania tkanin, konfiguracji mapowania urządzeń / konfiguracji wielościeżkowej, lvm i ext3 to po prostu dużo ruchomych części. Pracuj w wystarczającej liczbie środowisk, a zobaczysz ten scenariusz spowodowany przez torbę podobnych, ale nie identycznych problemów. Nasuwa się pytanie, jak odzyskać / ponownie zamontować urządzenie bez ponownego uruchamiania.
cagenut
0

Uszkodzenie systemu plików? Próbować:

dumpe2fs /dev/c/c | grep Filesystem\

Jeśli wyczyścisz z błędami, musisz zeskanować i wyczyścić.

codycook
źródło
-4

Linux po prostu nie radzi sobie wystarczająco dobrze z sieciami SAN średniej wielkości. MUSISZ poświęcić trochę uwagi i dostroić limity czasu we / wy i obsługę limitów czasu dla wielu ścieżek, wszystkie są w przybliżeniu ustawione domyślnie na komputer.

(Pamiętasz „odrzucanie IO do martwego urządzenia”?)

darkfader
źródło
1
Naprawdę musisz wykonać kopię zapasową takich stwierdzeń, jak „Linux nie radzi sobie z SAN” i „Domyślne ustawienia pulpitu” z referencjami i twardymi faktami.
Chris S
1
Domyślny limit czasu We / Wy dysku 30 sekund? Powyższy wątek? Uwaga od RedHata (może nieaktualna), że nie mogą z wdziękiem obsłużyć „powiadomienia o zmianie stanu”, tak jak byłoby to zamierzone. Czy Redhat domyślnie umieszcza powiązania wielościeżkowe w lokalizacji (/ var / lib), która nie byłaby dostępna w czasie ładowania sterownika wielościeżkowego? Że nie można rekurencyjnie wyłączać hot-plug PCI hba i tymczasowo automatycznie przełączać wszystkie zależne jednostki LUN w tryb offline, dopóki nie zostaną wymienione. Że nie ma wielowątkowego init HW i zajmuje trochę czasu, aby wymyślić> 1k lunów. Udev, będąc skryptem powłoki ...
darkfader