[转]解决journal block not found错误

本文介绍了解决Linux系统中因journalblocknotfound错误导致的根分区只读问题的方法。通过转换文件系统、修复并重建日志,成功使根分区恢复正常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原贴:http://www.linuxfly.org/read.php/255.htm

[转]解决journal block not found错误 雨
linuxing , 22:47 , 基础知识 » 故障处理 , 评论(0) , 引用(0) , 阅读(179) , Via 本站原创 | |
   某机器,系统运行一段时间之后根分区都会变成只读。当使用光盘进入拯救模式后,用

# dumpe2fs -h /dev/sda1

可以看到文件系统的状态是 “clean with errors”
用fsck进行系统检查时,报如下错误:
引用
journal_bmap_Rsmp_6199acb1: journal block not found at offset 5132 on md(9,0)
Aborting journal on device md(9,0).
ext3_abort called.
EXT3-fs abort (device md(9,0)): ext3_journal_start: Detected aborted journal
Remounting filesystem read-only

该错误表明ext3文件系统有一部分的日志丢失了。由于fsck并不能恢复日志,需要手动重建磁盘日志。

重建ext3的日志:
进入rescue模式
1)将sda1转换为ext2,即去掉ext3的日志:

# tune2fs -O ^has_journal /dev/sda1

2)对sda1进行fsck

# e2fsck -yf /dev/sda1

3)将sda1从ext2转换为ext3,重建日志

# tune2fs -j /dev/sda1

完成后,重启系统,根分区恢复正常。

※ 以上内容来自赵超 zhaochao#redflag-linux.com
Tags: ext3
[11:27:24:071] [ 6.037791][T1300001] init: init 5: [libfs_mgr] [chengqian_fs_mgr_do_mount_one] Mounting /metadata from /dev/block/by-name/metadata␍␊ [11:27:24:073] [ 6.038112][T1300001] init: init 5: [libfs_mgr] [chengqian_prepare_fs_for_mount] Preparing mount: blk_device=/dev/block/by-name/metadata, mount_point=/metadata, fs_type=ext4␍␊ [11:27:24:138] [ 6.083160][T1100001] init: init 6: [libfs_mgr] superblock s_max_mnt_count:65535,/dev/block/by-name/metadata␍␊ [11:27:24:140] [ 6.089918][T1100001] init: init 5: [libfs_mgr] [chengqian_prepare_fs_for_mount] Read ext4 superblock successfully␍␊ [11:27:24:144] [ 6.094671][T1100001] init: init 5: [libfs_mgr] [chengqian_prepare_fs_for_mount] Device size=33554432 bytes, block_size=4096, device_block_count=8192␍␊ [11:27:24:146] [ 6.100414][T1100001] init: init 5: [libfs_mgr] Filesystem on /dev/block/by-name/metadata was not cleanly shutdown; state flags: 0x1, incompat feature flags: 0x46␍␊--正常开机没有这个log [11:27:24:153] [ 6.110464][T1100001] init: init 5: [libfs_mgr] [chengqian_prepare_fs_for_mount] Filesystem unclean shutdown detected, flags: 1␍␊--正常开机没有这个log [11:27:24:155] [ 6.113342][T1100001] init: init 5: [libfs_mgr] [chengqian_prepare_fs_for_mount] Running fsck on /dev/block/by-name/metadata␍␊--正常开机没有这个log [11:27:24:157] [ 6.116445][T1100001] init: EXT4-fs: Ignoring removed nomblk_io_submit option␍␊ [11:27:24:163] [ 6.130915][T1000001] init: EXT4-fs (mmcblk0p9): recovery complete␍␊ [11:27:24:163] [ 6.133074][T1000001] init: EXT4-fs (mmcblk0p9): mounted filesystem 9094c4c6-c49b-41dd-82d9-24bdf6ae5fcd r/w with ordered data mode. Quota mode: none.␍␊ [11:27:24:167] [ 6.135344][T1000001] init: init 5: [libfs_mgr] check_fs(): mount(/dev/block/by-name/metadata,/metadata,ext4)=0: Success␍␊ [11:27:24:169] [ 6.137425][T1100001] init: EXT4-fs (mmcblk0p9): unmounting filesystem 9094c4c6-c49b-41dd-82d9-24bdf6ae5fcd.␍␊ [11:27:24:173] [ 6.141556][T1000001] init: init 5: [libfs_mgr] umount_retry(
最新发布
03-08
<think>嗯,用户问的是为什么Android设备在启动时会出现EXT4文件系统未干净关闭的日志,而正常开机时没有。首先,我需要回忆一下EXT4文件系统的特性。EXT4作为日志式文件系统,会在系统异常关机或崩溃时记录日志,以便在下次启动时进行恢复。那正常关机的话,系统应该会正确卸载文件系统,所以不会有这样的日志。 接下来,用户提到的是启动时出现这些日志,而正常开机没有。可能的原因包括异常断电、系统崩溃、或者强制重启。比如用户可能在关机时直接拔掉电池或者长按电源键,导致文件系统没有正确卸载。还有可能是硬件问题,比如电源管理模块故障,导致突然断电。软件方面,可能有内核崩溃或守护进程无法正常结束,导致系统无法完成关机流程。 另外,Android设备在启动过程中会检查文件系统状态,如果检测到上次是异常关机,就会触发fsck进行修复,这时候就会记录unclean shutdown的日志。正常开机的话,因为文件系统是干净关闭的,所以不会有这个检查。 然后,解决方法方面,首先要确保正常关机流程,比如避免强制重启。其次,检查硬件问题,尤其是电源相关的部件。还有调整文件系统的挂载选项,比如使用auto_da_alloc来减少数据损坏风险,或者增加日志提交频率。如果问题持续,可能需要深入分析内核日志或者进行硬件诊断。 用户提供的引用中提到了存储空间保护和FUSE文件系统,可能和SD卡保护机制有关,比如在空间不足时系统异常处理可能导致关机问题。需要检查这些保护机制是否影响了正常关机流程,或者在空间满的情况下导致文件系统无法正确卸载。此外,wifi启动过程中的问题可能间接影响系统稳定性,但具体关联需要进一步分析日志。 最后,用户可能需要具体的排查步骤,比如如何查看内核日志,如何调整挂载选项,以及如何测试硬件稳定性。可能需要指导用户使用dmesg或logcat来捕获启动日志,检查是否有相关的错误信息,或者建议进行硬件诊断测试。</think>### 分析Android设备EXT4文件系统未干净关闭的原因及解决方法 #### 1. **根本原因分析** EXT4文件系统通过日志(Journaling)机制保证数据一致性。当系统异常断电或强制重启时,文件系统未完成日志提交和元数据同步,会触发以下现象: - 设备启动时内核检测到文件系统状态标记为"unclean",触发自动修复(通过`e2fsck`工具),并打印日志如: ``` EXT4-fs (mmcblk0p1): recovery complete EXT4-fs (mmcblk0p1): mounted filesystem with ordered data mode. Opts: (null) ``` [^2] - 正常开机时系统会执行正常卸载流程,更新超级块中的`clean`标记,因此不会出现该日志。 #### 2. **具体触发场景** | 场景类型 | 典型表现 | |----------------|--------------------------------------------------------------------------| | **硬件问题** | 突然断电、电池接触不良、电源管理芯片故障 | | **软件问题** | 内核崩溃(Oops/Panic)、关键守护进程(如vold)异常退出、强制重启操作 | | **存储保护** | SD卡保护机制触发异常卸载(如存储空间满导致卸载失败) | #### 3. **排查与解决方法** **步骤1:定位问题分区** ```shell # 查看内核日志 dmesg | grep "EXT4-fs.*unclean" # 示例输出:EXT4-fs (mmcblk0p28): VFS: Found ext4 filesystem with errors ``` **步骤2:分析关机流程** - 检查最后一次关机状态: ```shell cat /proc/last_kmsg | grep "Power down" ``` - 验证正常关机流程是否完整(如`system_server`的`shutdown`广播是否完成) **步骤3:硬件诊断** - 使用`mmc-utils`检测eMMC健康状态: ```shell mmc extcsd read /dev/mmcblk0 ``` - 检查电源管理芯片输出电压稳定性 **步骤4:文件系统加固** ```xml <!-- 修改fstab文件系统挂载选项 --> /dev/block/mmcblk0p28 /data ext4 noatime,nosuid,nodev,auto_da_alloc,errors=panic 0 0 ``` *注:`auto_da_alloc`选项可在异常断电时增强数据一致性[^1]* #### 4. **进阶优化方案** - **日志模式调整**:将默认的`ordered`模式改为`journal`模式(全日志记录) ```shell tune2fs -O has_journal /dev/mmcblk0p28 ``` - **增加日志提交频率**: ```shell echo 50 > /proc/sys/vm/dirty_expire_centisecs ``` #### 5. **特殊场景处理** 对于采用FUSE实现的SD卡存储方案[^1],需额外检查: ```python # 检查FUSE守护进程状态 if ps | grep sdcard; then echo "FUSE daemon running" else echo "FUSE daemon crashed" fi ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值