Làm cách nào để làm cho fsck chạy không tương tác khi khởi động?


19

Tôi có một không đầu Ubuntu 12.04 máy chủ trong một trung tâm dữ liệu 1500 dặm. Hai lần bây giờ khi khởi động lại hệ thống đã quyết định nó phải fsck. Thật không may, Ubuntu chạy fsck ở chế độ tương tác, vì vậy tôi đã phải nhờ ai đó ở trung tâm dữ liệu của mình đi qua, cắm vào bàn điều khiển và nhấn phím Y. Làm cách nào để thiết lập nó để fsck chạy ở chế độ không tương tác khi khởi động với cờ -yhoặc -p(aka -a)?

Nếu tôi hiểu chính xác quá trình khởi động của Ubuntu, init sẽ gọi mountall mà lần lượt gọi fsck. Tuy nhiên tôi không thấy bất kỳ cách nào để định cấu hình cách fsck được gọi. Điều này có thể không?

(Để đưa ra một gợi ý; Tôi biết rằng tôi có thể sử dụng tune2fs -i 0 -c 0để ngăn chặn các fscks định kỳ. Điều đó có thể giúp một chút nhưng tôi cần hệ thống cố gắng sao lưu ngay cả khi có lý do thực sự để fsck, nói sau khi mất điện .)

Để trả lời các câu hỏi tiếp theo, đây là chi tiết thích hợp của / etc / fstab của tôi. Tôi không tin rằng tôi đã chỉnh sửa điều này từ những gì Ubuntu đặt ở đó.

UUID=3515461e-d425-4525-a07d-da986d2d7e04 /               ext4    errors=remount-ro 0       1
UUID=90908358-b147-42e2-8235-38c8119f15a6 /boot           ext4    defaults        0       2
UUID=01f67147-9117-4229-9b98-e97fa526bfc0 none            swap    sw              0       0

1
Câu hỏi này và câu trả lời liên quan đến /etc/default/rcSnó không thực sự hợp lệ vào năm 2019, với Ubuntu 16 và Ubuntu 18 hiện đang sử dụng systemd. Tôi không biết toàn bộ câu chuyện cho systemd nhưng fsck.repairtùy chọn dòng lệnh cấu hình / kernel có vẻ phù hợp. Các tài liệu hiện đang nói mặc định của nó là preen, có nghĩa là -p. Nó cũng có thể được đặt thành yescho -y. /etc/default/grubcó thể là nơi để thiết lập điều này. Tôi sẽ biết ơn nếu ai đó hiểu biết hơn sẽ cung cấp một câu trả lời hệ thống hiện đại.
Nelson

Câu trả lời:


29

Cài đặt tôi đang tìm kiếm là trong / etc / default / rcS , FSCKFIX=yes. Điều này có nghĩa là "tự động sửa chữa các hệ thống tập tin có sự không nhất quán trong khi khởi động" và khiến fsck chạy với -ycờ. Nó được đặt thành notrong cả hai hệ thống Ubuntu của tôi.

Ngay cả khi được đặt thành no, thời gian khởi động fsck vẫn hơi không tương tác. mountall chạy fsck với -a, một từ đồng nghĩa với -p, có nghĩa là "tự động khắc phục mọi sự cố hệ thống tệp có thể được khắc phục một cách an toàn mà không cần sự can thiệp của con người". Rõ ràng -pgiảm xuống chế độ tương tác nếu có các sửa lỗi không an toàn được thực hiện. Để chạy hoàn toàn tự động, bạn cần -yhoặc FSCKFIX=yes.

Đây là bit mã có liên quan từ mountall.c

if (fsck_fix || mnt->fsck_fix) {
  NIH_MUST (nih_str_array_add (&args, NULL, &args_len, "-y"));
} else {
  NIH_MUST (nih_str_array_add (&args, NULL, &args_len, "-a"));
}

Đối với các hệ điều hành gần đây với systemd, điều tương tự có thể đạt được bằng cách thêm fsck.repair=yesvào param GRUB_CMDLINE_LINUX_DEFAULTtrong/etc/default/grub
Maxxer

2

Đối với Ubuntu 15,16,17+, cài đặt giá trị FSCKFIX nằm ở lib / init / vars.sh

Có thể sử dụng lệnh grep -r FSCKFIX * 2>/dev/nullđể vây nó.


1
Cảm ơn! Tôi không tích cực nhưng các nhận xét trong tệp đó cho thấy bạn vẫn nên định cấu hình cài đặt /etc/default/rcS. /lib/init/vars.shcó một mặc định cho FSCKFIXnhưng sau đó các nguồn /etc/default/rcScó thể ghi đè lên nó. OTOH một hệ thống Ubuntu 18 mới được cài đặt hoàn toàn không có rcStệp.
Nelson

1

Hãy chắc chắn rằng bạn không có bất kỳ cờ nào có thể gây ra điều này trong fstab và kiểm tra tập lệnh init của bạn. .

$ cat /etc/fstab
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    nodev,noexec,nosuid 0       0
UUID=acbe3514-33a3-4170-b1be-df7b8460a49a /               ext4    errors=remount-ro 0       1
UUID=d361f696-7abc-11e1-9043-5711de71ade6 /home           ext4    defaults        0       2
UUID=213e032c-fce9-4e1b-9d64-0779f0db4208 none            swap    sw              0       0

Đoạn trích từ / etc / init / mountall

script
    . /etc/default/rcS
    [ -f /forcefsck ] && force_fsck="--force-fsck"
    [ "$FSCKFIX" = "yes" ] && fsck_fix="--fsck-fix"

    # set $LANG so that messages appearing in plymouth are translated
    if [ -r /etc/default/locale ]; then
        . /etc/default/locale
        export LANG LANGUAGE LC_MESSAGES LC_ALL
    fi

    exec mountall --daemon $force_fsck $fsck_fix
end script

1
Cảm ơn đã giúp đỡ. Bạn có thể vui lòng cho tôi biết những gì grep FSCKFIX /etc/default/rcSnói trên hệ thống của bạn?
Nelson
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.