目前,您对此问题一无所获。
通常,在对块设备进行读取或写入问题后,内核决定将“整个设备”的标志切换为只读。此后,对此设备上任何分区/文件系统的任何写入都会导致将其与设备状态一起切换为只读状态,因为无法进行任何写入。
dmesg的示例,这是碎片整理获取来宾设备映像时使用VirtualBox在Windows8上对来宾linux进行的仿真:
[11903.002030] ata3.00: exception Emask 0x0 SAct 0x1 SErr 0x0 action 0x6 frozen
[11903.003179] ata3.00: failed command: READ FPDMA QUEUED
[11903.003364] ata3.00: cmd 60/08:00:a8:77:57/00:00:00:00:00/40 tag 0 ncq 4096 in
[11903.003385] res 40/00:01:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
[11903.004074] ata3.00: status: { DRDY }
[11903.004248] ata3: hard resetting link
[11903.325703] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[11903.327097] ata3.00: configured for UDMA/133
[11903.328025] ata3.00: device reported invalid CHS sector 0
[11903.329664] ata3: EH complete
[11941.000472] ata3.00: exception Emask 0x0 SAct 0x1 SErr 0x0 action 0x6 frozen
[11941.000769] ata3.00: failed command: READ FPDMA QUEUED
[11941.000952] ata3.00: cmd 60/08:00:c8:77:57/00:00:00:00:00/40 tag 0 ncq 4096 in
[11941.000961] res 40/00:01:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
[11941.001353] ata3.00: status: { DRDY }
[11941.001504] ata3: hard resetting link
[11941.320297] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[11941.321252] ata3.00: configured for UDMA/133
[11941.321379] ata3.00: device reported invalid CHS sector 0
[11941.321553] ata3: EH complete
[11980.001746] ata3.00: exception Emask 0x0 SAct 0x11fff SErr 0x0 action 0x6 frozen
[11980.002070] ata3.00: failed command: WRITE FPDMA QUEUED
[11980.002255] ata3.00: cmd 61/18:00:28:23:59/00:00:00:00:00/40 tag 0 ncq 12288 out
[11980.002265] res 40/00:01:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
-------------------
There are many other errors, like "lost write page", "Journal has aborted", "Buffer I/O error", "hard resetting link" and many others.
之后,重新安装原因:
mount / -o remount,rw
mount: cannot remount block device /dev/sda1 read-write, is write-protected
因为保留rootfs sda1的整个设备sda是READONLY。
以我的经验,这是在以下情况下发生的:
- 硬盘确实损坏。返回的写入问题取决于硬盘条件
- 主机超载,然后linux guest虚拟机虚拟硬盘写入超时
- FC电缆或SAN设备(光纤通道上的阵列磁盘)超载
- 通过FC或FCoE暂时失去了连接。FC数据包可能丢失/超时
在这种情况下,设备实际上是可读写的,但是linux内核在内部将该设备标记为只读,并用作只读。这是为防止损坏而设计的内核功能,但仅在1.点可用。
问题是。如何手动告诉内核,硬盘块设备正常运行?
取消此操作后,内核会将设备作为只读设备,例如“ CD-ROM”,并且没有其他命令可以正常工作,包括mount / remount -o read-write,fsck等。
无法使用的邮件,确实是想要帮助但对问题性质不了解的人的垃圾邮件资格:
- 尝试重新安装为可读写(不可能,设备为RO)
- fsck this(用于什么目的的设备是RO,无法修复)
- “我不知道”(首先有道理,但无法使用)
- “替换设备” *(通常是其他问题)
有没有人要问以上问题的公式?将可写块设备从只读状态恢复到可读写状态的开关标志?这时似乎没人知道怎么做。
这是一些解决方法,但通常是半可用或不可用的:
- 删除模块支持访问指定的硬盘或存储阵列。不幸的是,通常损坏的设备保留rootfs,或者驱动程序同时保留损坏的设备和保留rootfs的设备
- 删除FC对设备的访问权,然后再次加入(fctools),这是不可能的,并非总是可行的。
- 重新启动整个机器。通常,这总是可能的,而我们总是被迫这样做。
在第1点和第2点,我们告诉内核我们完全断开了设备的连接并再次连接到它。内核将其识别为已加入新的正常运行的设备。我们可以使用USB设备模拟此情况并暂时断开电源。第三点是最后一次机会,通常可以奏效。但是,为什么我们应该重新启动所有?不幸的是,我们在所有方面都丢失了所有日志更新和脏缓冲区。
请注意,在相同情况下,Windows(台式机和服务器)没有问题。