Làm cách nào tôi có thể tránh các tin nhắn thủ công của Run Run fsck trong khi cho phép thử nghiệm thay đổi thời gian hệ thống?


18

Tôi đang làm việc với một hệ thống mà chúng tôi muốn cho phép người dùng chơi xung quanh với ngày và giờ nếu họ muốn và nơi khởi động lại có thể xảy ra tùy ý. Điều này là tốt, ngoại trừ một điều: nếu có một khoảng thời gian lớn nhảy lùi, lỗi sau xuất hiện khi khởi động lại:

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.

Sau đó, khởi động bị treo chờ đợi đầu vào bảng điều khiển người dùng và ngay cả khi đã có quyền truy cập bàn điều khiển, yêu cầu mật khẩu gốc để tiếp tục.

Điều này được quyết định ít hơn lý tưởng. Có cách nào để bỏ qua kiểm tra hoặc buộc kiểm tra tự động xảy ra khi khởi động lại không?

Google chỉ cung cấp trợ giúp yêu cầu chạy fsck theo cách thủ công nếu / khi điều này xảy ra, đây không phải là điều tôi muốn. Chạy fsck thủ công sau khi cài đặt thời gian không hoạt động vì hệ thống tập tin vẫn được gắn vào thời điểm đó và chỉ cần vô hiệu hóa hoàn toàn fsck là không lý tưởng.

Tôi đang sử dụng RedHat 6.

Cập nhật : Giải pháp tôi hiện đang sử dụng là hack fstab để vô hiệu hóa kiểm tra fsck khi khởi động lại. Tôi đã thử chỉnh sửa thời gian gắn kết cuối cùng trên các đĩa bằng cách sử dụng debugfs, hoạt động tốt cho các ổ đĩa ext3, nhưng dường như không nhất quán trên ext4.

Câu trả lời:


15

Tôi sẽ đề nghị hack e2fsckđể vô hiệu hóa các kiểm tra cụ thể cho lần gắn kết cuối cùng hoặc lần ghi cuối cùng trong tương lai. Chúng được định nghĩa trong vấn đề.c / vấn đề.h và được sử dụng trong super.c . Nhưng khi tìm kiếm, tôi phát hiện ra rằng E2fspross 1.41.10 thêm một tùy chọn mới để /etc/e2fsck.confgọi là broken_system_clock . Đây dường như là chính xác những gì bạn cần và vì bạn đang sử dụng Red Hat Enterprise Linux 6, bạn nên có 1.41.12, bao gồm tùy chọn này. Từ trang người đàn ông:

   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.

Có, trang người đàn ông không thể đánh vần "heuristic". Rất tiếc. Nhưng có lẽ mã vẫn hoạt động. :)


Điều đó có vẻ tuyệt vời, hãy lưu ý rằng trang man ngụ ý nó chỉ ảnh hưởng đến ext2 và ext3 và tôi đang sử dụng kết hợp ext3 và ext4. Tuy nhiên, tôi sẽ đi thử ngay bây giờ, như thể nó hoạt động, đó chính xác là những gì tôi đang tìm kiếm.
me_ và

1
Nó hoạt động! Bao gồm trên ext4. Cảm ơn bạn!
me_and 17/03/2016

1

Tôi nghi ngờ có một cách để loại bỏ kiểm tra này một cách cụ thể, không sửa đổi mã nguồn. Bỏ qua tất cả các lỗi từ fsck nghe có vẻ nguy hiểm, nếu có một số vấn đề khác thì sao?

Do đó, tôi sẽ đề xuất cách giải quyết sau: thay đổi tập lệnh khởi động để đặt ngày hệ thống thành một thời điểm nào đó trong tương lai (giả sử 2038-01-18 trên máy 32 bit) ngay trước khi chạy fsck và đọc lại từ phần cứng đồng hồ sau đó ( hwclock --hctosys, với nhiều tùy chọn hơn nếu cần tùy thuộc vào phần cứng của bạn và việc sử dụng GMT trong đồng hồ phần cứng.)


Điều này không có nghĩa là lần sau sẽ có một cửa sổ trong đó chúng ta có thể gặp lại lỗi tương tự? tức là thời gian gắn kết cuối cùng là 2038-01-18, vì vậy nếu thời gian hiện tại cũng được đặt thành đó, sẽ có một điều kiện cuộc đua trong đó chúng tôi (theo như hệ thống có liên quan) đang cố gắng gắn kết trước lần gắn kết cuối cùng.
me_and

@me_and: Vâng, tôi sợ rằng bùn của tôi sẽ không giúp chống lại người dùng độc hại. Nếu đó là những gì bạn đang chống lại, vá fsck có vẻ là lựa chọn tốt nhất.
Gilles 'SO- đừng trở nên xấu xa'

0

Điều này nghe có vẻ như nên được chạy trong một máy ảo, nơi bạn có thể có nhiều quyền kiểm soát hơn (hoặc chỉ trở lại một ảnh chụp nhanh).


Chạy trong VM thực sự không phải là một lựa chọn cho chúng tôi và trong mọi trường hợp chỉ cần quay lại ảnh chụp nhanh có nghĩa là chúng tôi xóa tất cả trạng thái khác mà người dùng có thể đã thiết lập.
me_and

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.