Önyükleme zamanında fsck'i etkileşimli olmayan şekilde nasıl çalıştırabilirim?


19

1500 mil uzakta bir veri merkezinde başsız bir Ubuntu 12.04 sunucum var. Şimdi iki kez yeniden başlatma sistem fsck zorunda karar verdi. Ne yazık ki Ubuntu etkileşimli modda fsck'i çalıştırdı, bu yüzden veri merkezimden birinden geçmesini, bir konsolu takmasını ve Y tuşuna basmasını istedim. Fsck, önyükleme sırasında -yveya -p(aka -a) bayrağıyla etkileşimli olmayan modda çalışacak şekilde nasıl ayarlayabilirim ?

Ubuntu'nun önyükleme işlemini doğru anlarsam , init mountall'i çağırır, bu da fsck'i çağırır. Ancak fsck'in nasıl çağrıldığını yapılandırmanın bir yolunu göremiyorum. Mümkün mü?

(Bir öneriye kafa atmak için; tune2fs -i 0 -c 0periyodik fscks'ı önlemek için kullanabileceğimin farkındayım . Bu biraz yardımcı olabilir, ancak fsck için gerçek bir nedeni olsa bile, sistemin bir güç kesintisinden sonra geri gelmeye çalışmasına ihtiyacım var. .)

Takip sorularına yanıt olarak, / etc / fstab'ımın ilgili ayrıntıları. Ubuntu'nun oraya koyduğu şeyden bunu düzenlediğime inanmıyorum.

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
/etc/default/rcSUbuntu 16 ve Ubuntu 18 şimdi systemd kullanıyorken, bu soru ve cevapları 2019'da geçerli değil. Systemd için tam bir hikaye bilmiyorum ama fsck.repairyapılandırma / çekirdek komut satırı seçeneği ilgili görünüyor. Docs şu anda varsayılan olduğunu söylemek preenhangi araçları -p. Ayrıca ayarlanabilir yesiçin -y. /etc/default/grubbunu ayarlayabileceğiniz bir yer olabilir. Daha bilgili biri modern bir sistemd cevabı verirse minnettar olurum.
Nelson

Yanıtlar:


29

Aradığım ayar / etc / default / rcS , konumunda FSCKFIX=yes. Bu, "önyükleme sırasında tutarsızlıkları olan dosya sistemlerini otomatik olarak onar" anlamına gelir ve fsck'in -ybayrakla çalışmasına neden olur . Her noiki Ubuntu sistemimde de ayarlandı .

Olarak ayarlandığında bile no, fsck önyükleme süresi hala biraz etkileşimli değildir. mountall fsck ile -aeşanlamlı olarak çalışır -p. Görünüşe göre -pgüvenli olmayan düzeltmeler yapılırsa etkileşimli moda düşer. Tam otomatik olarak çalıştırmak için -yveya seçeneğine ihtiyacınız vardır FSCKFIX=yes.

Mountall.c'nin ilgili kod kısmı aşağıdadır

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"));
}

fsck.repair=yesGRUB_CMDLINE_LINUX_DEFAULT/etc/default/grub
Systemd

2

Ubuntu 15,16,17+ için FSCKFIX değer ayarı lib / init / vars.sh dizininde bulunur

Tamamlamak için komutu kullanabilir grep -r FSCKFIX * 2>/dev/null.


1
Teşekkürler! Olumlu değilim ama bu dosyadaki yorumlar hala ayarı yapılandırmanız gerektiğini gösteriyor /etc/default/rcS. /lib/init/vars.shiçin varsayılan, FSCKFIXancak /etc/default/rcSonu geçersiz kılabilen kaynaklar vardır. OTOH yeni kurulan bir Ubuntu 18 sisteminde hiç rcSdosya yoktu .
Nelson

1

Fstab içinde buna neden olabilecek herhangi bir işaretinizin olmadığından emin olun ve init komut dosyalarınızı kontrol edin. (Nerede kullanıldığını bulmak için init betiklerinizi 'fsck' için grep'ing'i deneyin) Sistemim fsck'i etkileşimli olmayan şekilde çalıştırıyor, bu yüzden burada fstab'ımın bir kopyası ve karşılaştırmanız için / etc / init / mountall betiğimin bir parçası

$ 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

/ Etc / init / mountall sitesinden snippet

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
Yardım için teşekkürler. Lütfen bana grep FSCKFIX /etc/default/rcSsisteminizde ne söylediğini söyler misiniz ?
Nelson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.