web-dev-qa-db-ja.com

ルートファイルシステムで起動時に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
7
Alex G

FreeBSDは強制アンマウントを適切に機能しているので、起動時にこれを行う必要はありません。 (リモートで)ログインして、rootfsを読み取り専用として再マウントします(mount -fur /)、手動でfsckを実行します(fsck -y /)次に、マシンを再起動します。

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

そのファイルにfsck -fy /のようなものを追加すると、スキャンが強制され、すべてのプロンプトに「はい」と答えます。

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

1
Allan Jude

FreeBSD 10.3以降、これは/etc/rc.d/rootを一時的に変更して/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"
0
antiduh