Erzwingen Sie fsck beim Booten im Root-Dateisystem (vor dem Mounten von Dateisystemen ohne Einzelbenutzermodus)

7

Wie erzwinge ich automatisch fsck-Festplatten nach einem Absturz in `systemd`? - hat nichts zu bedeuten.

Einstellung fsck_y_enable="YES"und background_fsck="NO"in /etc/rc.confsie nichts tun.

Mein Root-Dateisystem ist nicht sauber und weist viele Fehler auf (aufgrund eines Stromausfalls - unerwartetes Herunterfahren, nicht weil Festplatte oder Hardware fehlerhaft sind).

fsck zeigt Fehler:

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

[über 100 Zeilen übersprungen]

Ich habe keinen physischen oder KVM-Zugriff auf den Server. Dies ist ein gmirrorLaufwerk

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
Alex G.
quelle
Hm, was ist dein fstab? Ich habe gehört, dass das Erstellen einer (vermutlich leeren) forcefsckDatei in /(root) möglicherweise funktioniert. Könnte es versuchen.
Seth
1
touch /forcefsckhabe es nicht getan.
Alex G
Verwenden Sie "initramfs"?
SHW

Antworten:

2

FreeBSD hat ordnungsgemäß funktionierendes erzwungenes Aufheben der Bereitstellung, sodass Sie dies beim Booten nicht wirklich tun müssen. Melden Sie sich einfach (remote) an, stellen Sie rootfs erneut als schreibgeschützt bereit ( mount -fur /), führen Sie fsck manuell durch ( fsck -y /) und starten Sie den Computer neu.

Edward Tomasz Napierala
quelle
1

Wenn Sie einen Befehl benötigen, der zu Beginn des Startvorgangs ausgeführt werden soll (noch im Einzelbenutzermodus), fügen Sie ihn dem Shell-Skript hinzu /etc/rc.early

Etwas wie das fsck -fy /Hinzufügen zu dieser Datei zwingt sie, einen Scan durchzuführen und alle Eingabeaufforderungen mit "Ja" zu beantworten.

Vergessen Sie nicht, es zu entfernen, rc.earlywenn Sie fertig sind, sonst wird es bei jedem Start ausgeführt

Allan Jude
quelle
1
Die Unterstützung für /etc/rc.early ist jetzt veraltet
Alex G
0

Ab FreeBSD 10.3 können Sie dies erreichen, indem Sie vorübergehend die /etc/rc.d/rootAusführung ändern /sbin/fsck -fy /.

Hier ist das aktuelle Skript, das so geändert wurde, dass es den auskommentierten Befehl enthält. Kommentar zur Durchführung des 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"
Antiduh
quelle
Das ist ein bisschen hacky, aber es funktioniert. Aber es sollte sein/sbin/fsck -fy /
Jimmy Koerting