Як ви знову змонтуєте readwrite ext3 fs після того, як він буде змонтований тільки з дискової помилки?


18

Це відносно поширена проблема, коли щось не в порядку в SAN для ext3 виявляє помилки запису на диску та перезазначає файлову систему лише для читання. Це все добре і добре, лише коли фіксується SAN, я не можу зрозуміти, як заново встановити файлову систему для читання-запису без перезавантаження.

Ось:

[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

Все добре, зараз я виймаю 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

Він думає лише, що його читають, насправді його навіть немає.

[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

Як він досі пам’ятає той «барний» файл, який там ... таємниця, але зараз не важливо. Тепер я знову представляю 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]

Чудово правильно? Тут написано [rw]. Не так швидко:

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

Гаразд, це не робиться автоматично, я просто підкажу:

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

Чорт ти ти:

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

Noooooooooo.

Я спробував всілякі різні команди mount / tune2fs / dmsetup, і я не можу зрозуміти, як змусити його скасувати позначення блокового пристрою як захищеного від запису. Перезавантаження виправить це, але я набагато краще робити це в режимі он-лайн. Година гуґлінгу також не дістала мене нікуди. Збережіть мене ServerFault.


3
хм, пара питань "Це відносно поширена проблема, коли щось не вдається в SAN", чому ваш SAN такий ненадійний, я би це перевірив спочатку? Ви спробували просто відключити його за допомогою umount, а потім знову встановити його? Чи є вагома причина, чому потрібно робити перерахунок ?. Зазвичай мені потрібно лише перезавантажити свої кореневі файлові системи після обслуговування.
Двірник Unix

umount відскакує на ручках відкритого файлу, які часто є процесами, з яких ви швидше отримаєте гарний вихід.
cagenut

У мене є аналогічна проблема, коли після випуску SAN диски VM читаються тільки для читання, а спроба перезарядки викликає ту саму помилку в ОП. Відеомагнітофони працюють на esxi 4.1 із зберіганням волоконних каналів. Перезавантаження VM виправляє проблему. Я особисто не думаю, що це багато чого стосується багатошляху. Безумовно, повинен бути спосіб виправити без перезавантаження, тим більше, що деякі сервіси (apache) прагнуть продовжувати працювати лише на FS, який читається.
Буде

Я прийшов сюди шукати рішення власної проблеми (яка інша, пошкоджений диск). Я натомість посміхнувся. +1 для "Чорт ти є"
user1207217

У мене точно така ж проблема, як ця, але я використовую LVM. Той самий lvdisplay дав би мені "невдале читання після 0 з 4096 за номером 449197309952: Помилка введення / виводу", поки я не зробив "multipath -r", тоді LVM почав показувати все правильно без помилок. Я все ще не можу змусити перепланувати розділ. Неможливо також відключити, каже, що пристрій зайнятий. Якщо я вимкнув усі процеси за допомогою пристрою, я можу відключити та повторно
здійснити повторний ремонт

Відповіді:


6

Я нещодавно зіткнувся з цією проблемою і вирішив її шляхом перезавантаження, але після подальшого дослідження виявляється, що видача наступної команди може її виправити.

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

Думаю, ви можете подивитися на розділ 25.14.4: Зміна стану читання / запису Інтернет-логічної одиниці в цьому документі , проте я рекомендую перезавантажити.


Дякую Кевін (Un) на щастя, проблема давно пішла, тому я не можу перевірити, але це виглядає як найбільш перспективний варіант.
cagenut

3
У аналогічній проблемі я зазнав, що / sys / blok / ім'я пристрою / пристрій / стан вже було встановлено на "працює", і вищевказана команда не вирішила проблему.
Буде

3

Спробуйте скористатися:

mount -o remount,rw /mnt/fo

Я знаю FreeBSD, а не Linux. Але для fBSD це mount -rw /mnt/fooтак, тож ця мені здається найбільш правою.
Chris S

1
У мене ніколи не було цієї роботи за сценарієм, окресленим у питанні. Після того, як диск позначений лише для читання через помилки, він завжди приймав перезавантаження для мене.
Алекс

1
Я відредагую це в ОП, але Алекс тут прямо, проблема виявляється нижче файлової системи: [root @ localhost ~] # mount -o remount, rw / mnt / foo mount: block device / dev / mapper / mpath0 захищений від запису, монтуючи лише для читання
cagenut

1
Чи намагалися ви відімкнути розділ та перекомпонувати його? У мене раніше були помилки з даними при роботі з накопичувачем, вимкнення (або повторна передача, rw) виправило це для мене. Це було з накопичувачами SATA (і старшими EIDE / SCSI) Однак у вашій ситуації мені цікаво, чи проблема полягає в тому, що канал диска потрібно скинути. Мені цікаво, чи HDIO_DRIVE_RESET якось надсилається через ioctl. blockdev можна використовувати для перечитування таблиці розділів, яка може це зробити. IDE викриває це за допомогою hdparm -w, можливо, з вашими накопичувачами FC, у вас є спосіб надіслати ioctl на канал.

2

Я прихильник запобігання проблемі в першу чергу. Більшість корпоративних ящиків UNIX повторять операції з файловою системою як завжди. Вам, як адміністратору, потрібно виконати домашнє завдання перед налаштуванням конфігурації MPIO. Якщо ваша програма повинна зачекати, поки пристрій повернеться у стан, який можна використовувати, тоді ось рішення. У вашому /etc/multipath.conf переконайтесь, що тип пристрою, який ви переймаєтесь, має для параметра "no_path_retry" значення "черга". Якщо встановити це, не вдасться черга вводу / виводу, поки не з’явиться дійсний шлях. Ми зробили це для наших EMC Symmtrix / DMX короб, щоб працювати над гикавкою за певних умов збої / відновлення шляху / контролера / srdf-шляху.

Такий підхід безліч разів економив наш бекон і є нашим стандартом для сотень коробок у багатокабінетному / багатомобільному SAN з реплікацією для відновлення після аварій.

Просто думав, що я можу поділитися з усіма вами. Піклуватися.


2

У мене виникла певна проблема, яку я вирішив за допомогою hdparm з -rопцією на піддискові логічні пристрої з декількома трафаретами.

-r Отримайте / встановіть прапор лише для читання для пристрою. Після встановлення Linux забороняє операції запису на пристрої.


1

Як ви вважаєте, це пов'язано з розділом у цьому документі під назвою Чому файлові системи ext3 в моїй мережі зберігання даних (SAN) неодноразово стають лише для читання ?

Це досить стара стаття і говорить про волоконний канал, але це може бути пов'язано з вашою проблемою.


Так, це не така конкретна помилка, оскільки я використовую набагато новіші версії, ніж ті, на які вони посилаються, але всілякі подібні ситуації можуть викликати це. Світ волоконно-канальних, hbas / hba-прошивок / hba-драйверів, мікропрограмного забезпечення масиву, вбудованого програмного забезпечення, дизайну тканин, пристрою-картографа / багатоповерхового конфігурації, lvm та ext3 - це просто багато рухомих деталей. Працюйте в достатній кількості середовища, і ви побачите, що цей сценарій спричинений сумкою схожих, але не однакових проблем. Питання в тому, як відновити / перезавантажити без перезавантаження.
cagenut

0

Пошкодження файлової системи? Спробуйте:

dumpe2fs /dev/c/c | grep Filesystem\

Якщо чистити з помилками, то вам потрібно сканувати та очистити.


-4

Linux просто недостатньо справляється із середньомасштабними SAN. Ви ОБОВ'ЯЗКОВО наділите це уважністю та тонкою настройкою тайм-аутів вводу-виводу та обробкою тайм-аута в декілька маршрутів, всі вони знаходяться у налаштуваннях, готових до настільних ПК.

(Пам'ятаєте "відхилення IO на мертвий пристрій"?)


1
Вам дійсно потрібно створити резервні копії тверджень, таких як "Linux не справляється з SAN" та "Налаштування, готові до настільних ПК", з посиланнями та суворими фактами.
Кріс С

1
Тайм-аут дискового вводу за замовчуванням 30 секунд? Вищенаведена нитка? Примітка RedHat (як би застаріла) вказує, що вони не можуть витончено обробляти "Повідомлення про зміну штату", як це було б призначено. Що Redhat за замовчуванням розмістив багатоповерхові прив'язки до місця (/ var / lib), яке не було б доступним під час завантаження драйвера багатошлях? Що ви не можете рекурсивно відключити гарячу плату hba PCI і тимчасово автоматично автоматично приймати всі залежні LUN в автономному режимі, поки вона не буде замінена. Що він не має багатопотокового HW init і потребує "певного часу", щоб придумати> 1к лун. Удев, будучи сценарієм оболонки ...
darkfader
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.