Linux 系统有时会以只读方式重新挂载根文件系统,例如,如果出现 I/O 错误。
我有一台机器在发生这种情况时变得无用,我最终手动重新启动它。
有没有办法让 Linux 在发生这种情况时自动重启?只读挂载对我来说没用。
Linux 系统有时会以只读方式重新挂载根文件系统,例如,如果出现 I/O 错误。
我有一台机器在发生这种情况时变得无用,我最终手动重新启动它。
有没有办法让 Linux 在发生这种情况时自动重启?只读挂载对我来说没用。
我正在开发一个充当服务器的嵌入式系统,问题是它将运行的环境非常激进,并且会遭受突然的电源中断。所以我打算使用 OverlayFS 将根文件系统挂载为可伪造的。这个想法来自 RaspberryPi,开发人员有一种机制可以启用/禁用将 rootfs 挂载为 OverlayFS(如您所见,可以使用raspi-config脚本启用它)
我的问题是……这是否有助于保护物理设备免受损坏?甚至是文件系统本身?我的想法是延长物理设备的寿命,我认为我可以避免写操作,但系统不能是纯只读的,因为某些程序需要将 FS 视为可写,这就是我在 OverlayFS 中思考的原因.
你怎么看?你对如何解决这个问题有其他想法吗?谢谢你们。
PS:我必须使用的系统是Debian Buster。
我们在相对较短的时间内对 ext4 分区进行了第二次损坏,并且 ext4 据说非常可靠。由于这是一个虚拟机,并且提供资源的主机没有看到磁盘错误或断电等,我想暂时排除硬件错误。
所以我想知道我们是否有如此不寻常的设置(Hyper-V 主机下的 CoreOS 来宾)、如此不寻常的工作负载(Nginx、Gitlab、Redmine、MediaWiki、MariaDB 的 Docker 容器)或错误的配置。欢迎任何意见/建议。
原始错误消息(在第二种情况下)是:
Jun 05 02:00:50 localhost kernel: EXT4-fs error (device sda9): ext4_lookup:1595: inode #8347255: comm git: deleted inode referenced: 106338109
Jun 05 02:00:50 localhost kernel: Aborting journal on device sda9-8.
Jun 05 02:00:50 localhost kernel: EXT4-fs (sda9): Remounting filesystem read-only
此时,e2fsck
运行发现很多错误(没有考虑保留日志),并lost+found
为一个 2TB 的分区放置了大约 357MB,上面有大约 512GB 的数据。此后操作系统仍会启动,因此丢失的部分似乎位于用户数据或 docker 容器中。
以下是有关受影响系统的更多详细信息:
$ uname -srm
Linux 4.19.123-coreos x86_64
$ sudo tune2fs -l /dev/sda9
tune2fs 1.45.5 (07-Jan-2020)
Filesystem volume name: ROOT
Last mounted on: /sysroot
Filesystem UUID: 04ab23af-a14f-48c8-af59-6ca97b3263bc
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg inline_data sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Remount read-only
Filesystem OS type: Linux
Inode count: 533138816
Block count: 536263675
Reserved block count: 21455406
Free blocks: 391577109
Free inodes: 532851311
First block: 0
Block size: 4096
Fragment size: 4096
Group descriptor size: 64
Reserved GDT blocks: 15
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 32576
Inode blocks per group: 1018
Flex block group size: 16
Filesystem created: Tue Sep 11 00:02:46 2018
Last mount time: Fri Jun 5 15:40:01 2020
Last write time: Fri Jun 5 15:40:01 2020
Mount count: 3
Maximum mount count: -1
Last checked: Fri Jun 5 08:14:10 2020
Check interval: 0 (<none>)
Lifetime writes: 79 GB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 128
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: 595db5c2-beda-4f32-836f-ee025416b0f1
Journal backup: inode blocks
更新:
以及有关主机设置的更多详细信息:
在 Ubuntu 上,我最近开始在外部 USB 硬盘上试用 ZFS。我现在似乎有一个损坏的 zfs 池,这可能只是因为我关闭了我的计算机(使用poweroff
)。
$ zpool import
pool: zfs
id: 1234512345123451234
state: FAULTED
status: The pool metadata is corrupted.
action: The pool cannot be imported due to damaged devices or data.
The pool may be active on another system, but can be imported using
the '-f' flag.
see: http://zfsonlinux.org/msg/ZFS-8000-72
config:
zfs FAULTED corrupted data
usb-Disk_Name_etc-0:0 ONLINE
尝试导入它时,我收到一条有用的消息,说明我将丢失大约 1 秒的数据(这很好),我可以尝试使用“-F”选项进行恢复:
$ zpool import zfs
cannot import 'zfs': I/O error
Recovery is possible, but will result in some data loss.
Returning the pool to its state as of Thu 12 Mar 2020 00:58:03 GMT
should correct the problem. Approximately 1 seconds of data
must be discarded, irreversibly. Recovery can be attempted
by executing 'zpool import -F zfs'. A scrub of the pool
is strongly recommended after recovery.
使用空运行标志,我确认 -F 应该工作:
$ zpool import -Fn zfs
Would be able to return zfs to its state as of Thu 12 Mar 2020 00:58:03 GMT.
Would discard approximately 1 seconds of transactions.
但是,当我尝试真实的东西时,它似乎完全忽略了“-F”选项并重复了原始消息:
$ zpool import -F zfs
cannot import 'zfs': I/O error
Recovery is possible, but will result in some data loss.
Returning the pool to its state as of Thu 12 Mar 2020 00:58:03 GMT
should correct the problem. Approximately 1 seconds of data
must be discarded, irreversibly. Recovery can be attempted
by executing 'zpool import -F zfs'. A scrub of the pool
is strongly recommended after recovery.
我发现从这个答案中提到了“-X”选项:https ://serverfault.com/a/645866/74394但我继续收到完全相同的消息。我已经尝试了所有这些选项组合,包括池名称 (zfs) 和数字 ID 号(如 1234512345123451234),我总是得到与上面建议使用 -F 选项完全相同的消息。
-F
-FX
-f
-fF
-fFX
我在这里做明显错误的事情吗?如果我因为系统关闭而导致 1 秒的数据丢失而无法挽回地丢失了整个磁盘,那么 ZFS 似乎非常不稳定!我没有池的备份副本,因为我才刚刚开始尝试 ZFS。谢谢你的帮助。
我在我的硬盘上运行 Snapraid。但是,我想测试它的数据完整性功能,看看它们如何/是否真正起作用。
但我真的不明白如何“破坏”我的数据。我可以手动更改文件的内容。但是,Snapraid 只会正常同步此更改。并且 Snapraid 修复会自动将文件恢复到更改之前。
但是我如何测试实际的数据损坏,以及我如何知道 Snapraid 是否真的修复了它?
我的 FreeBSD 10.2 服务器上的一个目录莫名其妙地被损坏了(ZFS 不应该阻止这种情况吗?)
ls
或针对它的任何其他命令会导致当前会话在内核级别冻结(即使 SIGKILL 什么也不做)。
ZFS 清理没有发现任何问题。
# zpool status zroot
pool: zroot
state: ONLINE
scan: scrub repaired 0 in 0h17m with 0 errors on Sun Dec 18 18:25:04 2016
config:
NAME STATE READ WRITE CKSUM
zroot ONLINE 0 0 0
gpt/zfs0 ONLINE 0 0 0
errors: No known data errors
smartctl
说磁盘一切正常。
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x000b 100 100 016 Pre-fail Always - 0
2 Throughput_Performance 0x0005 137 137 054 Pre-fail Offline - 89
3 Spin_Up_Time 0x0007 128 128 024 Pre-fail Always - 314 (Average 277)
4 Start_Stop_Count 0x0012 100 100 000 Old_age Always - 78
5 Reallocated_Sector_Ct 0x0033 100 100 005 Pre-fail Always - 0
7 Seek_Error_Rate 0x000b 100 100 067 Pre-fail Always - 0
8 Seek_Time_Performance 0x0005 142 142 020 Pre-fail Offline - 29
9 Power_On_Hours 0x0012 097 097 000 Old_age Always - 24681
10 Spin_Retry_Count 0x0013 100 100 060 Pre-fail Always - 0
12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 78
192 Power-Off_Retract_Count 0x0032 100 100 000 Old_age Always - 306
193 Load_Cycle_Count 0x0012 100 100 000 Old_age Always - 306
194 Temperature_Celsius 0x0002 171 171 000 Old_age Always - 35 (Min/Max 20/46)
196 Reallocated_Event_Count 0x0032 100 100 000 Old_age Always - 0
197 Current_Pending_Sector 0x0022 100 100 000 Old_age Always - 0
198 Offline_Uncorrectable 0x0008 100 100 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x000a 200 200 000 Old_age Always - 0
甚至zdb
没有发现任何问题。
# zdb -c zroot
Traversing all blocks to verify metadata checksums and verify nothing leaked ...
loading space map for vdev 0 of 1, metaslab 44 of 116 ...
12.2G completed ( 60MB/s) estimated time remaining: 0hr 00min 00sec
No leaks (block sum matches space maps exactly)
bp count: 956750
ganged count: 0
bp logical: 43512090624 avg: 45479
bp physical: 11620376064 avg: 12145 compression: 3.74
bp allocated: 13143715840 avg: 13737 compression: 3.31
bp deduped: 0 ref>1: 0 deduplication: 1.00
SPA allocated: 13143715840 used: 1.32%
additional, non-pointer bps of type 0: 123043
Dittoed blocks on same vdev: 62618
该目录不包含任何重要数据,所以我可以删除它并进入“干净”状态。
想到的一种解决方案是创建一个新的 ZFS 池,复制所有健康的数据,然后删除旧的。但这感觉非常危险。如果系统挂起并且我的服务器出现故障怎么办?
你能想出一种方法来摆脱损坏的目录而不会造成太多破坏吗?
我有一个设置,其中一个通过 FibreChannel 连接的 SAN 存储可由两台主机访问(在块级别)。我想在存储上创建两个 lvm2 物理卷:pv1
和pv2
,现在分别是两个卷组的唯一成员:vg1
和vg2
。我的主人应该专门使用它们并且“不要碰另一个”。
由于 SAN 对两个主机都是可见的,因此 lvm 结构对两个主机都是可见的。(我对其进行了测试:在一台主机上创建逻辑卷会导致它们在 /dev/mapper 下对另一台主机可见)。我想确保host1
只会修改vg1
并且host2
只会修改vg2
以防止数据损坏。
是否保证当我没有明确执行任何 lvm 命令时,lvm 守护进程和内核不会重新调整范围/优化属于其他主机的卷组,从而破坏它?
我们在 Windows 2008 R2 服务器上安装了一个 couchbase,但它已损坏(这是我任期之前的,现在我想清理它)。程序和功能列表中没有添加/删除条目。services.msc 中没有活动的服务。
但是,有些东西仍然认为 Couchbase 已安装。害羞地擦掉盒子(虽然我正在处理它,但我们并不是要“按一下按钮重新部署测试环境服务器”),我如何确保之前安装的所有 couchbase 残余现在都消失了?
我相信之前的安装是在 Couchbase 2.x 范围内,但它可能是 1.7+
再次运行安装程序会出现“安装程序需要更新注册表值才能从以前的版本升级。请再次运行安装程序以继续。”
我相当确定我的服务器上的某些数据已损坏,并且从弹出的对话框中我认为其中一个被损坏的东西是 logonui.exe
我认为这是因为当服务器通过 BIOS 和 Windows 加载闪屏时,当它完成时它会进入黑屏,只有一个我可以四处移动的鼠标光标。但是大多数服务都恢复了,例如:DNS、DHCP、DFS 和打印服务都在黑屏时加载。
有什么办法可以修复登录屏幕吗?也许从另一个 Server 2008 副本中复制一个文件,从原始媒体(我有)中获取一些东西,或者将系统恢复到以前的还原点?
谢谢!我现在在杂草丛中...
我越来越多地收到必须修复的表,并返回以下消息:自动增量值:0 小于最大使用值:xx
这发生在有 200 行的表和有大约 300 万行的表上,但到目前为止,同样的几张表也有问题。我正在运行 MySQL 5.0.22。
修复由一个脚本运行,该脚本每分钟检查一次是否需要修复 MySQL 表。我还有一个运行两小时的 6 GB 数据库的自动备份,并且总是在备份时触发修复。
有任何想法吗?