Bagaimana saya bisa membuat fsck berjalan non-interaktif saat boot?

19

Saya memiliki server Ubuntu 12,04 tanpa kepala di pusat data 1500 mil jauhnya. Dua kali sekarang saat reboot sistem memutuskan untuk fsck. Sayangnya Ubuntu menjalankan fsck dalam mode interaktif, jadi saya harus meminta seseorang di pusat data saya untuk pergi, tancapkan konsol, dan tekan tombol Y. Bagaimana cara mengaturnya agar fsck berjalan dalam mode non-interaktif saat boot dengan flag -yatau -p(alias -a)?

Jika saya mengerti proses boot Ubuntu dengan benar, init memanggil mountall yang pada gilirannya memanggil fsck. Namun saya tidak melihat cara untuk mengkonfigurasi bagaimana fsck dipanggil. Apakah ini mungkin?

(Untuk menghindari satu saran; Saya sadar saya dapat menggunakan tune2fs -i 0 -c 0untuk mencegah fsck berkala. Itu mungkin sedikit membantu tetapi saya membutuhkan sistem untuk mencoba bangkit kembali bahkan jika itu memiliki alasan nyata untuk fsck, katakan setelah kegagalan daya .)

Menanggapi pertanyaan tindak lanjut, inilah detail terkait dari / etc / fstab saya. Saya tidak percaya saya sudah mengedit ini sama sekali dari apa yang dimasukkan Ubuntu di sana.

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
Nelson
sumber
1
Pertanyaan ini dan jawabannya melibatkan /etc/default/rcStidak benar-benar valid pada tahun 2019, dengan Ubuntu 16 dan Ubuntu 18 sekarang menggunakan systemd. Saya tidak tahu cerita lengkap untuk systemd tetapi opsi fsck.repairkonfigurasi / kernel command line sepertinya relevan. Dokumen saat ini mengatakan standarnya adalah preen, yang berarti -p. Ini juga dapat diatur yesuntuk -y. /etc/default/grubmungkin tempat untuk mengatur ini. Saya akan berterima kasih jika seseorang yang lebih berpengetahuan akan memberikan jawaban systemd modern.
Nelson

Jawaban:

29

Pengaturan saya cari adalah di / etc / default / RCS , FSCKFIX=yes. Ini berarti "secara otomatis memperbaiki sistem file dengan ketidakkonsistenan saat boot" dan menyebabkan fsck berjalan dengan -yflag. Itu diatur ke nodalam kedua sistem Ubuntu saya.

Bahkan ketika diatur ke no, fsck waktu boot masih agak tidak aktif. mountall menjalankan fsck with -a, sebuah sinonim untuk -p, yang berarti "secara otomatis memperbaiki masalah sistem file yang dapat diperbaiki dengan aman tanpa campur tangan manusia". Tampaknya -pturun ke mode interaktif jika ada perbaikan yang tidak aman untuk dilakukan. Untuk menjalankan sepenuhnya secara otomatis, Anda perlu -yatau FSCKFIX=yes.

Inilah sedikit kode yang relevan dari 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"));
}
Nelson
sumber
Untuk OS terbaru dengan systemd, hal yang sama dapat dicapai dengan menambahkan fsck.repair=yesparam GRUB_CMDLINE_LINUX_DEFAULTdi/etc/default/grub
Maxxer
2

Untuk Ubuntu 15,16,17+ pengaturan nilai FSCKFIX terletak di lib / init / vars.sh

Dapat menggunakan perintah grep -r FSCKFIX * 2>/dev/nulluntuk sirip itu.

setec
sumber
1
Terima kasih! Saya tidak positif tetapi komentar dalam file itu menyarankan Anda masih harus mengonfigurasi pengaturan /etc/default/rcS. /lib/init/vars.shmemiliki default untuk FSCKFIXtetapi kemudian sumber /etc/default/rcSyang dapat menimpanya. OTOH sistem Ubuntu 18 yang baru diinstal tidak memiliki rcSfile sama sekali.
Nelson
1

Pastikan Anda tidak memiliki flag yang mungkin menyebabkan hal ini di fstab, dan periksa skrip init Anda. (Coba ambil skrip init Anda untuk 'fsck' untuk menemukan di mana ia digunakan) Sistem saya menjalankan fsck non-interaktif, jadi di sini adalah salinan fstab saya dan bagian dari skrip saya / etc / init / mountall untuk Anda bandingkan

$ 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

Cuplikan dari / 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
Sepero
sumber
1
Terima kasih untuk bantuannya. Bisakah Anda memberi tahu saya apa yang grep FSCKFIX /etc/default/rcStertulis di sistem Anda?
Nelson