저는 사용자가 원하는 날짜와 시간을 설정하고 마음대로 다시 시작할 수 있도록 하는 시스템을 개발 중입니다. 한 가지를 제외하고는 괜찮습니다. 뒤로 점프하는 데 큰 시간이 걸리면 재부팅 시 다음 오류가 발생합니다.
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.
...그런 다음 정지를 시작하고 사용자 콘솔 입력을 기다리며 콘솔 액세스 권한을 얻은 경우에도 루트 암호를 계속 입력해야 합니다.
이것은 분명히 이상적이지 않습니다. 검사를 건너뛰거나 재부팅 시 자동으로 검사가 수행되도록 하는 방법이 있습니까?
Google은 이것이 적중되는 경우 fsck를 수동으로 실행하는 데 대해서만 도움을 제공하는데, 이는 내가 추구하는 것이 아닙니다. 시간을 설정한 후 fsck를 수동으로 실행하면 이 시점에서 파일 시스템이 여전히 마운트되어 있기 때문에 작동하지 않으며 단순히 fsck를 완전히 비활성화하는 것은 이상적이지 않습니다.
저는 레드햇 6을 사용하고 있습니다.
고쳐 쓰다:제가 현재 사용하고 있는 해결책은 fstab을 해킹하여 재부팅 시 fsck 검사를 비활성화하는 것입니다. Edit Last Mount Time on Disk를 사용해 보았지만 debugfs
ext3 드라이브에서는 잘 작동하지만 ext4에서는 일관되지 않게 실패하는 것 같습니다.
답변1
e2fsck
앞으로는 해커들이 마지막 설치 시간이나 마지막 쓰기 시간에 대한 특정 검사를 비활성화할 것을 제안하겠습니다 . 이러한 정의는질문.c/질문.h, 및 다음 용도로 사용됩니다.슈퍼C. 하지만 검색하는 동안 E2fsprogs 1.41.10에 /etc/e2fsck.conf
다음과 같은 새로운 옵션이 추가된 것을 발견했습니다 .손상된 시스템 시계. 이것이 바로 여러분에게 필요한 것으로 보이며 Red Hat Enterprise Linux 6을 사용하고 있으므로 이 옵션이 포함된 1.41.12가 있어야 합니다. 매뉴얼 페이지에서:
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.
예, 매뉴얼 페이지에는 "heuristics"라는 철자가 없습니다. 이런. 그러나 아마도 코드는 어쨌든 작동할 것입니다. :)
답변2
소스 코드를 수정하지 않고 이 검사를 구체적으로 제거할 수 있는 방법이 있는지 의심됩니다. fsck에서 모든 오류를 무시하는 것은 위험할 것 같습니다. 다른 문제가 있으면 어떻게 합니까?
따라서 다음 해결 방법을 제안합니다. fsck를 실행하기 전에 시작 스크립트를 변경하여 시스템 날짜를 미래의 특정 시간(예: 32비트 시스템의 경우 2038-01-18)으로 설정한 다음 하드웨어에서 다시 읽어 설정합니다. 그 후에 시계( hwclock --hctosys
하드웨어 및 하드웨어 시계의 GMT 사용에 따라 필요에 따라 더 많은 옵션이 제공됩니다.)
답변3
더 많은 제어권을 갖고 있는(또는 그냥 스냅샷으로 되돌리는) 가상 머신에서 실행해야 할 것 같습니다.
답변4
나에게 매우 효과적인 솔루션은 다음과 같습니다.
/etc/e2fsck.conf를 생성합니다:
[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
}
이 수정 사항에 대한 자세한 내용은 여기에서 확인할 수 있습니다.
http://stillstup.blogspot.com/2010/02/superblock-last-mount-time-is-in-future.html