Buộc fsck tại thời điểm khởi động trên hệ thống tệp gốc (trước khi gắn hệ thống tệp, không có chế độ Người dùng đơn)


7

Làm cách nào để tự động buộc các đĩa fsck sau khi gặp sự cố trong `systemd`? - không có nghĩa gì cả.

Thiết fsck_y_enable="YES"background_fsck="NO"trong /etc/rc.confkhông làm gì cả.

Hệ thống tập tin gốc của tôi không sạch và có nhiều lỗi (do mất điện - tắt máy đột ngột, không phải do ổ cứng hoặc phần cứng bị hỏng).

fsck hiển thị lỗi:

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

[bỏ qua hơn 100 dòng]

Tôi không có quyền truy cập vật lý hoặc KVM vào máy chủ. Đây là gmirrorổ đĩa ed

FreeBSD host2.domain.tld 9.2-RELEASE FreeBSD 9.2-RELEASE #0 r255898: Thu Sep 26 22:50:31 UTC 2013 root@bake.isc.freebsd.org:/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

Hừm, bạn là fstabgì? Tôi nghe nói việc tạo một forcefscktệp (có lẽ trống) trong /(root) có thể hoạt động. Có thể cho nó một thử.
Seth

1
touch /forcefsckđã không làm điều đó.
Alex G

Bạn đang sử dụng "initramfs"?
SHW

Câu trả lời:


2

FreeBSD đã hoạt động đúng cách buộc phải ngắt kết nối, vì vậy bạn không thực sự cần phải làm điều này khi khởi động. Chỉ cần đăng nhập (từ xa), nhắc lại rootfs dưới dạng chỉ đọc ( mount -fur /), thực hiện fsck thủ công ( fsck -y /) và sau đó khởi động lại máy.


1

Nếu bạn cần một lệnh được chạy sớm trong quá trình khởi động (vẫn ở chế độ người dùng đơn), hãy thêm chúng vào tập lệnh shell /etc/rc.early

một cái gì đó như fsck -fy /được thêm vào tập tin đó sẽ buộc nó thực hiện quét và trả lời 'có' cho tất cả các lời nhắc.

Đừng quên xóa nó khỏi rc.earlykhi bạn hoàn thành, nếu không nó sẽ chạy trên mỗi lần khởi động


1
Hỗ trợ cho /etc/rc.early hiện không được chấp nhận
Alex G

0

Kể từ FreeBSD 10.3, bạn có thể đạt được điều này bằng cách tạm thời sửa đổi /etc/rc.d/rootđể chạy /sbin/fsck -fy /.

Đây là kịch bản hiện tại, được sửa đổi để bao gồm lệnh đó đã nhận xét; uncomment để thực hiện 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"

Đó là một chút hack, nhưng làm việc. Nhưng nó nên là/sbin/fsck -fy /
Jimmy Koerting
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.