在引导时对根文件系统强制进行 fsck(在挂载文件系统之前,无单用户模式)

在引导时对根文件系统强制进行 fsck(在挂载文件系统之前,无单用户模式)

如何在“systemd”崩溃后自动强制 fsck 磁盘?- 没有任何意义。

设置fsck_y_enable="YES"background_fsck="NO"in/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

如果您需要在启动过程的早期运行命令(仍处于单用户模式),请将它们添加到 shell 脚本中/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/root为 run 来实现此目的/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"

相关内容