ฉันจะทำให้ fsck ทำงานแบบไม่โต้ตอบในเวลาบูตได้อย่างไร


19

ฉันมีเซิร์ฟเวอร์ Ubuntu 12.04 ที่ไม่มีหัวในศูนย์ข้อมูล 1500 ไมล์ ตอนนี้สองครั้งในการรีบูตระบบตัดสินใจว่าจะต้อง fsck น่าเสียดายที่ Ubuntu วิ่ง fsck ในโหมดอินเทอร์แอคทีฟดังนั้นฉันจึงต้องถามใครสักคนที่ศูนย์ข้อมูลของฉันให้ไปต่อเชื่อมคอนโซลและกดปุ่ม Y ฉันจะตั้งค่าอย่างไรเพื่อให้ fsck ทำงานในโหมดที่ไม่ต้องมีการโต้ตอบในขณะบู๊ตด้วยแฟล็ก-yหรือ-p(aka -a)

หากฉันเข้าใจขั้นตอนการบู๊ตของ Ubuntu อย่างถูกต้อง init จะเรียกใช้mountallซึ่งจะเรียกใช้ fsck อย่างไรก็ตามฉันไม่เห็นวิธีการกำหนดค่าวิธีเรียกใช้ fsck เป็นไปได้ไหม

(หากต้องการนำข้อเสนอแนะหนึ่งข้อออกไปฉันทราบว่าฉันสามารถใช้tune2fs -i 0 -c 0เพื่อป้องกัน fsck เป็นระยะ ๆ ซึ่งอาจช่วยได้เล็กน้อย แต่ฉันต้องการให้ระบบพยายามกลับมาใหม่แม้ว่าจะมีเหตุผลที่แท้จริงในการ fsck พูดหลังจากไฟดับ .)

เพื่อตอบคำถามติดตามผลนี่คือรายละเอียดที่เกี่ยวข้องของ / etc / fstab ของฉัน ฉันไม่เชื่อว่าฉันจะแก้ไขสิ่งนี้จากสิ่งที่ Ubuntu วางไว้

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/rcSนั้นไม่ถูกต้องในปี 2019 ขณะนี้ Ubuntu 16 และ Ubuntu 18 ใช้ systemd อยู่ ฉันไม่ทราบเรื่องราวทั้งหมดของ systemd แต่fsck.repairตัวเลือกการกำหนดค่า / เคอร์เนลบรรทัดคำสั่งดูเหมือนจะเกี่ยวข้อง เอกสารในปัจจุบันบอกว่าเริ่มต้นของมันคือซึ่งหมายความว่าpreen -pนอกจากนี้ยังสามารถกำหนดให้สำหรับyes อาจเป็นสถานที่ตั้งนี้ ฉันจะขอบคุณถ้าใครมีความรู้มากกว่านี้จะให้คำตอบ systemd ที่ทันสมัย -y/etc/default/grub
เนลสัน

คำตอบ:


29

การตั้งค่าฉันกำลังมองหาอยู่ใน/ etc / default / rcSFSCKFIX=yes , ซึ่งหมายความว่า "ซ่อมแซมระบบไฟล์โดยอัตโนมัติด้วยความไม่สอดคล้องระหว่างการบูต" และทำให้ fsck ทำงานด้วยการ-yตั้งค่าสถานะ มันถูกตั้งค่าเป็นnoทั้งในระบบ Ubuntu ของฉัน

แม้เมื่อตั้งค่าnoเป็นเวลาบู๊ต fsck ยังค่อนข้างไม่โต้ตอบ mountall รัน fsck ด้วย-aซึ่งเป็นคำพ้องความหมาย-pซึ่งหมายถึง "แก้ไขปัญหาระบบไฟล์โดยอัตโนมัติซึ่งสามารถแก้ไขได้อย่างปลอดภัย เห็นได้ชัดว่า-pเข้าสู่โหมดโต้ตอบหากมีการแก้ไขที่ไม่ปลอดภัย เพื่อให้ทำงานได้อย่างเต็มที่โดยอัตโนมัติคุณต้องหรือ-yFSCKFIX=yes

นี่คือรหัสบิตที่เกี่ยวข้องจาก 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"));
}

สำหรับระบบปฏิบัติการล่าสุดที่มี systemd สามารถทำได้เหมือนกันโดยการเพิ่มfsck.repair=yesในพารามิเตอร์GRUB_CMDLINE_LINUX_DEFAULTใน/etc/default/grub
Maxxer

2

สำหรับ Ubuntu 15,16,17+ การตั้งค่า FSCKFIX จะอยู่ใน lib / init / vars.sh

สามารถใช้คำสั่งgrep -r FSCKFIX * 2>/dev/nullเพื่อครีบได้


1
ขอบคุณ! ฉันไม่ดี /etc/default/rcSแต่ความคิดเห็นในแฟ้มนั้นขอแนะนำให้คุณยังคงควรกำหนดค่าการตั้งค่าใน /lib/init/vars.shมีค่าเริ่มต้นสำหรับFSCKFIXแต่แล้วแหล่ง/etc/default/rcSที่สามารถแทนที่ได้ OTOH ระบบ Ubuntu 18 ที่เพิ่งติดตั้งใหม่ไม่มีrcSไฟล์เลย
เนลสัน

1

ตรวจสอบให้แน่ใจว่าคุณไม่มีการตั้งค่าสถานะใด ๆ ที่อาจทำให้เกิดปัญหานี้ใน fstab และตรวจสอบสคริปต์เริ่มต้นของคุณ (ลอง grep'ing scrips เริ่มต้นของคุณสำหรับ 'fsck' เพื่อค้นหาตำแหน่งที่ใช้) ระบบของฉันรัน fsck แบบไม่โต้ตอบดังนั้นนี่คือสำเนาของ fstab ของฉันและเป็นส่วนหนึ่งของสคริปต์ / etc / init / mountall ของคุณเพื่อเปรียบเทียบ

$ 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

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
ขอบคุณสำหรับความช่วยเหลือ คุณช่วยบอกสิ่งที่ฉันgrep FSCKFIX /etc/default/rcSพูดในระบบของคุณได้ไหม
Nelson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.