GNU/Linux >> Belajar Linux >  >> Linux

Apa yang harus saya lakukan untuk memaksa pemeriksaan sistem file root (dan secara opsional perbaikan) saat boot?

ext4 pemeriksaan sistem file selama boot

Diuji di OS:Linux Mint 18.x di Mesin Virtual

Informasi dasar

/etc/fstab memiliki fsck pesan sebagai kolom terakhir (ke-6), misalnya:

<file system>    <mount point>    <type>    <options>    <dump>    <fsck>
UUID=2fbcf5e7-1234-abcd-88e8-a72d15580c99 / ext4 errors=remount-ro 0 1

FSCKFIX=yes variabel di /etc/default/rcS

Ini akan mengubah fsck menjadi perbaikan otomatis, tetapi tidak paksa pemeriksaan fsck.

Dari man rcS :

FSCKFIX
    When  the  root  and all other file systems are checked, fsck is
    invoked with the -a option which means "autorepair".   If  there
    are  major  inconsistencies then the fsck process will bail out.
    The system will print a  message  asking  the  administrator  to
    repair  the  file  system manually and will present a root shell
    prompt (actually a sulogin prompt) on the console.  Setting this
    option  to  yes  causes  the fsck commands to be run with the -y
    option instead of the -a option.  This will tell fsck always  to
    repair the file systems without asking for permission.

Dari man tune2fs

If you are using journaling on your filesystem, your filesystem
will never be marked dirty, so it will not normally be checked.

Mulai dengan

Mengatur yang berikut

FSCKFIX=yes

dalam file

/etc/default/rcS

Periksa dan perhatikan terakhir kali fs diperiksa:

sudo tune2fs -l /dev/sda1 | grep "Last checked"

Kedua opsi ini TIDAK berfungsi

  1. Meneruskan -F (paksa fsck saat reboot) argumen ke shutdown :

    shutdown -rF now
    

    Tidak; lihat:man shutdown .

  2. Menambahkan /forcefsck file kosong dengan:

    touch /forcefsck
    

    Skrip ini sepertinya menggunakan ini:

    /etc/init.d/checkfs.sh
    /etc/init.d/checkroot.sh
    

    melakukan TIDAK berfungsi saat reboot, tetapi file telah dihapus.

    Diverifikasi oleh:

    sudo tune2fs -l /dev/sda1 | grep "Last checked"
    sudo less /var/log/fsck/checkfs
    sudo less /var/log/fsck/checkroot
    

    Sepertinya ini adalah log untuk init skrip.

Saya ulangi, kedua opsi ini TIDAK berfungsi!

Kedua metode ini BERHASIL

  1. saklar boot kernel systemd-fsck

    Mengedit grub utama file konfigurasi:

    sudoedit /etc/default/grub
    
    GRUB_CMDLINE_LINUX="fsck.mode=force"
    
    sudo update-grub
    sudo reboot
    

    Ini memang melakukan pemeriksaan sistem file yang diverifikasi dengan:

    sudo tune2fs -l /dev/sda1 | grep "Last checked"
    

    Catatan:DID ini cek, tetapi untuk memaksakan perbaikan juga, Anda perlu menentukan fsck.repair="preen" , atau fsck.repair="yes" .

  2. Menggunakan tune2fs untuk mengatur jumlah pemasangan sistem file sebelum melakukan fsck , man tune2fs

    tune2fs' info is kept in the file system superblock
    

    -c switch menyetel berapa kali untuk memasang fs sebelum memeriksa fs.

    sudo tune2fs -c 1 /dev/sda1
    

    Verifikasi dengan:

    sudo tune2fs -l /dev/sda1
    

    MELAKUKAN ini berfungsi sebagaimana diverifikasi dengan:

    sudo tune2fs -l /dev/sda1 | grep "Last checked"
    

Ringkasan

Untuk memaksa fsck pada setiap boot di Linux Mint 18.x, gunakan tune2fs , atau fsck.mode=force , dengan fsck.repair=preen opsional / fsck.repair=yes , baris perintah kernel beralih.


Penyelidikan lebih lanjut dan pembaruan atas jawaban yang ada

Saya sekarang hanya ingin memeriksa, apakah hal di atas masih berfungsi pada sistem berbasis Ubuntu 20.04 LTS (langsung diuji di Linux Mint 20 Cinnamon dan Ubuntu MATE 20.04 ), dan saya menemukan beberapa hal, mari kita mulai dengan interval pemeriksaan sistem file (saya menjalankan semua perintah sebagai root (seperti yang mungkin Anda perhatikan ~# di depan perintah):

Interval pemeriksaan sistem file

~# LC_ALL=C tune2fs -l /dev/nvme0n1p2 | grep 'Check interval'

Check interval:           0 (<none>)

Yah, ini tidak terduga. Saya pikir kami sudah merawatnya, tetapi untungnya bisa diperbaiki dengan sangat mudah. Perhatikan, angka yang diperlukan sebagai argumen secara default dalam hitungan hari, jadi pastikan untuk menggunakan 1 detik (1 detik), bukan hanya 1 yang berarti 1 hari (86400 detik):

~# LC_ALL=C tune2fs -i 1s /dev/nvme0n1p2

tune2fs 1.45.5 (07-Jan-2020)
Setting interval between checks to 1 seconds

Sekarang, jika kita mengulangi pemeriksaan di atas, kita mendapatkan:

Check interval:           1 (0:00:01)

Ini tidak berarti sistem file akan diperiksa setiap satu detik, tentu saja. Sebaliknya, itu akan memaksa pemeriksaan sistem file pada setiap pemasangan sistem file. (Karena tidak ada cara mem-boot sistem apa pun dua kali dalam satu detik.)

Jumlah pemasangan maksimum sistem file sebelum pemeriksaan

Setelan bawaan:

~# LC_ALL=C tune2fs -l /dev/nvme0n1p2 | grep 'Maximum mount count'

Maximum mount count:      -1

Pengaturan ini menyesuaikan berapa banyak pemasangan yang diperlukan hingga sistem file diperiksa. Tidak apa-apa apa yang tertulis di jawaban aslinya:

~# LC_ALL=C tune2fs -c 1 /dev/nvme0n1p2

tune2fs 1.45.5 (07-Jan-2020)
Setting maximal mount count to 1

Pastikan Anda tidak menggunakan 0 atau -1 karena akan diabaikan.

Saya mungkin akan menambahkan lebih banyak info nanti... Jadi, terus periksa (permainan kata-kata).

Sumber informasi:

  • tune2fs halaman manual

Linux
  1. 10 Contoh Perintah Fsck Linux untuk Memeriksa dan Memperbaiki Sistem File

  2. Apa perbedaan bagian dan segmen dalam format file ELF

  3. Apa perbedaan antara fsck dan e2fsck?

  1. Apa itu Kernel Linux, dan haruskah Anda mengupgrade ke Kernel terbaru?

  2. Ukuran apa yang harus Anda alokasikan ke /, /boot, /home dan swap

  3. Apa perintah untuk menyalin, membaca, dan menghapus file di linux

  1. Linux - Bagaimana Cara Memaksa Pemeriksaan Sistem File Root (dan Opsional A Fix) Saat Boot?

  2. Periksa dan Perbaiki Kesalahan Sistem File Dengan Perintah fsck di Linux

  3. Cara Memaksa Periksa Sistem File Root menggunakan fsck Saat Reboot