BIOS clock vs OpenSUSE vs Windows clocks

I couldn’t figure out which forum to ask,

I currently have a pseudo-dual boot, my Windows 7 installed on an SDD which can be removed at anytime through an internal-caddy, and OpenSUSE 13.2 on main SSD.

Here’s the problem:

  1. OpenSUSE 13.2 synchronized off of BIOS clock being UTC time.
  2. W7 synchronized off of BIOS clock being Local time.
  3. W7 clock change changes BIOS clock.

basically if OpenSUSE is on right time, W7 is off by 4 hours. If W7 is on time, OpenSUSE is off by 4 hours.

Any solutions?

The way my dual-boot works is I need to interrupt the boot with BIOS, then select to boot from specific SSD, default is main OpenSUSE SSD. I set it up as such because my secondary, W7 SSD can be removed at anytime to be replaced with a DVD drive, or another SSD/HDD with different OS.

To end the fight between the two, either change on of them (or better, stop running Windows at all ;)).

On Linux you can change with YasT > System > Daten and time and the unset Hardware Clock Set to UTC box at lower left.

And I understand that on Windows nowadays you can set to UTC (But I do not know how, because of lack of Windows knowledge).

This will still have problems if daylight saving time is in use - every time each OS will adjust time when it is first booted after summer/winter time change. As there is no way to determine that time is already adjusted. It is not related to using Linux in any way BTW - the same problem would result from having to Windows instances.

Hi
Set BIOS time to UTC, set linux to use UTC, in windows you need to add a new registry dword key and set to 1;


HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\RealTimeIsUniversal

That is correct. But I see that you got already some Windows help here on the openSUSE forums. Isn’t this a wonderfull forum?

BTW, my conslusion from the above is then that running two Windowses is even worse then running one >:).

Just a FYI
And because many of the machines I run are virtual machines which are always out of sync if they are “paused” and restarted or put to sleep/hibernation and restarted,

My standard configuration in all machines no matter the method of install is to use NTP.
That way if a working network connection exists on bootup(or manually invoked or because of a periodic check) the system will always reset its time from Internet Time Servers and not by the local machine clock which for many reasons might be unreliable.

TSU

I’ve decided to set WINDOWS clock to UTC and tolerate being 4 hours early. OpenSUSE 13.2 seems to always be on time now at least.

You should be able to set the hardware clock to UTC and tell Windows that it is UTC. Having this confusion may cause problems with files shared between the OS.

This is absolutely the correct answer.

I’ve been doing it this way for several years, and it avoids almost all of the problems.

The only remaining problem is that Windows is confused. So I set Windows to never set time from the Internet. Linux does that more reliably.

On an AMD A10-5750M Quad-Core APU dual-boot laptop with Windows 8.1, this trick works perfectly!
The clocks of both Windows 8.1 and openSUSE 13.2 both sychronise absolutely perfectly with “europe.pool.ntp.org”.

On the other hand, Microsoft did say (back in 2013 – and only valid for Windows XP and earlier) that, when Daylight Saving kicks in (or out) Windows may be unresponsive if RealTimeIsUniversal is set to ‘1’.
Other Wiki’s are also mentioning that Windows before 7 was buggy with respect to UTC BIOS clocks . . . lol!

I’ll live dangerously for the moment and leave the dual-boot Windows 8.1 set-up to use the NTP Europe Pool and, wait until next spring when Summer Time arrives again. >:)

For a while with openSUSE 13.1/13.2 on this laptop I had a script in /usr/lib/systemd/system-sleep/ which amongst other things (like restarting udev, udisks2 and autofs on resume), stopped NTP on sleeping and restarted NTP on resume – the laptop clock was slipping about 3 seconds during sleep/resume:


if  "$1" = "pre" ]; then
    /usr/bin/systemctl stop ntpd.service
fi
if  "$1" = "post" ]; then
    /usr/bin/systemctl start ntpd.service
fi

Once the 3.16.7-24-desktop kernel arrived, this was no longer needed – the clock no longer slips more than a few milliseconds during suspend/resume and the other issues with udev, udisks2 and autofs have also disappeared.

One point with respect to NTP, if the NTP daemon is not restarted and, the BIOS clock has slipped more than a few 100 milliseconds before the network is brought up then, NTP may need several minutes to adjust the system clock’s offset with respect to the NTP server(s) – worst case possibly 20 minutes.

It seems okay with Vista.

It was buggy with XP. I finished up just using UTC for XP.

When XP was first booted, it worked fine. But if I left it idle for an hour or so, then when I returned the clock was wrong. But this does not happen with Vista or Windows 7.

I never did try checking what happens at the moment of the time shift. My computers are either turned off or running linux at 2am.

I did find one problem with Windows 7. If I allowed Windows to set the clock from the Internet, it would get it 1 hour wrong during daylight savings time. Windows seemed to be applying a DST correction to UTC when setting the clock (but not when reading the clock). My solution was to turn off setting the clock from the internet in Windows. As long as I allow opensuse to handle that, all is well.