Як ви знову змонтуєте 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.