Linux ext3 error

HDDのエラーが発生したときにext3領域がReadOnlyになってしまう件。
以前から何度か経験してたけど、tune2fsの出力を見るとエラー時の動作は
デフォルトでContinueになっている模様。

Errors behavior:          Continue

てっきり毎回ReadOnlyで再マウントされてたので、この点がremount-roになってる
のかと思っていた。が、そうなってなかったので調べてみた。


ReadOnlyで再マウントする処理は以下の二箇所(2.6.9カーネルより抜粋)

@fs/ext3/super.c:ext3_abort
        if (test_opt(sb, ERRORS_PANIC))
                panic("EXT3-fs panic from previous error\n");

        if (sb->s_flags & MS_RDONLY)
                return;

        printk(KERN_CRIT "Remounting filesystem read-only\n");
        EXT3_SB(sb)->s_mount_state |= EXT3_ERROR_FS;
        sb->s_flags |= MS_RDONLY;

@fs/ext3/super.c:ext3_handle_error
        if (test_opt (sb, ERRORS_PANIC))
                panic ("EXT3-fs (device %s): panic forced after error\n",
                       sb->s_id);
        if (test_opt (sb, ERRORS_RO)) {
                printk (KERN_CRIT "Remounting filesystem read-only\n");
                sb->s_flags |= MS_RDONLY;
        } else {

それぞれ呼ばれる場所が異なっており、journal書き込みでエラーになった場合は
ext3_abortの方が呼ばれ、こちらはPanicかReadOnlyの二択しか選択されない。
なので、SuperBlockにあるデフォルトの設定がContinueでも効かない。


変更方法は以下の何れか

  • tune2fsで書き換え (unmount時)
  • fstabにオプションerrors=で指定

なお、remountで変更できるのでマウントしたまま変更も可能。


ReadOnlyになっても動き続けて欲しいか、潔くPanicして欲しいかは用途次第。
エラー無視して続行するContinueはデータ保護の観点からするとまあ無いんだろうな。