2.3. hwclock コマンドの使用

hwclock は、ハードウェアクロックにアクセスするためのユーティリティーです。これはリアルタイムクロック (RTC) とも呼ばれています。ハードウェアクロックは使用中のオペレーティングシステムから独立しており、マシンがシャットダウンしても作動します。このユーティリティーは、ハードウェアクロックから時刻を表示するために使用されます。また hwclock には、ハードウェアクロック内の体系的なずれを補正する機能もあります。
ハードウェアクロックタイムは、年、月、日、時間、分、秒の値を保存します。ローカルタイムや協定世界時 (UTC) の時刻を保存したり、夏時間 (DST) を設定したりすることはできません。
hwclock ユーティリティーは、/etc/adjtime ファイルにその設定を保存します。このファイルは、時刻を手動で設定したり、ハードウェアクロックをシステム時間に同期したりするなどの初回の変更時に作成されます。

注記

Red Hat Enterprise Linux 6 では、hwclock コマンドは毎回のシステムのシャットダウンまたは再起動時に自動的に実行されますが、これは Red Hat Enterprise Linux 7 では実行されません。システムクロックが Network Time Protocol (NTP) または Precision Time Protocol (PTP) で同期される場合、カーネルは自動的に 11分ごとにハードウェアクロックをシステムクロックに同期します。
NTP についての詳細は、15章chrony スイートを使用した NTP 設定 および 16章ntpd を使用した NTP 設定 を参照してください。PTP についての詳細は、17章ptp4l を使用した PTP の設定 を参照してください。ntpdate を実行した後のハードウェアクロックの設定についての詳細は、「ハードウェアクロック更新の設定」 を参照してください。

2.3.1. 現在の日時の表示

root ユーザーでオプションなしに hwclock を実行すると、標準出力にローカルタイムの日時が返されます。
hwclock
hwclock コマンドで --utc または --localtime オプションを使用することが、ハードウェアクロックタイムを UTC またはローカルタイムで表示することになる訳ではないことに注意してください。これらのオプションは、時間をそれらのいずれかで維持するようハードウェアクロックを設定するために使用されます。さらに、hwclock --utc または hwclock --local コマンドを使用しても、/etc/adjtime ファイルの記録は変更されません。このコマンドは、/etc/adjtime に保存された設定が誤っていることを認識しているものの、その設定を変更したくない場合に役立つかもしれません。一方、このコマンドを間違った方法で使用する場合には、誤解させるような情報を受信してしまう可能性があります。詳細は、hwclock(8) man ページを参照してください。

例2.9 現在の日時の表示

ハードウェアクロックから現在の日付および現在のローカルタイムを表示するには、root で以下を実行します。
~]# hwclock
Tue 15 Apr 2014 04:23:46 PM CEST     -0.329272 seconds
CEST は 中央ヨーロッパ夏時間 (Central European Summer Time) の省略形です。
タイムゾーンの変更方法についての詳細は、「タイムゾーンの変更」 を参照してください。

2.3.2. 日付と時刻の設定

日付と時刻を表示するほかに、ハードウェアクロックを特定の時刻に手動で設定することができます。
ハードウェアクロックの日時を変更するには、--set--date のオプションを追加します。
hwclock --set --date "dd mmm yyyy HH:MM"
dd は 2 桁の日付に、mmm は 3 文字の月の省略形に、yyyy は 4 桁の年に、HH は 2 桁の時間に、MM は 2 桁の分に置き換えます。
同時に、--utc または --localtime オプションをそれぞれ追加することで、UTC またはローカルタイムのいずれかで時刻を維持するようにハードウェアクロックを設定することもできます。この場合、UTC または LOCAL/etc/adjtime ファイルに記録されます。

例2.10 ハードウェアクロックを特定の日時に設定する

日時をたとえば、2014 年 10 月 21 日 21:17 に設定し、UTC のハードウェアクロックを維持する場合は、root として以下のフォーマットでコマンドを実行します。
~]# hwclock --set --date "21 Oct 2014 21:17" --utc

2.3.3. 日付と時刻の同期

ハードウェアクロックと現在のシステム時間の同期を両方向で実行できます。
  • 以下のコマンドを使用してハードウェアクロックを現在のシステム時間に設定できます。
    hwclock --systohc
    NTP を使用する場合、ハードウェアクロックは 11 分ごとにシステムクロックに自動的に同期され、このコマンドは妥当な初期のシステム時間を取得するためにブート時にのみ役立つことに注意してください。
  • または、以下のコマンドを使用してハードウェアクロックからシステム時間を設定することができます。
    hwclock --hctosys
ハードウェアクロックとシステム時間を同期する場合、--utc または --localtime オプションを追加することでハードウェアクロックをローカルタイムまたは UTC で維持するかどうかを指定することもできます。--set を使用する場合と同様に、UTC または LOCAL/etc/adjtime ファイルに記録されます。
hwclock --systohc --utc コマンドは timedatectl set-local-rtc false に機能的に似ており、hwclock --systohc --local コマンドは timedatectl set-local-rtc true の代替コマンドになります。

例2.11 ハードウェアクロックをシステムタイムに同期させる

ハードウェアクロックを現在のシステム時間に設定し、ハードウェアクロックをローカルタイムで維持するには、root で以下のコマンドを実行します。
~]# hwclock --systohc --localtime
タイムゾーンおよび DST 切り替えに関する問題を避けるには、ハードウェアクロックを UTC で維持することを推奨します。表示されている 例2.11「ハードウェアクロックをシステムタイムに同期させる」 は、Windows システムでのマルチブートの場合などに役立ちます。この場合、デフォルトでハードウェアクロックがローカルタイムで実行されることが想定され、その他のシステムもすべてローカル時間を使用して対応する必要があります。これは仮想マシンでも必要になる場合があります。ホストが提供する仮想ハードウェアクロックがローカルタイムで実行中の場合、ゲストシステムもローカルタイムを使用するように設定される必要があります。