从磁盘错误以只读方式装入ext3 fs readwrite后,如何重新装入它?


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

它仍然如何记住那个“ 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

不,不。

我已经尝试了各种不同的mount / tune2fs / dmsetup命令,但无法弄清楚如何取消将块设备标记为写保护。重新启动将解决该问题,但我宁愿在线进行。一个小时的谷歌搜索也使我无处可去。救我ServerFault。


3
嗯,有几个问题“当SAN出问题时,这是一个相对普遍的问题”, 为什么您的SAN如此不可靠,我会先检查一下?您是否尝试过用umount卸载,然后再次安装?是否有充分的理由为什么需要重新安装?我通常只需要在维护之后重新挂载我的根文件系统。
Unix管理员

umount在打开的文件句柄上弹跳,这些句柄通常来自您宁可理智退出的进程。
basketnut

我有一个类似的问题,在SAN问题之后,VM磁盘是只读的,尝试重新挂载会导致OP中出现相同的错误。VM在带有光纤通道存储的esxi 4.1上。重新启动VM可解决此问题。我个人不认为这与多路径有关。当然,必须有一种无需重新启动就可以修复的方法,尤其是由于某些服务(Apache)倾向于在只读FS上继续运行。
威尔

我来这里是为了寻找解决自己的问题(不同的是,磁盘损坏)的解决方案。我笑了。为“你到底是

我有与此完全相同的问题,但是我正在使用LVM。相同的lvdisplay会给我“在40961973处的0以后读取失败,449197309952:输入/输出错误”,直到我执行“ multipath -r”为止,然后LVM开始正确显示所有内容而没有错误。不过,我仍然无法重新安装该分区。表示设备正忙,也无法卸载。如果我关闭了使用该设备的所有进程,则可以卸载然后成功重新安装,但是我更希望能够以读写方式重新安装设备,因为我应该能够...
mpontes

Answers:


6

我刚刚遇到了这个问题,并通过重新启动解决了该问题,但经过进一步调查,似乎发出以下命令可能会解决该问题。

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

我想您可能想看一下本文档中的25.14.4节:更改在线逻辑单元的读/写状态,但是,我建议重新启动。


谢谢凯文。不幸的是,问题早已消失,所以我无法测试,但这似乎是最有前途的选择。
basketnut'2

3
在类似的问题中,我经历了/ sys / block / device-name / device / state已设置为“正在运行”的情况,并且上述命令未能解决该问题。
2012年

3

尝试使用:

mount -o remount,rw /mnt/fo

我知道FreeBSD,而不是Linux。但是对于fBSD来说mount -rw /mnt/foo,这对我来说似乎是最正确的。
克里斯·S

1
我从未在问题概述的场景中进行过这项工作。由于错误将磁盘标记为只读后,它始终会对我重新引导。
Alex

1
我将其编辑到OP中,但Alex就在这里,问题似乎在文件系统下方:[root @ localhost〜]#mount -o remount,rw / mnt / foo mount:块设备/ dev / mapper / mpath0是写保护的,只读的安装
basketnut

1
您是否尝试过卸载分区并重新安装?我在使用驱动器之前遇到数据错误,卸载(或重新安装,rw)已为我修复了该错误。这是SATA驱动器(和较旧的EIDE / SCSI)所使用的,但是,根据您的情况,我想知道问题是否在于驱动器通道需要重置。我想知道HDIO_DRIVE_RESET是否通过ioctl发送。blockdev可以用于强制重新读取可能会这样做的分区表。IDE可以使用hdparm -w公开此信息,也许可以使用FC驱动器将ioctl发送到通道。

2

我一开始就是反对这个问题。大多数企业UNIX机器都会像永远一样重试文件系统操作。作为管理员,您需要做一些功课,然后才能调整MPIO配置。如果您的应用程序应该等到设备返回可用状态,那么这里就是一个解决方案。在/etc/multipath.conf中,确保您关心的设备类型的“ no_path_retry”设置设置为“ queue”。设置此项将导致失败的I / O排队,直到存在有效路径为止。我们这样做是为了使我们的EMC Symmtrix / DMX盒能够在某些情况下解决驱动器/控制器/ srdf路径故障/恢复的打ic问题。

这种方法为我们节省了无数次的培根,并且是多机柜/多供应商SAN上数百个具有复制功能以进行灾难恢复的盒子的标准配置。

只是想我可以和大家分享。照顾自己。


2

我遇到了一些问题,我通过使用hdparm-r逻辑多路径设备的子驱动器上的选项解决了该问题。

-r获取/设置设备的只读标志。设置后,Linux禁止在设备上执行写操作。


1

您是否认为这与本文档中标题为“ 为什么我的存储区域网络(SAN)上的ext3文件系统反复重复变为只读”的部分有关

这是一篇很老的文章,谈论的是光纤通道,但可能与您的问题有关。


是的,它不是确切的特定错误,因为我运行的版本要比他们引用的版本新,但是各种类似的情况都可能导致它。光纤通道,hbas / hba-firmware / hba-drivers,阵列固件,交换机固件,结构设计,device-mapper / multipathd config,lvm和ext3的世界只是许多移动部件。在足够的环境下工作,您会看到这种情况是由类似但不相同的问题引起的。当前的问题是,如何在不重新启动的情况下恢复/重新安装。
basketnut

0

文件系统损坏?尝试:

dumpe2fs /dev/c/c | grep Filesystem\

如果清理时出现错误,则需要进行扫描和清理。


-4

Linux根本无法很好地应对中型SAN。您必须格外小心,并对IO超时和多路径超时处理进行微调,它们几乎都是桌面就绪的默认值。

(还记得“将IO丢弃到死设备中吗?”)


1
您确实需要备份带有引用和确凿事实的语句,例如“ Linux无法应对SAN”和“桌面就绪默认值”。
克里斯·S

1
默认磁盘IO超时为30秒?上面的线程?RedHat的注释(可能已过时)指出,它们无法按预期的方式优雅地处理“状态更改通知”。那个Redhat默认将多路径绑定放在在多路径驱动程序加载时无法访问的位置(/ var / lib)吗?您不能递归地热禁用PCI热插拔hba,并暂时自动使所有从属LUN脱机,直到被替换为止。它没有多线程硬件初始化,需要“一段时间”才能得出> 1k lun。
乌德夫(
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.