시스템 시간 변경을 실험하면서 "fsck를 수동으로 실행"메시지를 피하려면 어떻게해야합니까?


18

사용자가 원하는 경우 날짜와 시간을 가지고 놀 수 있고 재부팅이 임의로 발생할 수있는 시스템을 사용하고 있습니다. 한 가지 경우를 제외하고는 문제가 없습니다. 거꾸로 뒤로 건너 뛰는 경우 재부팅시 다음 오류가 나타납니다.

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를 완전히 비활성화하는 것이 이상적이지 않습니다.

RedHat 6을 사용하고 있습니다.

업데이트 : 현재 진행중인 솔루션은 fstab을 해킹하여 재부팅시 fsck 검사를 비활성화하는 것입니다. debugfsext3 드라이브에서는 잘 작동하지만 ext4에서는 일관성이없는 것처럼 보이는 디스크를 사용하여 디스크에서 마지막 마운트 시간을 편집하려고했습니다 .

답변:


15

나는 e2fsck마지막 마운트 시간 또는 미래의 마지막 쓰기 시간에 대한 특정 검사를 비활성화 하기 위해 해킹을 제안하려고했습니다 . 이것들은 problem.c / problem.h에 정의되어 있으며 super.c에 사용됩니다 . 그러나보고에, 내가하는 e2fsprogs 1.41.10가에 새로운 옵션이 추가 발견 /etc/e2fsck.conf이라고 broken_system_clock을 . 이것은 정확히 필요한 것으로 보이며, 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.

예, 매뉴얼 페이지에는 "휴리스틱"이라는 철자가 없습니다. 죄송합니다. 그러나 아마도 코드는 어쨌든 작동합니다. :)


환상적입니다 .man 페이지는 ext2와 ext3에만 영향을 미치며 ext3과 ext4의 조합을 사용하고 있습니다. 그럼에도 불구하고, 나는 그것이 작동 등의 경우, 그것의, 지금 그것을 시도 갈거야 정확히 내가 무엇을 찾고 있어요.
me_and

1
효과가있다! ext4 포함. 감사합니다!
me_and

1

소스 코드를 수정하지 않고이 검사를 구체적으로 제거하는 방법이 있는지 의심 스럽습니다. fsck의 모든 오류를 무시하면 위험한 것처럼 들립니다. 다른 문제가 있으면 어떻게합니까?

따라서 다음 해결 방법을 제안합니다. fsck를 실행하기 직전에 부팅 날짜를 변경하여 시스템 날짜를 미래의 시간 (예 : 32 비트 시스템에서 2038-01-18)으로 설정하고 하드웨어에서 다시 읽습니다. 이후 시계 ( hwclock --hctosys하드웨어 하드웨어 및 하드웨어 시계에서 GMT 사용에 따라 필요한 옵션이 더 있음)


다음 번에 같은 버그를 다시 겪을 수있는 창이 있다는 것을 의미하지 않습니까? 즉, 마지막 마운트 시간은 2038-01-18이므로 현재 시간도 그와 같이 설정되어 있으면 마지막으로 마운트하기 전에 다시 시스템을 마운트하려고하는 경쟁 조건이 있습니다.
me_and

@me_and : 예, kludge가 악의적 인 사용자를 도울 수 없을 것 같습니다. 이것이 당신이 반대하는 것이라면, fsck 패치는 최선의 선택 인 것 같습니다.
Gilles 'SO- 악마 그만

0

가상 머신에서 실행해야하는 것처럼 들리는데, 여기서 더 많은 제어권을 갖거나 스냅 샷으로 되돌릴 수 있습니다.


VM에서 실행하는 것은 실제로 우리에게는 선택 사항이 아니며, 어쨌든 스냅 샷으로 되돌리기 만하면 사용자가 설정 한 다른 모든 상태가 제거됩니다.
me_and

0

나를 위해 잘 작동하는 솔루션은 다음과 같습니다.

/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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.