【问题标题】:How to simulate aborted journal in ext4 filesystem?如何在 ext4 文件系统中模拟中止的日志?
【发布时间】:2016-07-19 16:05:12
【问题描述】:

我们正在使用基于 BeagleBoneBlack 的定制板,

固件升级过程中出现以下错误

[  194.912834] EXT4-fs error (device mmcblk0p15): ext4_journal_check_start:56: Detected aborted journal
[  194.922558] EXT4-fs (mmcblk0p15): Remounting filesystem read-only

重新启动电路板恢复了这个错误,但为了测试我想模拟这个错误,然后在我的升级脚本中我想处理错误情况。

有没有办法模拟上述错误?

编辑

提供更多细节,
我在测试我的固件升级脚本时看到了上述错误,重启后它得到了解决,

经过一番搜索,我发现e2fsck 可以修复一些文件系统错误。
所以我用下面的 sn-p 更新了我的固件升级脚本。 现在我的问题是我需要测试我的脚本是否低于 sn-p,为此我需要在backup_partition 中存在e2fsck 可纠正错误的情况,所以我正在寻找一个选项来创建这种错误情况。

E2FSCK_EXITCODE_NO_ERROR=0
E2FSCK_EXITCODE_FS_ERROR_CORRECTED_REBOOT_REQUIRED=2
backup_partition="/dev/mmcblk0p16"

e2fsck -n "${backup_partition}" || status="${?}"
if [ "${status}" -ne "${E2FSCK_EXITCODE_NO_ERROR}" ];then
   echo "filesystem errors are observed in ${backup_partition}. e2fsck EXIT_CODE=${status}"
   status=0
   e2fsck -y "${backup_partition}" || status="${?}"
   if [ "${status}" -ge "${E2FSCK_EXITCODE_FS_ERROR_CORRECTED_REBOOT_REQUIRED}" ]; then
      return_code=$(( status & E2FSCK_EXITCODE_FS_ERROR_CORRECTED_REBOOT_REQUIRED ))
      if [ "${return_code}" -ne 0 ]; then
         echo "Exiting Filesystem errors corrected for ${backup_partition}, However reboot required, e2fsck EXIT_CODE=${status}."
      else
         echo "Exiting .. Filesystem errors are not corrected for ${backup_partition}, e2fsck EXIT_CODE=${status}."
      fi
      exit
   fi
fi

EDIT2

我可以使用以下场景重现错误
1.在一个窗口中使用dd阅读/dev/mmcblk0p15
2.同时挂载/dev/mmcblk0p15并删除文件和复制文件。

# e2fsck -n /dev/mmcblk0p15  > /home/e2fscklog
e2fsck 1.42.8 (20-Jun-2013)
    Warning: skipping journal recovery because doing a read-only filesystem check.
rootfs contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Entry '..' in .../??? (1224) has deleted/unused inode 99310.  Clear? no
Entry '..' in .../??? (1318) has deleted/unused inode 99310.  Clear? no
Entry 'jerq' in .../??? (1318) has deleted/unused inode 1321.  Clear? no
Entry '..' in .../??? (1344) has deleted/unused inode 99310.  Clear? no
Entry '..' in .../??? (1423) has deleted/unused inode 99310.  Clear? no
Entry '730MTGr-24' in .../??? (1423) has deleted/unused inode 1002.  Clear? no
Entry '730MTGr' in .../??? (1423) has deleted/unused inode 1035.  Clear? no
Entry '730MTG-41r' in .../??? (1423) has deleted/unused inode 906.  Clear? no
Entry '..' in .../??? (1424) has deleted/unused inode 99310.  Clear? no
Entry 'f1720a' in .../??? (1424) has deleted/unused inode 1425.  Clear? no
Entry 'fenix' in .../??? (1424) has deleted/unused inode 445.  Clear? no
Entry 'f1720' in .../??? (1424) has deleted/unused inode 1425.  Clear? no
Entry 'freedom110' in .../??? (1424) has deleted/unused inode 1426.  Clear? no
Entry 'fenixw' in .../??? (1424) has deleted/unused inode 440.  Clear? no
Entry 'f110-14w' in .../??? (1424) has deleted/unused inode 1427.  Clear? no
Entry 'fos' in .../??? (1424) has deleted/unused inode 1428.  Clear? no
Entry 'f200' in .../??? (1424) has deleted/unused inode 1429.  Clear? no
Entry 'fox' in .../??? (1424) has deleted/unused inode 498.  Clear? no
Entry 'fortune' in .../??? (1424) has deleted/unused inode 1428.  Clear? no
Entry 'f110-14' in .../??? (1424) has deleted/unused inode 1430.  Clear? no
Entry 'freedom100' in .../??? (1424) has deleted/unused inode 1431.  Clear? no
Entry 'falco-p' in .../??? (1424) has deleted/unused inode 1432.  Clear? no
Entry 'f200-w' in .../??? (1424) has deleted/unused inode 1433.  Clear? no
Entry 'freedom200' in .../??? (1424) has deleted/unused inode 1429.  Clear? no
Entry 'f200vi' in .../??? (1424) has deleted/unused inode 1434.  Clear? no
Entry 'falco' in .../??? (1424) has deleted/unused inode 1435.  Clear? no
Entry 'f110-w' in .../??? (1424) has deleted/unused inode 1436.  Clear? no
Entry 'f100-rv' in .../??? (1424) has deleted/unused inode 1437.  Clear? no
Entry 'f100-rv' in .../??? (1424) has an incorrect filetype (was 1, should be 2).
Fix? no
Entry 'f100' in .../??? (1424) has deleted/unused inode 1431.  Clear? no
Entry 'f200vi-w' in .../??? (1424) has deleted/unused inode 1438.  Clear? no
Entry 'f110' in .../??? (1424) has deleted/unused inode 1426.  Clear? no
Entry 'freedom' in .../??? (1424) has deleted/unused inode 1431.  Clear? no
Entry 'freedom-rv' in .../??? (1424) has deleted/unused inode 1437.  Clear? no
Entry 'freedom-rv' in .../??? (1424) has an incorrect filetype (was 1, should be 2).
Fix? no
Entry '..' in .../??? (1472) has deleted/unused inode 99310.  Clear? no
Entry '..' in .../??? (1499) has deleted/unused inode 99310.  Clear? no
Entry '..' in .../??? (1500) has deleted/unused inode 99310.  Clear? no
Entry '..' in .../??? (1553) has deleted/unused inode 99310.  Clear? no
Entry '630MTG-24' in .../??? (1553) has deleted/unused inode 981.  Clear? no
Entry '..' in .../??? (1554) has deleted/unused inode 99310.  Clear? no
Entry '..' in .../??? (1610) has deleted/unused inode 99310.  Clear? no
Entry '..' in .../??? (1614) has deleted/unused inode 99310.  Clear? no
Entry '..' in .../??? (511) has deleted/unused inode 99310.  Clear? no
Entry '..' in .../??? (608) has deleted/unused inode 99310.  Clear? no
Entry '..' in .../??? (610) has deleted/unused inode 99310.  Clear? no
Entry 'gs5430-22' in .../??? (610) has deleted/unused inode 444.  Clear? no
Entry 'gs5430' in .../??? (610) has deleted/unused inode 484.  Clear? no
Entry '..' in .../??? (652) has deleted/unused inode 99310.  Clear? no
Entry 'unixpc' in .../??? (652) has deleted/unused inode 431.  Clear? no
Entry '..' in .../??? (658) has deleted/unused inode 99310.  Clear? no
Entry '..' in .../??? (661) has deleted/unused inode 99310.  Clear? no
Entry '..' in .../??? (669) has deleted/unused inode 99310.  Clear? no
Entry '..' in .../??? (745) has deleted/unused inode 99310.  Clear? no
Entry '..' in .../??? (389) has deleted/unused inode 99308.  Clear? no
Entry '..' in .../??? (393) has deleted/unused inode 99310.  Clear? no
Entry '..' in .../??? (424) has deleted/unused inode 99310.  Clear? no
Entry '..' in .../??? (819) has deleted/unused inode 99310.  Clear? no
Entry 'liswb' in .../??? (819) has deleted/unused inode 833.  Clear? no
Entry 'layer' in .../??? (819) has deleted/unused inode 834.  Clear? no
Entry 'lisaterm' in .../??? (819) has deleted/unused inode 835.  Clear? no
Entry 'ln03-w' in .../??? (819) has deleted/unused inode 836.  Clear? no
Entry 'linux-vt' in .../??? (819) has deleted/unused inode 837.  Clear? no
Entry 'linux-c' in .../??? (819) has deleted/unused inode 838.  Clear? no
Entry 'linux-m' in .../??? (819) has deleted/unused inode 839.  Clear? no
Entry 'linux2.6.26' in .../??? (819) has deleted/unused inode 840.  Clear? no
Entry 'lisa' in .../??? (819) has deleted/unused inode 841.  Clear? no
Entry '..' in .../??? (1059) has deleted/unused inode 99310.  Clear? no
Entry 'share' in /usr (65572) has deleted/unused inode 99306.  Clear? no
Entry 'dg211' in .../??? (1059) has deleted/unused inode 1099.  Clear? no
Entry 'd430-unix-w' in .../??? (1059) has deleted/unused inode 1103.  Clear? no
Entry 'dku7102' in .../??? (1059) has deleted/unused inode 1101.  Clear? no
Entry 'dmd-24' in .../??? (1059) has deleted/unused inode 936.  Clear? no
Entry 'darwin-80x25' in .../??? (1059) has deleted/unused inode 1209.  Clear? no
Entry 'd217-unix-25' in .../??? (1059) has deleted/unused inode 1211.  Clear? no
Entry 'ddr3180' in .../??? (1059) has deleted/unused inode 1212.  Clear? no
Entry 'd414-unix-sr' in .../??? (1059) has deleted/unused inode 1215.  Clear? no
Entry 'ddr' in .../??? (1059) has deleted/unused inode 1212.  Clear? no
Entry 'darwin-m-f' in .../??? (1059) has deleted/unused inode 1216.  Clear? no
Entry 'dmd1' in .../??? (1059) has deleted/unused inode 907.  Clear? no
Entry 'd464-unix-sr' in .../??? (1059) has deleted/unused inode 1215.  Clear? no
Entry 'd578-dg' in .../??? (1059) has deleted/unused inode 1098.  Clear? no
Entry 'd430c-unix-w' in .../??? (1059) has deleted/unused inode 1103.  Clear? no
Entry 'd214' in .../??? (1059) has deleted/unused inode 1104.  Clear? no
Entry 'd210' in .../??? (1059) has deleted/unused inode 1104.  Clear? no
Entry 'd410-7b-w' in .../??? (1059) has deleted/unused inode 1100.  Clear? no
Entry 'd210-dg' in .../??? (1059) has deleted/unused inode 1155.  Clear? no
Entry 'd414-unix' in .../??? (1059) has deleted/unused inode 1097.  Clear? no
Entry 'darwin-80x25-m' in .../??? (1059) has deleted/unused inode 1160.  Clear? no
Entry 'dmd-34' in .../??? (1059) has deleted/unused inode 1032.  Clear? no
Entry 'dku7103-sna' in .../??? (1059) has deleted/unused inode 1213.  Clear? no
Entry 'd577-dg' in .../??? (1059) has deleted/unused inode 1098.  Clear? no
Entry 'd411-7b-w' in .../??? (1059) has deleted/unused inode 1100.  Clear? no
Entry 'ds40-2' in .../??? (1059) has deleted/unused inode 1157.  Clear? no
Entry 'vapple' in .../??? (1224) has deleted/unused inode 983.  Clear? no
Entry 'viewpoint60' in .../??? (1224) has deleted/unused inode 946.  Clear? no
Entry 'vp60' in .../??? (1224) has deleted/unused inode 946.  Clear? no
Entry 'vitty' in .../??? (1224) has deleted/unused inode 834.  Clear? no
Entry 'viewpoint' in .../??? (1224) has deleted/unused inode 988.  Clear? no
Entry 'xterm-r5' in .../??? (1344) has deleted/unused inode 1386.  Clear? no
Entry 'xterm-xf86-v333' in .../??? (1344) has deleted/unused inode 1388.  Clear? no
Entry 'xterm-xf86-v333' in .../??? (1344) has an incorrect filetype (was 1, should be 2).
Fix? no
Entry 'xterm-8bit' in .../??? (1344) has deleted/unused inode 1389.  Clear? no
Entry 'xterm-8bit' in .../??? (1344) has an incorrect filetype (was 1, should be 2).
Fix? no
Entry 'xnuppc-m-f' in .../??? (1344) has deleted/unused inode 1216.  Clear? no
Entry 'xnuppc+80x25' in .../??? (1344) has deleted/unused inode 1385.  Clear? no
Entry 'xnuppc+100x37' in .../??? (1344) has deleted/unused inode 1392.  Clear? no
Entry 'xnuppc+f2' in .../??? (1344) has deleted/unused inode 1390.  Clear? no
Entry 'xdku' in .../??? (1344) has deleted/unused inode 1391.  Clear? no
Entry 'xl83' in .../??? (1344) has deleted/unused inode 787.  Clear? no
Entry 'xnuppc-80x25' in .../??? (1344) has deleted/unused inode 1209.  Clear? no
Entry 'xterm+88color' in .../??? (1344) has deleted/unused inode 1387.  Clear? no
Entry 'xnuppc-80x25-m' in .../??? (1344) has deleted/unused inode 1160.  Clear? no
Entry 'xnuppc-m-b' in .../??? (1344) has deleted/unused inode 1156.  Clear? no
Entry 'microterm' in .../??? (1500) has deleted/unused inode 952.  Clear? no
Entry 'mai' in .../??? (1500) has deleted/unused inode 1546.  Clear? no
Entry 'mime2a-v' in .../??? (1500) has deleted/unused inode 1547.  Clear? no
Entry 'masscomp2' in .../??? (1500) has deleted/unused inode 1548.  Clear? no
Entry 'microterm5' in .../??? (1500) has deleted/unused inode 1034.  Clear? no
Entry 'mlterm-256color' in .../??? (1500) has deleted/unused inode 1551.  Clear? no
Entry 'modgraph2' in .../??? (1500) has deleted/unused inode 1545.  Clear? no
Entry 'megatek' in .../??? (1500) has deleted/unused inode 1549.  Clear? no
Entry 'mime2a' in .../??? (1500) has deleted/unused inode 1547.  Clear? no
Entry 'mach-color' in .../??? (1500) has deleted/unused inode 1550.  Clear? no
Entry 'mime-hb' in .../??? (1500) has deleted/unused inode 1552.  Clear? no
Entry 'ibmapa8c-c' in .../??? (1554) has deleted/unused inode 1563.  Clear? no
Entry 'ibm5151' in .../??? (1554) has deleted/unused inode 1564.  Clear? no
Entry 'ibm6154' in .../??? (1554) has deleted/unused inode 1569.  Clear? no
Entry 'ibm6154' in .../??? (1554) has an incorrect filetype (was 1, should be 2).
Fix? no
Entry 'iris40' in .../??? (1554) has deleted/unused inode 1570.  Clear? no
Entry 'iris40' in .../??? (1554) has an incorrect filetype (was 1, should be 2).
Fix? no
Entry 'ibm5154-c' in .../??? (1554) has deleted/unused inode 1575.  Clear? no
Entry 'ibm5154-c' in .../??? (1554) has an incorrect filetype (was 1, should be 2).
Fix? no
Entry 'ibmpc' in .../??? (1554) has deleted/unused inode 1576.  Clear? no
Entry 'ibmmono' in .../??? (1554) has deleted/unused inode 1577.  Clear? no
Entry 'ibm3164' in .../??? (1554) has deleted/unused inode 1578.  Clear? no
Entry 'ibm3161' in .../??? (1554) has deleted/unused inode 1579.  Clear? no
Entry 'ibm3161' in .../??? (1554) has an incorrect filetype (was 1, should be 2).
Fix? no
Entry 'ibm8512' in .../??? (1554) has deleted/unused inode 1572.  Clear? no
Entry 'ibm6153-40' in .../??? (1554) has deleted/unused inode 1581.  Clear? no
Entry 'ibm-apl' in .../??? (1554) has deleted/unused inode 1030.  Clear? no
Entry 'interix' in .../??? (1554) has deleted/unused inode 1582.  Clear? no
Entry 'ibm3101' in .../??? (1554) has deleted/unused inode 1584.  Clear? no
Entry 'ibm3163' in .../??? (1554) has deleted/unused inode 1579.  Clear? no
Entry 'ibm3163' in .../??? (1554) has an incorrect filetype (was 1, should be 2).
Fix? no

............................CUT.............


Unattached zero-length inode 944.  Clear? no

Unattached inode 944
Connect to /lost+found? no

Unattached zero-length inode 953.  Clear? no

Unattached inode 953
Connect to /lost+found? no

Unattached zero-length inode 954.  Clear? no

Unattached inode 954
Connect to /lost+found? no

Unattached zero-length inode 955.  Clear? no

Unattached inode 955
Connect to /lost+found? no

Unattached zero-length inode 956.  Clear? no

Unattached inode 956
Connect to /lost+found? no

Unattached zero-length inode 957.  Clear? no

Unattached inode 957
Connect to /lost+found? no

Unattached zero-length inode 958.  Clear? no

Unattached inode 958
Connect to /lost+found? no

Unattached zero-length inode 959.  Clear? no

Unattached inode 959
Connect to /lost+found? no

Unattached zero-length inode 960.  Clear? no

Unattached inode 960
Connect to /lost+found? no

Unattached zero-length inode 961.  Clear? no

Unattached inode 961
Connect to /lost+found? no

Unattached zero-length inode 962.  Clear? no

Unattached inode 962
Connect to /lost+found? no

Unattached zero-length inode 963.  Clear? no

Unattached inode 963
Connect to /lost+found? no

Inode 964 ref count is 2, should be 1.  Fix? no

Unattached zero-length inode 965.  Clear? no

Unattached inode 965
Connect to /lost+found? no

Unattached zero-length inode 966.  Clear? no

Unattached inode 966
Connect to /lost+found? no

Unattached zero-length inode 967.  Clear? no

Unattached inode 967
Connect to /lost+found? no

Unattached zero-length inode 968.  Clear? no

Unattached inode 968
Connect to /lost+found? no

Unattached zero-length inode 993.  Clear? no

Unattached inode 993
Connect to /lost+found? no

Unattached zero-length inode 994.  Clear? no

Unattached inode 994
Connect to /lost+found? no

Unattached zero-length inode 995.  Clear? no

Unattached inode 995
Connect to /lost+found? no

Unattached zero-length inode 996.  Clear? no

Unattached inode 996
Connect to /lost+found? no

Unattached zero-length inode 997.  Clear? no

Unattached inode 997
Connect to /lost+found? no

Unattached zero-length inode 998.  Clear? no

Unattached inode 998
Connect to /lost+found? no

Unattached zero-length inode 999.  Clear? no

Unattached inode 999
Connect to /lost+found? no

Unattached zero-length inode 1000.  Clear? no

Unattached inode 1000
Connect to /lost+found? no

Unattached zero-length inode 1009.  Clear? no

Unattached inode 1009
Connect to /lost+found? no

Unattached zero-length inode 1010.  Clear? no

Unattached inode 1010
Connect to /lost+found? no

Unattached zero-length inode 1011.  Clear? no

Unattached inode 1011
Connect to /lost+found? no

Unattached zero-length inode 1012.  Clear? no

Unattached inode 1012
Connect to /lost+found? no

Unattached zero-length inode 1013.  Clear? no

Unattached inode 1013
Connect to /lost+found? no

Unattached zero-length inode 1014.  Clear? no

Unattached inode 1014
Connect to /lost+found? no

Unattached zero-length inode 1015.  Clear? no

Unattached inode 1015
Connect to /lost+found? no

Unattached zero-length inode 1016.  Clear? no

Unattached inode 1016
Connect to /lost+found? no

Inode 1017 ref count is 2, should be 1.  Fix? no

Unattached zero-length inode 1018.  Clear? no

Unattached inode 1018
Connect to /lost+found? no

Unattached zero-length inode 1019.  Clear? no

Unattached inode 1019
Connect to /lost+found? no

Unattached zero-length inode 1020.  Clear? no

Unattached inode 1020
Connect to /lost+found? no

Unattached zero-length inode 1021.  Clear? no

Unattached inode 1021
Connect to /lost+found? no

Unattached zero-length inode 1022.  Clear? no

Unattached inode 1022
Connect to /lost+found? no

Unattached zero-length inode 1023.  Clear? no

Unattached inode 1023
Connect to /lost+found? no

Unattached zero-length inode 1024.  Clear? no

Unattached inode 1024
Connect to /lost+found? no

Inode 1041 ref count is 5, should be 3.  Fix? no

Unattached zero-length inode 1042.  Clear? no

Unattached inode 1042
Connect to /lost+found? no

Unattached zero-length inode 1043.  Clear? no

Unattached inode 1043
Connect to /lost+found? no

Unattached zero-length inode 1044.  Clear? no

Unattached inode 1044
Connect to /lost+found? no

Unattached zero-length inode 1045.  Clear? no

Unattached inode 1045
Connect to /lost+found? no

Unattached zero-length inode 1046.  Clear? no

Unattached inode 1046
Connect to /lost+found? no

Unattached zero-length inode 1047.  Clear? no

Unattached inode 1047
Connect to /lost+found? no

Unattached zero-length inode 1048.  Clear? no

Unattached inode 1048
Connect to /lost+found? no

Unattached zero-length inode 1057.  Clear? no

Unattached inode 1057
Connect to /lost+found? no

Unattached zero-length inode 1058.  Clear? no

Unattached inode 1058
Connect to /lost+found? no

Inode 1059 ref count is 2, should be 1.  Fix? no

Inode 1224 ref count is 2, should be 1.  Fix? no

Inode 1237 ref count is 3, should be 2.  Fix? no

Inode 1259 ref count is 4, should be 2.  Fix? no

Inode 1268 ref count is 4, should be 2.  Fix? no

Inode 1318 ref count is 2, should be 1.  Fix? no

Unattached zero-length inode 1329.  Clear? no

Unattached inode 1329
Connect to /lost+found? no

Unattached zero-length inode 1330.  Clear? no

Unattached inode 1330
Connect to /lost+found? no

Unattached zero-length inode 1331.  Clear? no

Unattached inode 1331
Connect to /lost+found? no

Unattached zero-length inode 1332.  Clear? no

Unattached inode 1332
Connect to /lost+found? no

Unattached zero-length inode 1333.  Clear? no

Unattached inode 1333
Connect to /lost+found? no

Unattached zero-length inode 1334.  Clear? no

Unattached inode 1334
Connect to /lost+found? no

Unattached zero-length inode 1335.  Clear? no

Unattached inode 1335
Connect to /lost+found? no

Unattached zero-length inode 1336.  Clear? no

Unattached inode 1336
Connect to /lost+found? no

Unattached zero-length inode 1337.  Clear? no

Unattached inode 1337
Connect to /lost+found? no

Unattached zero-length inode 1338.  Clear? no

Unattached inode 1338
Connect to /lost+found? no

Unattached zero-length inode 1339.  Clear? no

Unattached inode 1339
Connect to /lost+found? no

Unattached zero-length inode 1340.  Clear? no

Unattached inode 1340
Connect to /lost+found? no

Unattached zero-length inode 1341.  Clear? no

Unattached inode 1341
Connect to /lost+found? no

Unattached zero-length inode 1342.  Clear? no

Unattached inode 1342
Connect to /lost+found? no

Unattached zero-length inode 1343.  Clear? no

Unattached inode 1343
Connect to /lost+found? no

Inode 1344 ref count is 2, should be 1.  Fix? no

Inode 1423 ref count is 2, should be 1.  Fix? no

Inode 1424 ref count is 2, should be 1.  Fix? no

Unattached zero-length inode 1449.  Clear? no

Unattached inode 1449
Connect to /lost+found? no

Inode 1450 ref count is 2, should be 1.  Fix? no

Unattached zero-length inode 1451.  Clear? no

Unattached inode 1451
Connect to /lost+found? no

Unattached zero-length inode 1452.  Clear? no

Unattached inode 1452
Connect to /lost+found? no

Unattached zero-length inode 1453.  Clear? no

Unattached inode 1453
Connect to /lost+found? no

Unattached zero-length inode 1454.  Clear? no

Unattached inode 1454
Connect to /lost+found? no

Unattached zero-length inode 1455.  Clear? no

Unattached inode 1455
Connect to /lost+found? no

Unattached zero-length inode 1456.  Clear? no

Unattached inode 1456
Connect to /lost+found? no

Unattached zero-length inode 1457.  Clear? no

Unattached inode 1457
Connect to /lost+found? no

Unattached zero-length inode 1458.  Clear? no

Unattached inode 1458
Connect to /lost+found? no

Unattached zero-length inode 1459.  Clear? no

Unattached inode 1459
Connect to /lost+found? no

Unattached zero-length inode 1460.  Clear? no

Unattached inode 1460
Connect to /lost+found? no

Unattached zero-length inode 1461.  Clear? no

Unattached inode 1461
Connect to /lost+found? no

Unattached zero-length inode 1462.  Clear? no

Unattached inode 1462
Connect to /lost+found? no

Unattached zero-length inode 1463.  Clear? no

Unattached inode 1463
Connect to /lost+found? no

Unattached zero-length inode 1464.  Clear? no

Unattached inode 1464
Connect to /lost+found? no

Unattached zero-length inode 1465.  Clear? no

Unattached inode 1465
Connect to /lost+found? no

Unattached zero-length inode 1466.  Clear? no

Unattached inode 1466
Connect to /lost+found? no

Unattached zero-length inode 1467.  Clear? no

Unattached inode 1467
Connect to /lost+found? no

Unattached zero-length inode 1468.  Clear? no

Unattached inode 1468
Connect to /lost+found? no

Unattached zero-length inode 1469.  Clear? no

Unattached inode 1469
Connect to /lost+found? no

Unattached zero-length inode 1470.  Clear? no

Unattached inode 1470
Connect to /lost+found? no

Unattached zero-length inode 1471.  Clear? no

Unattached inode 1471
Connect to /lost+found? no

Inode 1472 ref count is 2, should be 1.  Fix? no

Inode 1499 ref count is 2, should be 1.  Fix? no

Inode 1500 ref count is 2, should be 1.  Fix? no

Inode 1553 ref count is 2, should be 1.  Fix? no

Inode 1554 ref count is 2, should be 1.  Fix? no

Unattached zero-length inode 1609.  Clear? no

Unattached inode 1609
Connect to /lost+found? no

Inode 1610 ref count is 2, should be 1.  Fix? no

Inode 1614 ref count is 2, should be 1.  Fix? no

Inode 1621 ref count is 2, should be 1.  Fix? no

Inode 65572 ref count is 9, should be 8.  Fix? no

Pass 5: Checking group summary information
Block bitmap differences:  +(4361--4368) +(4376--4394) +(4396--4402) +(4406--4414) +(4419--4425) +(4609--4632) +(4657--4658) +(4669--4672) -(68504--68514) -(68545--68560) -(71625--71647) -(71661--71680) -(397321--397324) -(413522--413590)
Fix? no

Free blocks count wrong for group #1 (6435, counted=0).
Fix? no

Free blocks count wrong for group #2 (8192, counted=0).
Fix? no

Free blocks count wrong for group #3 (7933, counted=0).
Fix? no

Free blocks count wrong for group #4 (8192, counted=0).
Fix? no

Free blocks count wrong for group #5 (7933, counted=0).
Fix? no

Free blocks count wrong for group #6 (8192, counted=0).
Fix? no

Free blocks count wrong for group #7 (7933, counted=0).
Fix? no

Free blocks count wrong for group #8 (8192, counted=3007).
Fix? no

Free blocks count wrong for group #50 (460, counted=107).
Fix? no

Free blocks count wrong for group #51 (6686, counted=5471).
Fix? no

Free blocks count wrong (346495, counted=346694).
Fix? no

Inode bitmap differences:  +(194--424) +(449--480) +(505--672) +(681--784) +(801--832) +(865--872) +(937--944) +(953--968) +(993--1000) +(1009--1024) +(1041--1048) +(1057--1096) +(1105--1152) +(1161--1208) +(1217--1320) +(1329--1384) +(1393--1424) +(1449--1544) +(1553--1560) +(1585--1600) +(1609--1624) +(1633--1640) +(1649--1664) +(1681--1688) +(1705--1720) -(99305--99310)
Fix? no

Directories count wrong for group #48 (252, counted=248).
Fix? no

Free inodes count wrong (119307, counted=122509).
Fix? no


rootfs: ********** WARNING: Filesystem still has errors **********

rootfs: 8709/128016 files (0.1% non-contiguous), 165505/512000 blocks

dmesg 中的错误

# [177307.226736] EXT4-fs error (device mmcblk0p15): ext4_journal_check_start:56: Detected aborted journal
[177307.236546] EXT4-fs (mmcblk0p15): Remounting filesystem read-only
# [177308.804317] EXT4-fs error (device mmcblk0p15): ext4_put_super:772: Couldn't clean up the journal

【问题讨论】:

    标签: linux-kernel filesystems embedded-linux ext4


    【解决方案1】:

    为了回答新的、修改后的问题,这里有一个示例,说明如何创建一个带有 e2fsck 可以修复的损坏的文件系统:

    <tytso@closure> {/u1/xfstests-bld/build-64}   (master)
    521% debugfs -w /tmp/foo.img
    debugfs 1.43.1 (08-Jun-2016)
    debugfs:  write /dev/null file-to-clri
    Allocated inode: 12
    debugfs:  clri file-to-clri
    debugfs:  q
    <tytso@closure> {/u1/xfstests-bld/build-64}   (master)
    522% sudo mount /tmp/foo.img /mnt
    <tytso@closure> {/u1/xfstests-bld/build-64}   (master)
    523% ls -sF /mnt
    /bin/ls: cannot access '/mnt/file-to-clri': Structure needs cleaning
    total 12
     ? file-to-clri  12 lost+found/
    <tytso@closure> {/u1/xfstests-bld/build-64}   (master)
    524% dmesg | tail -3
    [35156.062886] EXT4-fs (loop0): mounting ext2 file system using the ext4 subsystem
    [35156.065760] EXT4-fs (loop0): mounted filesystem without journal. Opts: (null)
    [35161.963603] EXT4-fs error (device loop0): ext4_lookup:1608: inode #2: comm ls: deleted inode referenced: 12
    <tytso@closure> {/u1/xfstests-bld/build-64}   (master)
    525% sudo umount /mnt
    <tytso@closure> {/u1/xfstests-bld/build-64}   (master)
    526% e2fsck -y /tmp/foo.img
    e2fsck 1.43.1 (08-Jun-2016)
    /tmp/foo.img contains a file system with errors, check forced.
    Pass 1: Checking inodes, blocks, and sizes
    Pass 2: Checking directory structure
    Entry 'file-to-clri' in / (2) has deleted/unused inode 12.  Clear? yes
    
    Pass 3: Checking directory connectivity
    Pass 4: Checking reference counts
    Pass 5: Checking group summary information
    Inode bitmap differences:  -12
    Fix? yes
    
    Free inodes count wrong for group #0 (4, counted=5).
    Fix? yes
    
    Free inodes count wrong (4, counted=5).
    Fix? yes
    
    
    /tmp/foo.img: ***** FILE SYSTEM WAS MODIFIED *****
    /tmp/foo.img: 11/16 files (0.0% non-contiguous), 21/100 blocks
    

    【讨论】:

    • 我错过的另一件事是,如果 e2fsck 需要更多时间(试图纠正错误),我是否需要考虑超时或 e2fsck 处理超时?你对超时有什么建议吗?如何测试 e2fsck 的最坏可能超时。我们有 500MB 的 ext4 分区要检查文件系统错误。
    • 我真的认为你的做法是错误的。对您而言,首先了解文件系统损坏的原因要重要得多。如果是因为您的供应链人员正在选择糟糕的闪存设备,那么请告诉他们购买一些优质产品。毕竟,如果 e2fsck 超时,您会怎么做?告诉客户将盒子寄回以进行保修更换?如果文件系统由于糟糕的硬件而损坏,事情可能会变得如此损坏,e2fsck 甚至根本无法运行,然后你会怎么做?
    • 我知道你指的是什么。即使我们打算找到根本原因。它始于this 中提到的错误,我们可能不会一直有这种情况并且更改/proc/sys/vm/min_free_kbytes 并没有解决问题。所以我们需要找到根本原因,在上面的帖子中,Nelson 先生说它看起来是 mmc 驱动程序问题,因为它在 3.12 内核中不稳定。但是我们不能在项目的这个阶段进行内核化,在下一阶段我们也许可以。我们想找到根本原因,但我们需要权宜之计。
    • 在调试时我发现了另一种情况(在上面的帖子中提到),我们最终得到了只读分区。因此,至少要在下次我们使用e2fsck 运行脚本时从上述情况中恢复过来。审查期间的一个问题是e2fsck 可能花费的最坏情况时间(在上面帖子中提到的脚本 sn-p 中)。如果e2fsck 无法在 X 秒/分钟内纠正错误,我们打算在我们的脚本中出错。
    • 我们可以通过e2fsck -p 命令模拟无法纠正的错误吗?
    【解决方案2】:

    模拟中止日志的最简单方法是使用挂载选项errors=remount-ro 挂载文件系统,然后使用/sys/fs//trigger_fs_error 触发模拟文件系统错误。例如:

    % kvm-xfstests shell
    ...
    Debian GNU/Linux 8 kvm-xfstests ttyS0
    
    kvm-xfstests login: root (automatic login)
    
    Last login: Wed Jul 27 09:45:36 EDT 2016 on ttyS2
    Linux kvm-xfstests 4.7.0-rc1-00021-g5431928 #647 SMP Fri Jul 15 00:09:57 EDT 2016 i686
    
    The programs included with the Debian GNU/Linux system are free software;
    the exact distribution terms for each program are described in the
    individual files in /usr/share/doc/*/copyright.
    
    Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
    permitted by applicable law.
    root@kvm-xfstests:~# mke2fs -t ext4 -Fq /dev/vdc
    /dev/vdc contains a ext4 file system
        last mounted on Tue Jul 26 22:07:38 2016
    root@kvm-xfstests:~# dmesg -n 7
    root@kvm-xfstests:~# mount -o errors=remount-ro /dev/vdc /vdc
    [  212.945779] EXT4-fs (vdc): mounted filesystem with ordered data mode. Opts: errors=remount-ro
    root@kvm-xfstests:~# echo test error > /sys/fs/ext4/vdc/trigger_fs_error 
    [  218.987724] EXT4-fs error (device vdc): trigger_test_error:123: comm bash: test error
    [  218.993043] Aborting journal on device vdc-8.
    [  218.997476] EXT4-fs (vdc): Remounting filesystem read-only
    root@kvm-xfstests:~# umount /vdc
    [  312.335032] EXT4-fs error (device vdc): ext4_put_super:837: Couldn't clean up the journal
    root@kvm-xfstests:~# e2fsck -fy /dev/vdc
    e2fsck 1.43.1 (08-Jun-2016)
    /dev/vdc: recovering journal
    Pass 1: Checking inodes, blocks, and sizes
    Pass 2: Checking directory structure
    Pass 3: Checking directory connectivity
    Pass 4: Checking reference counts
    Pass 5: Checking group summary information
    /dev/vdc: 11/327680 files (0.0% non-contiguous), 58462/1310720 blocks
    root@kvm-xfstests:~# 
    

    有关 kvm-xfstests 的更多信息,请参阅:http://thunk.org/gce-xfstestshttps://github.com/tytso/xfstests-bld/blob/master/README.md

    【讨论】:

    • 这模拟了错误,但是我想知道如何捕捉这个错误?因为$? 仍然表明它的成功。
    • 基本上我想挂载分区rw 但是因为提到的错误它被挂载为ro 并且它没有给出错误并且我的脚本继续处理其他内容并最终失败。我想在高级中检测错误然后退出或尝试e2fsck。我认为的一种方法是在挂载后尝试写入/触摸文件以测试其是否为rw,但我不确定是否有更好的方法。
    • 我认为另一种方法是使用 e2fsck -n /dev/mmcblk0p15 检查错误,但想知道为什么 mount 不返回错误?
    • e2fsck -n /dev/mmcblk0p15 在您建议的模拟文件系统错误时不返回错误:( 有什么建议吗?
    • e2fsck -n 不会返回错误,因为我们实际上并没有损坏文件系统。你问如何模拟一个流产的日志。我给你的命令序列做到了。现在您似乎在问一个不同的问题,即如何模拟损坏的文件系统。 (请注意,在现实生活中,您可能会因内存不足或数据 xfer 中的打嗝而导致内核检测到 fs 错误,并且在您重新启动后 e2fsck 没有发现任何问题。)您可能希望更明确地说明您的身份尝试测试,以及为什么。
    【解决方案3】:

    这不是这个问题的答案,而是添加更多信息

    1) 这些步骤展示了如何模拟无法通过fsck -p 命令纠正的文件系统错误。

        #Create a test directory and a testfile
        mkdir /mnt/mntpt/testdir
    
        #create a test file
        echo "This is just a Test file" > "/mnt/mntpt/testfile"
    
        #Create a hard link
        ln "/mnt/mntpt/testfile" "/mnt/mntpt/testdir/hardlink"
    
        #Crea a soft link
        ln -sf "/mnt/mntpt/testfile" "/mnt/mntpt/testdir/softlink"
    
        #Now Run debugfs command to get inode number of the directory
        test_dir_inode="$(debugfs -R "ls -l" -c "/dev/mmcblk0p16" 2> /dev/null | grep "testdir" | awk '{print $1}')"
    
        #clear test directory inode
        debugfs -R "clri <${test_dir_inode}>" -w "/dev/mmcblk0p16"
    
        #umount partition
        umount "/mnt/mntpt"
    
        #mount partition
        mount /dev/mmcblk0p16 /mnt/mntpt
    
        #List the test directory as that will generate the file system error.
        ls -sF "${test_dir_path}"
    
        #unmount partition
        umount "/mnt/mntpt"
    
        #This error won't possible to correct using fsck -p command 
        fsck -p /dev/mmcblk0p16 
    
    It will display below error
    
    fsck from util-linux 2.21.2
    firmware contains a file system with errors, check forced.
    firmware: Entry 'testdir' in / (2) has deleted/unused inode 43.  CLEARED.
    firmware: Inode 2 ref count is 4, should be 3.  FIXED.
    firmware: Inode 20 ref count is 2, should be 1.  FIXED.
    firmware: Unattached inode 24
    
    
    firmware: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
            (i.e., without -a or -p options)
    
    
        #that error will be corrected by using fsck -y command as mentioned below
        fsck -y /dev/mmcblk0p16
    

    2) 我正在寻找fsck -p 命令将纠正错误但需要重新启动才能完成恢复的模拟错误。我认为只有在被测分区以只读方式挂载时才会发生这种情况,我会在获得更多信息后立即检查并更新详细信息

    好的,似乎“需要重新启动才能完成恢复错误,即对于命令 fsck -p 的消息将打印为 ***** REBOOT LINUX *****”仅适用于当前的根文件系统分区。 如果当前根文件系统分区已挂载ro fsck 可以纠正文件系统错误,但需要重新启动。对于其他分区,情况并非如此。[这是我通过测试和阅读 e2fsckpro 代码得到的全部信息。]

    现在我是
    3) 寻找fsck -y 也无法纠正错误的错误再现。 (我会在这里更新详细信息,一旦我知道了)。

    这是更新

    显然此操作具有破坏性,您将丢失所有数据。

    easiest way to create error which can't be corrected by `fsck -y` is as follows,  
    dd if=/dev/urandom of=<partition for which error to be simulated> bs=<block size> count=<Partition size / block size>
    

    所以例如如果我在 50MB 大小的 /dev/mmcblk0p16 分区上执行测试,命令如下,

    dd if=/dev/urandom of=/dev/mmcblk0p16 bs=1M count=50
    
    
    To recover that partition we can use below command
    
    mkfs.ext4 -j -L <Partition name> /dev/mmcblk0pN so sample command would be as follows,
    
    mkfs.ext4 -j -L testpartition /dev/mmcblk0pN.
    

    【讨论】:

    • @Theodore Ts'o : 我做了一些功课 :) 你对此有什么建议/更正吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多