Tại sao đồng hồ của Ubuntu trở nên chậm hơn hoặc nhanh hơn?


16

Đồng hồ của Ubuntu đã tắt khoảng nửa giờ:

Ubuntu Time & Date v. Giờ chính thức của Hoa Kỳ

Tôi thậm chí bắt đầu khắc phục sự cố này ở đâu?

Nó được cho là được đặt "tự động từ Internet". Làm thế nào tôi có thể xác minh rằng "Internet" biết mấy giờ rồi?

Chi tiết

Ubuntu đã có nhiều thời gian để giao tiếp với Internet:

$ date; uptime
Fri May 18 05:56:00 PDT 2012
 05:56:00 up 12 days, 10:48,  2 users,  load average: 0.61, 0.96, 1.15

Máy chủ thời gian này tôi tìm thấy thông qua một tìm kiếm trên web dường như biết thời gian chính xác:

$ date; ntpdate -q north-america.pool.ntp.org
Fri May 18 05:56:09 PDT 2012
server 208.38.65.37, stratum 2, offset 1752.625337, delay 0.10558
server 46.166.138.172, stratum 2, offset 1752.648597, delay 0.10629
server 205.189.158.228, stratum 3, offset 1752.672466, delay 0.11829
18 May 05:56:18 ntpdate[29752]: step time server 208.38.65.37 offset 1752.625337 sec

Không có bất kỳ lỗi nào được báo cáo liên quan đến NTP:

$ grep -ic ntp /var/log/syslog
0

Sau khi khởi động lại, thời gian được tự động sửa và sau đây xuất hiện trong /var/log/syslog:

May 18 17:58:12 aux ntpdate[1891]: step time server 91.189.94.4 offset 1838.497277 sec

Nhật ký của phần bù được báo cáo bởi ntpdate cho thấy đồng hồ đang trôi khoảng 9 giây mỗi giờ:

$ while true; do ntpdate-debian -q | tail -n 1 >> 'drift.log'; sleep 16m; done
^C
$ r -e '
    attach(read.table("drift.log", header=FALSE))
    clock <- as.POSIXct(paste(V1, V2, V3), format="%d %b %H:%M:%S")
    fit <- lm(V10~clock)
    png("drift.png")
    plot(clock, V10, xlab="Clock time", ylab="Time server offset (s)")
    abline(fit)
    mtext(sprintf("Drift rate: %.2f s/hr", fit$coefficients[[2]]*3600))
'

Đồng hồ thời gian v. Thời gian bù máy chủ


Bối cảnh: ntp là một công cụ tuyệt vời để duy trì thời gian chính xác . Nhưng, phải mất một thời gian hữu hạn (vài phút hoặc thậm chí vài giờ) để đến thời điểm hiện tại từ thời gian không chính xác. Điều này có liên quan đến máy chủ ntp (sự lựa chọn của bạn) và độ trễ Internet của bạn đối với những máy chủ này. @Floyd đã phác thảo một phím tắt để nhanh chóng buộc thời gian chính xác. Nhưng thời gian tốt hơn (và sử dụng ntp ) đòi hỏi phải lựa chọn cẩn thận các máy chủ ntp.
david6

Xe của tôi làm điều này ... khiến tôi phát điên ... Tôi phải quay ngược thời gian 20 phút mỗi tuần ...
TheXed

Điều đầu tiên tôi sẽ thử làm là thay đổi pin trên bo mạch chủ ....
TheXed

Câu trả lời:


17

ntp làm tốt việc giữ cho máy tính của bạn được đặt đúng thời điểm và thực hiện điều đó mà không bao giờ chạy ngược lại - đó sẽ là một điều tồi tệ đối với một số chương trình bạn có thể đang chạy.

Nó không chỉ đặt thời gian mà còn điều chỉnh liên tục cách máy tính của bạn giữ thời gian sao cho thời gian không chỉ đúng lúc mà còn gần với thời gian thực (trong vòng hàng chục mili giây chứ không phải hàng chục phút) . Nó điều chỉnh cả pha (thời gian) và tốc độ (tốc độ "tích tắc" của đồng hồ). ntp không bao giờ làm cho đồng hồ chạy ngược. Có thể mất nhiều thời gian để thiết lập tốc độ đánh dấu đồng hồ sau khi khởi động lại, vì vậy ntp theo dõi sự trôi dạt trong một tệp có tên /var/lib/ntp/ntp.drift. Vì bạn không chạy ntp nên điều này không xảy ra.

ntp không phổ biến như trước đây bởi vì máy tính xách tay và máy tính để bàn đang ngủ và máy ảo ngăn không cho nó chạy một số thời gian. Nó được thiết kế để chạy một lần trong một lịch trình riêng trên một máy tính chạy mọi lúc và trong thế giới thực, nơi thời gian liên tục. Đó có lẽ là lý do tại sao nó không được cài đặt theo mặc định trên máy trạm hiện đại. [Đối với Vmware, xem điều này]

Thay vào đó, ntpdate được chạy khi giao diện mạng được đưa lên. Khi một máy tính xách tay đang ngủ được đánh thức, nó sẽ thiết lập lại kết nối mạng, ntpdate được chạy và thời gian lại chính xác. Nếu đồng hồ phần cứng của máy khá chính xác và mạng được đưa lên xuống khá thường xuyên, điều đó thường đủ tốt cho hầu hết mọi người.

Vì một số lý do, cổ phiếu ntpdate không chạy được. Sử dụng ntpdate-debian thay thế trong trường hợp này. Cú pháp cho for.mer là một cái gì đó giống như ntpdate ntp.ub Ubuntu.com , vì sau này nó là ntpdate-debian

Trong trường hợp không có một trong những điều đó, thì ntp là cách tốt hơn để giữ thời gian.

Các hệ thống được thiết kế để ngắt hẹn giờ thường xuyên và cập nhật ý tưởng về thời gian mỗi lần ngắt. Miễn là bộ đếm thời gian phần cứng đang chạy để spec. thời gian không trôi quá nhiều. Nếu không có bộ đếm thời gian phần cứng, thời gian sẽ trôi nhiều hơn (tất cả các đồng hồ như vậy sẽ trôi đi một số, vì lý do tương tự đồng hồ đeo tay hoặc đồng hồ kiểm soát pin của bạn sẽ. Đồng hồ cắm vào tường được đồng bộ hóa theo thời gian bởi tần số và pha được giữ bởi công ty điện lực của bạn).

Hầu hết các bộ định thời máy tính được điều khiển bởi một mạch dao động điều khiển bằng pha lê trên các mạch tích hợp của nó. Mặc dù có tinh thể, chúng chạy nhanh hơn và chậm hơn tùy thuộc vào môi trường, chủ yếu là nhiệt độ. Trừ khi bạn có một số thời gian đồng bộ hóa phần mềm được cài đặt mà chúng tôi không biết, tôi sẽ nói rằng đồng hồ hệ thống của bạn bị tắt.

Nếu bạn chạy ntp trong một hoặc hai ngày, nó sẽ lưu trữ thông tin trong /var/lib/ntp/ntp.drift để cho biết mức độ mà nó sẽ phải điều chỉnh tốc độ mà thời gian hệ điều hành của bạn tăng lên mỗi lần gián đoạn để phù hợp với tốc độ đồng hồ phần cứng của bạn với thời gian thực qua internet. Giữ nguyên tệp và chỉ bắt đầu và dừng ntp sau một phút sau đó (giả sử bạn giữ tệp /var/lib/ntp/ntp.drift không thay đổi) có thể sửa rất nhiều cho điều này nếu độ lệch đồng hồ vẫn đặt sau ntp kết thúc. Tôi không chắc về chi tiết này.

Tôi nghi ngờ giá trị ntp sẽ lưu trữ trong /var/lib/ntp/ntp.drift khác xa so với giá trị của tôi.

Tuy nhiên, nếu máy này luôn hoạt động, điều tốt nhất cần làm là cài đặt ntp và để nó làm việc của nó. Xem các câu trả lời khác để biết chi tiết về việc sắp xếp thời gian hợp lý trước khi bắt đầu. Tôi chạy ntp trên máy tính để bàn của tôi và ntpdate trên máy tính xách tay của tôi.

Một sự thay thế thú vị có thể, adjtimex, được đề cập trong câu trả lời này bởi nealmcb.

Nếu hệ thống của bạn không được chạy liên tục, chạy ntpdate khi khởi động có vẻ là một lựa chọn tốt.

Cảnh báo một số phần mềm có thể bị hỏng nếu thời gian máy tính quay ngược. Chạy ntpdate sau khi khởi động có thể khiến điều này xảy ra.

Một vấn đề, đó có thể là một vấn đề: Như tôi nhớ ntp hy vọng thời gian sẽ không quá xa. Nếu đúng như vậy, cố gắng hành động một cách bảo thủ, ntp sẽ không điều chỉnh thời gian. Nếu bạn ở trong tình huống này, sẽ hợp lý khi thực hiện cả hai - chạy ntpdate khi khởi động để có thời gian khởi tạo đúng thời gian, sau đó để ntp chạy để giữ cho nó chạy để cung cấp thời gian chính xác. Cụ thể, pin bo mạch chủ xấu có thể gây ra lỗi này, vì có thể khởi động máy tính bị tắt trong một thời gian dài.


John giải thích tuyệt vời! Chỉ một điều nhỏ - ngày / giờ trên hầu hết các bo mạch chủ được duy trì bởi một RTC riêng (đồng hồ thời gian thực), sử dụng tinh thể 32.768 KHz của riêng nó (vì chia tần số đó cho 2 ^ 15 cho bạn chính xác một giây) và FSB đồng hồ, thường ở mức trên 100 MHz, không liên quan gì đến việc giữ thời gian theo ngày - nếu quá / không ép xung sẽ làm rối tung nó - thay vào đó, nó thường bị trôi trong mô-đun / mạch RTC. Bạn có thể xem vấn đề này và trả lời bình luận và / hoặc chỉnh sửa câu trả lời của bạn để phản ánh vấn đề này không?
ish

Tôi sẽ làm cả hai! Tôi đã xóa đề cập đến quá giờ vì tôi nghĩ nó không thể thực hiện được, như tôi đã nói. Tuy nhiên, RTC chỉ được sử dụng để đặt thời gian khi khởi động. Như bình luận của bạn đề cập, nó chỉ chính xác đến 1 giây. Các man rtctrang nói: "RCT không nên nhầm lẫn với đồng hồ hệ thống, đó là một chiếc đồng hồ phần mềm duy trì bởi hạt nhân và sử dụng để thực hiện gettimeofday (2) ..." Không biết liệu đồng hồ hệ thống có liên quan đến xung nhịp FSB . Nhìn vào cấu hình kernel, kernel i386 chính xác mới nhất của Ubuntu có đồng hồ hệ thống được cập nhật ở tần số 250Hz. Cảm ơn các bình luận!
John S Gruber

@izx Trên hệ thống máy tính xách tay của tôi, kernel đang sử dụng HPET làm nguồn xung nhịp. Đó là cấu hình. Wikipedia nói rằng đây là một phần của chức năng cầu nam. Tôi không biết điều đó nói gì về mối quan hệ của nó với FSB, nhưng tôi tập hợp FSB là một phần của cầu bắc.
John S Gruber

Cảm ơn bạn, John và @izx. Tôi rất vui vì tính toàn diện của việc này. izx, tôi hy vọng bạn sẽ không nhận nó một cách cá nhân mà tôi đã đánh dấu nó là chấp nhận thay thế. Tôi nghĩ rằng nó sẽ được đọc tốt hơn cho du khách trong tương lai.
ændrük

@ ndrük: không có vấn đề gì cả, vì bạn có thể thấy tôi cũng đánh giá cao sự thấu đáo của John.
ish

12

- Thông thường thời gian chỉ được đồng bộ hóa một lần cho mỗi lần khởi động hoặc thức dậy từ giấc ngủ

Vì vậy, vấn đề có vẻ là máy chủ thời gian mặc định của Ubuntu (đó là gì?) Có thời gian không chính xác hoặc Ubuntu không tự động đặt thời gian từ Internet.

Không, máy chủ thời gian của Ubuntu là chính xác và nó đang tự động đặt thời gian từ nó.

Vấn đề là thường chỉ xảy ra một lần sau mỗi lần khởi động (hoặc chính xác hơn, mỗi lần giao diện mạng được đưa lên - cho dù là tắt máy, ngủ hay ngủ đông). Dựa trên thời gian hoạt động của bạn, thật an toàn khi nói rằng nó không được đồng bộ hóa trong hơn một tuần. Và đồng hồ hệ thống của bạn đang chạy hơi nhanh vì một số lý do.

- Thiết lập croncông việc hàng giờ để đồng bộ hóa nếu bạn không khởi động lại thường xuyên hoặc máy chủ / máy tính để bàn của bạn không bao giờ đi ngủ

Đặt cược tốt nhất của bạn là thiết lập một công việc định kỳ, tôi sẽ nói hàng giờ nếu bạn muốn thời gian siêu chính xác. Cách dễ nhất để làm điều đó là:

  • sudo editor /etc/cron.hourly/ntpsync

Thêm các dòng sau:

#! / bin / bash

ntpdate ntp.ubfox.com #hoặc sự lựa chọn máy chủ của bạn
  • lưu, thoát và sudo chmod +x /etc/cron.hourly/ntpsync

Bạn có thể đặt cái này /etc/cron.dailythay vào đó nếu bạn muốn, một lần mỗi ngày.


Tại chỗ trên. Tôi chấp nhận điều này để trả lời chính xác câu hỏi của tôi về lý do tại sao đồng hồ sai, nhưng tôi nghi ngờ về cách giải quyết đó. Tôi sẽ phải tìm hiểu thêm một chút về điều này trước khi tôi quyết định nên làm gì.
ændrük

Nếu bạn đặt máy chủ bạn chọn trong tệp ntp.conf, bạn có cần xác định lại ở đây không?
Snekse

6

Điều này có thể xảy ra nếu bạn đã cài đặt trình nền thời gian ntp và thời gian trên máy của bạn quá xa để có thể sửa nhanh chóng.

Để sửa nó mở một thiết bị đầu cuối và làm

  sudo service ntp stop
  sudo ntpdate swisstime.ethz.ch
  date
  sudo service ntp start

Cái này làm gì

  1. Dừng ntp daemon
  2. Bộ đồng hồ
  3. Bây giờ là đúng
  4. khởi động lại ntp daemon

Nếu bạn chưa cài đặt ntp, hãy làm với

  sudo apt-get install update

Cập nhật: Sử dụng ntpdate trong công việc định kỳ, như đã được đề xuất ở đây, dẫn đến các vấn đề tinh tế.

Nppdate sẽ khiến thời gian 'nhảy' mỗi giờ hoặc lâu hơn. Sử dụng ntp sẽ tránh được vấn đề này, bởi vì nó sẽ điều chỉnh thời gian bằng cách làm lệch đồng hồ. Ngoài ra, trong khi chọn máy chủ ntp trong vùng lân cận cho độ chính xác cao hơn, điều đó là không cần thiết. Tệp cấu hình ntp mặc định có một số máy chủ trong đó và máy chủ sẽ tự động bù cho bất kỳ sự chậm trễ nào.

Tóm lại: - sử dụng ntp - nếu bạn ở xa, hãy tắt ntp, chạy ntpdate một lần và khởi động lại ntp.


/etc/init.d/ntpkhông tồn tại Đây là bản cài đặt Ubuntu 12.04 khá gần đây và tôi đã không cố tình thay đổi bất cứ điều gì liên quan đến thời gian.
ændrük

Sau đó tôi khuyên bạn nên cài đặt nó.
Floyd

Càng nhiều càng tốt, tôi không muốn can thiệp vào cấu hình và dịch vụ trên toàn hệ thống. Nếu tệp này không được cài đặt theo mặc định, tại sao cài đặt Thời gian & Ngày mặc định phải hoạt động?
ændrük

1
Là thời gian chính xác sau khi khởi động lại? Tôi nghi ngờ rằng bản cập nhật đồng hồ chỉ chạy ntpdate một lần. Một số hệ thống có vấn đề là đồng hồ hệ thống được duy trì bởi linux chạy quá nhanh. Tôi đã có điều đó đặc biệt với các hệ thống chạy như máy ảo.
Floyd

1
Nếu sự cố này vẫn còn sau khi khởi động lại hoặc tắt máy, đó có thể là tế bào CMOS của bạn đã chết trong MOBO.
atenz

1

Tôi đã có một vấn đề tương tự và nó được gây ra bởi một cái gì đó trong tường lửa. Cuối cùng, tôi đã thêm công việc định kỳ hàng giờ nhưng đã thêm -uđối số để ntpdatelàm cho nó sử dụng một cổng không chuẩn.

Vấn đề của tôi là do Ubuntu không thực sự kiểm tra nếu ntpdatehoạt động mà tự động cho rằng nó sẽ hoạt động.

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.