起動時にルートファイルシステムでfsckを強制する(ファイルシステムのマウント前、シングルユーザーモードなし)

起動時にルートファイルシステムでfsckを強制する(ファイルシステムのマウント前、シングルユーザーモードなし)

"systemd"クラッシュ後にfsckディスクを自動的に強制する方法は?-意味がない。

設定fsck_y_enable="YES"し、何もしbackground_fsck="NO"ません/etc/rc.conf

私のルートファイルシステムはきれいではなく、エラーがたくさんあります(ハードドライブやハードウェアの損傷ではなく、停電による予期しないシャットダウンのため)。

fsck表示エラー:

root@host2:/usr/home/alex # fsck
** /dev/mirror/gm0p2 (NO WRITE)
** Last Mounted on /
** Root file system
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
UNREF FILE I=8268305  OWNER=root MODE=140777
SIZE=0 MTIME=Jun  6 21:58 2014
CLEAR? no

[100行以上スキップ]

サーバーへの物理またはKVMアクセス権がありません。これがgmirroredドライブです

FreeBSD host2.domain.tld 9.2-RELEASE FreeBSD 9.2-RELEASE #0 r255898: Thu Sep 26 22:50:31 UTC 2013 [email protected]:/usr/obj/usr/src/sys/GENERIC  amd64

# Device                Mountpoint      FStype  Options Dump    Pass#
/dev/mirror/gm0p2       /               ufs     rw      1       1
/dev/mirror/gm0p3       none            swap    sw      0       0

答え1

FreeBSDには強制削除機能があるため、実際に起動時にこれを行う必要はありません。 (リモートで)ログインし、rootfsを読み取り専用で再マウントし(mount -fur /)、fsckを手動で(fsck -y /)、コンピュータを再起動します。

答え2

起動プロセスの最初に(まだシングルユーザーモードで)コマンドを実行する必要がある場合は、そのコマンドをシェルスクリプトに追加します。/etc/rc.early

このような内容をファイルに追加すると、強制fsck -fy /的に検索され、すべてのプロンプトに「はい」と答えます。

rc.early完了したら削除することを忘れないでください。それ以外の場合は、起動するたびに実行されます。

答え3

/etc/rc.initial.reboot次のコマンドを使用してnextboot実行をfsck5回再開します。

/sbin/nextboot -e "pfsense.fsck.force=5"

手動で実行するか、スクリプトに追加してfsck次の起動時にトリガーできます。

バージョン2.5.0でこれをテストしました。

答え4

FreeBSD 10.3以降、/etc/rc.d/rootrunを一時的に変更することでこれを行うことができます/sbin/fsck -fy /

これは、fsckを実行するためにコメントアウトされたコマンドを含むように変更された現在のスクリプトです。

#!/bin/sh
#
# $FreeBSD: stable/10/etc/rc.d/root 177062 2008-03-11 17:21:14Z delphij $
#

# PROVIDE: root
# REQUIRE: fsck
# KEYWORD: nojail

. /etc/rc.subr

name="root"
start_cmd="root_start"
stop_cmd=":"

root_start()
{
    # root normally must be read/write, but if this is a BOOTP NFS
    # diskless boot it does not have to be.
    #
    case ${root_rw_mount} in
    [Nn][Oo] | '')
        ;;
    *)

       # Uncomment the below line to run fsck on root during boot:
       #/sbin/fsck -fy /

        if ! mount -uw /; then
            echo 'Mounting root filesystem rw failed, startup aborted'
            stop_boot true
        fi
        ;;
    esac

    umount -a >/dev/null 2>&1

    # If we booted a special kernel remove the record
    # so we will boot the default kernel next time.
    if [ -x /sbin/nextboot ]; then
        /sbin/nextboot -D > /dev/null 2>&1
    fi
}

load_rc_config $name
run_rc_command "$1"

関連情報