Làm thế nào để bạn gắn lại một ext3 fs readwrite sau khi nó được gắn chỉ đọc từ một lỗi đĩa?


18

Đây là một vấn đề tương đối phổ biến khi xảy ra sự cố trong SAN cho ext3 để phát hiện lỗi ghi đĩa và hiển thị lại hệ thống tệp chỉ đọc. Đó là tất cả tốt và tốt, chỉ khi SAN được sửa chữa, tôi không thể tìm ra cách gắn lại hệ thống tập tin đọc-ghi mà không cần khởi động lại.

Hãy chứng kiến:

[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

Tất cả đều tốt, bây giờ tôi đã kéo LUN ra khỏi nó.

[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

Nó chỉ nghĩ rằng nó chỉ đọc, trong thực tế, nó thậm chí không có ở đó.

[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

Làm thế nào nó vẫn còn nhớ rằng tập tin 'thanh' đang ở đó ... bí ẩn, nhưng không quan trọng ngay bây giờ. Bây giờ tôi trình bày lại 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]

Tuyệt vời phải không? Nó nói [rw] ngay tại đó. Không quá nhanh:

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

OK, không tự động làm điều đó, tôi sẽ đẩy nhẹ:

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

Địa ngục bạn là:

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

Không.

Tôi đã thử tất cả các loại lệnh mount / Tune2fs / dmsetup khác nhau và tôi không thể tìm ra cách làm cho nó bỏ cờ thiết bị khối như được bảo vệ chống ghi. Khởi động lại sẽ khắc phục nó, nhưng tôi muốn thực hiện trực tuyến hơn. Một giờ googling đã đưa tôi đến nơi nào. Cứu tôi với ServerFault.


3
hmm, một vài câu hỏi 'Đây là một vấn đề tương đối phổ biến khi có sự cố xảy ra trong SAN' tại sao SAN của bạn không đáng tin cậy như vậy, tôi sẽ kiểm tra trước? Bạn đã thử chỉ cần ngắt kết nối với umount, và sau đó gắn lại? Có một lý do tốt tại sao bạn cần phải làm lại?. Tôi thường chỉ cần kết nối lại hệ thống tập tin gốc của mình sau khi bảo trì.
Unix Janitor

umount bị trả về xử lý tập tin mở, thường là từ các quá trình bạn muốn thoát ra một cách an toàn.
cagenut

Tôi có một vấn đề tương tự trong đó sau khi SAN phát hành đĩa VM chỉ được đọc và cố gắng khắc phục lại gây ra lỗi tương tự trong OP. Máy ảo đang trên esxi 4.1 với lưu trữ kênh sợi. Khởi động lại VM khắc phục sự cố. Cá nhân tôi không nghĩ rằng đây là bất cứ điều gì để làm với đa đường. Chắc chắn phải có cách khắc phục mà không cần khởi động lại, đặc biệt là vì một số dịch vụ (apache) có xu hướng tiếp tục chạy trên một chỉ đọc FS.
Sẽ

Tôi đến đây để tìm kiếm một giải pháp cho vấn đề của riêng tôi (khác với một đĩa hỏng). Tôi mỉm cười thay. +1 cho "Bạn là địa ngục"
user1207217 23/03/13

Tôi có cùng một vấn đề như thế này, nhưng tôi đang sử dụng LVM. Cùng một lvdisplay sẽ cho tôi "đọc thất bại sau 0 trên 4096 tại 449197309952: Lỗi đầu vào / đầu ra" cho đến khi tôi thực hiện "đa đường -r", sau đó LVM bắt đầu hiển thị mọi thứ ngay mà không gặp lỗi. Tôi vẫn không thể có được phân vùng để kể lại, mặc dù. Không thể ngắt kết nối, nói thiết bị đang bận. Nếu tôi tắt tất cả các quy trình sử dụng thiết bị, tôi có thể ngắt kết nối và sau đó kết thúc thành công, nhưng tôi chỉ muốn có thể ghi lại thiết bị đọc-ghi, vì tôi sẽ có thể ...
mpontes

Câu trả lời:


6

Gần đây tôi đã gặp phải vấn đề này và giải quyết nó bằng cách khởi động lại nhưng sau khi điều tra thêm, có vẻ như việc ban hành lệnh sau có thể khắc phục nó.

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

Tôi nghĩ rằng bạn có thể muốn xem xét phần 25,14.4: Thay đổi trạng thái Đọc / Ghi của Đơn vị Hợp lý Trực tuyến trong tài liệu này , tuy nhiên, tôi khuyên bạn nên khởi động lại.


Cảm ơn Kevin. (Un) may mắn là vấn đề đã qua lâu nên tôi không thể kiểm tra nhưng đây có vẻ là lựa chọn hứa hẹn nhất.
cagenut

3
Trong một vấn đề tương tự, tôi có kinh nghiệm / sys / block / tên thiết bị / thiết bị / trạng thái đã được đặt thành 'đang chạy' và lệnh trên không giải quyết được vấn đề.
Sẽ

3

Hãy thử sử dụng:

mount -o remount,rw /mnt/fo

Tôi biết FreeBSD, không phải Linux. Nhưng đối với fBSD thì nó mount -rw /mnt/foo, vì vậy cái này có vẻ phù hợp nhất với tôi.
Chris S

1
Tôi chưa bao giờ có công việc này trong kịch bản được nêu trong câu hỏi. Khi đĩa được đánh dấu chỉ đọc do lỗi, nó luôn luôn khởi động lại cho tôi.
Alex

1
Tôi sẽ chỉnh sửa nó thành OP, nhưng Alex ở ngay đây, vấn đề dường như nằm bên dưới hệ thống tập tin: [root @ localhost ~] # mount -o remount, rw / mnt / foo mount: block device / dev / mapper / mpath0 được bảo vệ chống ghi, gắn chỉ đọc
cagenut

1
Bạn đã thử ngắt kết nối phân vùng và kể lại nó chưa? Tôi đã có lỗi dữ liệu trước đây với một ổ đĩa, việc ngắt kết nối (hoặc kết nối lại, rw) đã sửa nó cho tôi. Điều này là với các ổ đĩa SATA (và EIDE / SCSI cũ hơn) Tuy nhiên, trong tình huống của bạn, tôi tự hỏi liệu vấn đề là kênh ổ đĩa có cần phải được đặt lại không. Tôi đang tự hỏi nếu HDIO_DRIVE_RESET được gửi qua ioctl bằng cách nào đó. blockdev có thể được sử dụng để buộc đọc lại bảng phân vùng có thể làm điều đó. IDE trưng bày điều này với hdparm -w, có lẽ với các ổ FC của bạn, bạn đã có cách để gửi ioctl tới kênh.

2

Tôi là một fan hâm mộ của việc ngăn chặn vấn đề ở nơi đầu tiên. Hầu hết các hộp UNIX doanh nghiệp sẽ thử lại các hoạt động của hệ thống tập tin như mãi mãi. Bạn là quản trị viên cần thực hiện một số bài tập về nhà trước khi điều chỉnh cấu hình MPIO của bạn. Nếu ứng dụng của bạn phải đợi cho đến khi thiết bị trở về trạng thái có thể sử dụng, thì đây là một giải pháp. Trong /etc/multipath.conf của bạn, đảm bảo rằng loại thiết bị bạn quan tâm có cài đặt cho "no_path_retry" được đặt thành "hàng đợi". Đặt điều này sẽ khiến I / O không thành công để xếp hàng cho đến khi có đường dẫn hợp lệ. Chúng tôi đã thực hiện điều này cho các hộp EMC Symmtrix / DMX của chúng tôi để xử lý các trục trặc trong các điều kiện nhất định về lỗi / khôi phục đường dẫn ổ đĩa / bộ điều khiển / srdf.

Cách tiếp cận này đã tiết kiệm vô số lần thịt xông khói của chúng tôi và là tiêu chuẩn của chúng tôi cho hàng trăm hộp trên SAN đa trục / multivendor SAN với bản sao để khắc phục thảm họa.

Chỉ cần nghĩ rằng tôi có thể chia sẻ với tất cả các bạn. Bảo trọng.


2

Tôi đã có một số vấn đề, mà tôi đã giải quyết bằng cách sử dụng hdparm với -rtùy chọn trên các thiết bị phụ, logic đa năng.

-r Nhận / đặt cờ chỉ đọc cho thiết bị. Khi được đặt, Linux không cho phép các thao tác ghi trên thiết bị.


1

Bạn có nghĩ rằng nó liên quan đến phần trong tài liệu này có tiêu đề Tại sao các hệ thống tập tin ext3 trên Mạng Khu vực lưu trữ (SAN) của tôi liên tục trở thành chỉ đọc ?

Đây là một bài viết khá cũ và đang nói về kênh sợi quang, nhưng nó có thể liên quan đến vấn đề của bạn.


Đúng, đó không phải là lỗi cụ thể chính xác vì tôi đang chạy các phiên bản mới hơn nhiều so với các phiên bản mà họ tham chiếu, nhưng tất cả các loại tình huống tương tự có thể gây ra. Thế giới của các kênh sợi, hbas / hba-firmware / hba-driver, phần sụn mảng, phần sụn chuyển đổi, thiết kế vải, cấu hình thiết bị / ánh xạ đa năng, lvm và ext3 chỉ đơn giản là rất nhiều bộ phận chuyển động. Làm việc trên đủ môi trường và bạn sẽ thấy kịch bản này gây ra bởi một túi có vấn đề tương tự nhưng không giống nhau. Câu hỏi trong tay là, làm thế nào để phục hồi / remount mà không cần khởi động lại.
cagenut

0

Hệ thống tập tin tham nhũng? Thử:

dumpe2fs /dev/c/c | grep Filesystem\

Nếu sạch có lỗi, thì bạn cần quét và dọn dẹp.


-4

Linux đơn giản là không đủ sức đối phó với các SAN quy mô vừa. Bạn PHẢI chăm sóc và tinh chỉnh thời gian chờ IO và xử lý thời gian chờ đa luồng, tất cả chúng đều có khá nhiều ở các mặc định sẵn sàng cho máy tính để bàn.

(Hãy nhớ "từ chối IO đến thiết bị chết"?)


1
Bạn thực sự cần sao lưu các câu lệnh như "Linux không đối phó với SAN" và "mặc định sẵn sàng cho máy tính để bàn" với các tài liệu tham khảo và sự thật khó khăn.
Chris S

1
Thời gian chờ IO của đĩa mặc định là 30 giây? Các chủ đề trên? Ghi chú từ RedHat (đã lỗi thời) có thể nói rằng họ không thể xử lý một "thông báo thay đổi trạng thái" một cách duyên dáng, theo cách nó sẽ được dự định. Rằng Redhat mặc định đặt các liên kết đa đường vào một vị trí (/ var / lib) không thể truy cập được tại thời điểm tải của trình điều khiển đa đường? Rằng bạn không thể vô hiệu hóa đệ quy nóng hba cắm nóng PCI và tự động tạm thời lấy tất cả các LUN phụ thuộc ngoại tuyến cho đến khi nó được thay thế. Rằng nó không có init init đa luồng và mất "một lúc" để đưa ra> 1k lun. Udev, là một kịch bản shell ...
darkfader
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.