Sistem saati değişiklikleri denemeye izin verirken “fsck'i manuel olarak çalıştır” iletilerinden nasıl kaçınabilirim?


18

Kullanıcıların istedikleri tarih ve saatle oynamasına izin vermek istediğimiz ve yeniden başlatmaların keyfi olarak gerçekleşebileceği bir sistemle çalışıyorum. Bu, bir şey hariç iyidir: geriye doğru büyük bir zaman atlaması varsa, yeniden başlatma sırasında aşağıdaki hata görünür:

Checking filesystems
IMAGE2: Superblock last mount time (Tue Mar  1 17:32:48 2011,
        now = Thu Feb 24 17:34:29 2011) is in the future.

IMAGE2: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
        (i.e., without -a or -p options)

*** An error occurred during the file system check.
*** Dropping you to a shell; the system will reboot
*** when you leave the shell.

… Ve daha sonra önyükleme, kullanıcı konsolu girdisini beklerken askıda kalıyor ve konsol erişimi elde edildikten sonra bile devam etmek için bir root parolası gerekiyor.

Bu kesinlikle idealden daha az. Çeki atlamanın veya yeniden başlatıldığında otomatik olarak kontrol edilmesini sağlamanın bir yolu var mı?

Google, fsck'i yalnızca bu isabet durumunda / vurulduğunda çalıştırmayı gerektiren bir yardım sağlamıştır. Zaman ayarlandıktan sonra fsck'i manuel olarak çalıştırmak, dosya sistemi hala bu noktada takılı olduğundan çalışmaz ve fsck'in tamamen devre dışı bırakılması idealden daha azdır.

RedHat 6 kullanıyorum.

Güncelleme : Şu anda birlikte olduğum çözüm, yeniden başlatma sırasında fsck kontrolünü devre dışı bırakmak için fstab'ı kesmek. debugfsExt3 sürücüler için iyi çalışır, ancak ext4 üzerinde tutarsız başarısız gibi görünüyor kullanarak diskler üzerinde son bağlama süresini düzenlemeyi denedim .

Yanıtlar:


15

e2fsckGelecekte son montaj zamanı veya son yazma zamanı için belirli kontrolleri devre dışı bırakmayı önermiştim . Bunlar problem.c / problem.h dosyasında tanımlanmıştır ve super.c dosyasında kullanılmıştır . Ama seyir halinde ben e2fsprogs 1.41.10 yeni bir seçenek ekler keşfetti /etc/e2fsck.confdenilen broken_system_clock . Bu tam olarak ihtiyacınız olan şey gibi görünüyor ve Red Hat Enterprise Linux 6 kullandığınız için, bu seçeneği içeren 1.41.12'ye sahip olmalısınız. Man sayfasından:

   broken_system_clock
          The e2fsck(8) program has some hueristics that assume  that  the
          system clock is correct.  In addition, many system programs make
          similar assumptions.  For example, the UUID library  depends  on
          time  not going backwards in order for it to be able to make its
          guarantees about issuing universally unique ID’s.  Systems  with
          broken  system clocks, are well, broken.  However, broken system
          clocks, particularly in embedded systems, do exist.  E2fsck will
          attempt  to  use  hueristics to determine if the time can no tbe
          trusted; and to skip time-based checks if this is true.  If this
          boolean  is set to true, then e2fsck will always assume that the
          system clock can not be trusted.

Evet, man sayfası "sezgisel tarama" anlamına gelemez. Hata. Ama muhtemelen kod zaten çalışıyor. :)


Bu harika görünüyor, man sayfasının yalnızca ext2 ve ext3'ü etkilediğini ima ettiğini kaydedin ve ext3 ve ext4'ün bir kombinasyonunu kullanıyorum. Yine de şimdi deneyeceğim, sanki işe yarıyor gibi, tam da aradığım şey bu.
me_and

1
İşe yarıyor! Dahili4 dahil. Teşekkür ederim!
me_and

1

Özellikle bu kodu kaldırmanın, kaynak kodunu değiştirmenin bir yolu olmadığından şüpheliyim. Fsck'ten gelen tüm hataları görmezden gelmek tehlikeli, ya başka bir sorun olsaydı?

Bu nedenle, aşağıdaki geçici çözümü öneririm: fsck'i çalıştırmadan hemen önce sistem tarihini gelecekte bir zamana (32 bit makinede 2038-01-18 diyelim) ayarlamak için önyükleme komut dosyalarını değiştirin ve donanımdan tekrar okuyun saat sonra ( hwclock --hctosysdonanımınıza ve donanım saatinde GMT kullanımına bağlı olarak daha fazla seçenekle birlikte.)


Bu, bir dahaki sefere aynı hatayı tekrar vurabileceğimiz bir pencere olacağı anlamına gelmez mi? yani son montaj süresi 2038-01-18'dir, bu nedenle şimdiki zaman da buna ayarlanmışsa, (son olarak ilgili sisteme göre) son montajdan önce tekrar monte etmeye çalıştığımız bir yarış durumu vardır.
me_and

@me_and: Evet, korkarım kudurum kötü niyetli kullanıcılara karşı yardımcı olmayacak. Karşılaştığınız şey buysa, fsck'i yamalamak en iyi seçenek gibi görünüyor.
Gilles 'SO

0

Bu, daha fazla kontrole sahip olabileceğiniz (veya sadece bir anlık görüntüye geri dönebileceğiniz) sanal bir makinede çalıştırılması gerektiği gibi geliyor.


Bir VM'de çalışmak bizim için bir seçenek değildir ve her durumda bir anlık görüntüye geri dönmek, kullanıcının ayarlamış olabileceği diğer tüm durumları kaldırmamız anlamına gelir.
me_and

0

İşte benim için harika çalışan bir çözüm:

/Etc/e2fsck.conf oluşturun:

[problems]

# Superblock last mount time is in the future (PR_0_FUTURE_SB_LAST_MOUNT).
0x000031 = {
preen_ok = true
preen_nomessage = true
}

# Superblock last write time is in the future (PR_0_FUTURE_SB_LAST_WRITE).
0x000032 = {
preen_ok = true
preen_nomessage = true
}

Bu düzeltmeyle ilgili daha fazla bilgiyi burada bulabilirsiniz:

http://stillstup.blogspot.com/2010/02/superblock-last-mount-time-is-in-future.html

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.