Windows: Sync Ώρας σε Dual Boot όταν "χάνει"


(δανείζομαι εικόνα από google image results, γιατί τέτΧιος είμαι :stuck_out_tongue: )

Sync Ώρας σε Dual Boot όταν "χάνει"

  • Βαθμός Δυσκολίας = 4/10
  • Απαιτείται Γνώση σε[…] = Microsoft Notepad, Task Scheduler, Startup Items
  • Χρόνος Ολοκλήρωσης = 2 λεπτά

Πολλές φορές έχεις την ανάγκη να βρίσκεσαι σε dual boot σύστημα όπου ας πούμε ότι το main OS σου είναι το Linux (διότι πολλοί δοκιμάζετε λίγοι κάνετε το βήμα, ναι ναι αλήθειες), και σαν secondary OS ένα σύστημα βασισμένο σε Microsoft Windows (ο οδηγός έχει δοκιμαστεί σε Win10 Pro).

Το θάρρος να φτιάξω ένα script το πήρα διότι κουράστηκα να μην δουλεύουν οι αυτόματες λύσεις, και όσο έχεις πεί το clock settings στα Windows θέλω να παίρνεις NTP την ώρα από π.χ. time.microsoft.com είτε και Ελληνικά ntp servers αυτό αρνείται καταφατικά να το κάνει on-boot. Οπότε… How to Properly Sync Time Between OS’s…

Όταν είσαι π.χ. έτσι (από γνωστό στο Telegram, γεια σου Σπύρο)

╰─ timedatectl                                                                                   ─╯
               Local time: Σαβ 2022-03-19 11:36:45 EET
           Universal time: Σαβ 2022-03-19 09:36:45 UTC
                 RTC time: Σαβ 2022-03-19 09:36:45
                Time zone: Europe/Athens (EET, +0200)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

Στην ουσία δεν είναι sync αλλά θα πούμε στα Windows θέλω τώρα να πάρεις φρέσκια την ώρα, όπως ακριβώς έχουμε ρυθμίσεις εμείς στο BIOS αλλά και στην διανομή μας.

Ξεκινάμε σε Windows και ανοίγουμε ένα notepad και του ταΐζουμε το παρακάτω batch script

@echo off
timeout /t 30
SC START w32time task_started
net start w32time
w32tm  /config /manualpeerlist:"time.nist.gov time.windows.com time-nw.nist.gov time-a.nist.gov time-b.nist.gov time-a.timefreq.bldrdoc.gov time-b.timefreq.bldrdoc.gov time-c.timefreq.bldrdoc.gov utcnist.colorado.edu" /syncfromflags:manual /update
w32tm /query /configuration
w32tm /debug /enable /file:C:\windows\temp\w32time.log /size:10000000 /entries:300
rem w32tm /resync
w32tm /resync /force

και το σώζουμε στο Desktop ως π.χ. sync-timer.bat

Αυτό με τη σειρά του θα περιμένει 30 δευτερόλεπτα, ο λόγος είναι ότι επειδή θα το βάλουμε on-boot να ξεκινάει ενδέχεται να μην έχει σηκωθεί ακόμα η network adapter μας, οπότε θα τρέξει αλλά λίγο αργότερα. Μετά θα ξεκινήσει w32time για να πάρει με το χέρι την ώρα από τα δηλωμένα ntp servers, αν θέλετε από άλλα δικά σας Ελληνικά, be my guest, αλλά είναι τόσο απλή επικοινωνία και οι γραμμές μας είναι πλέον τόσο γρήγορες που δεν έχει και πολύ νόημα όλα από Ελληνικά mirror (άποψή μου). Μετά κάθε τα δικά του, γράφει αρχεία log να έχουμε αν χρειαστεί να δούμε τίποτα και κάνει /force resync την ώρα.

Αυτό το αρχείο θα πρέπει να το βάλουμε να τρέχει on-boot με τον Task Scheduler, μερικοί ΙΤ γνωστοί θα το έβαζαν και στο shell:startup αλλά σαν αποτέλεσμα “κάθε” φορά που θα τρέχει θα εμφανίζει ένα Command Prompt παράθυρο, εγώ προσωπικά δε το θέλω να το βλέπω έτσι, οπότε από Task Scheduler, ανοίγουμε νέο Task του λέμε να τρέχει On Startup χωρίς τον χρήστη να είναι logged-in και σαν user διαφορετικό, στο αναδυόμενο παράθυρο πατάμε με κεφαλαία SYS και Check name ώστε να πάρει το System account, έτσι θα τρέξει το batch file από το path που θα το έχουμε (μπορείτε να το αφήσετε π.χ. στο C:\) πριν κάν log-άρει ο χρήστης και χωρίς να δείτε Command Prompt παράθυρο.

Screenshot από WindowsCentral


όπου μπορείτε να δείτε πως μπορείτε να φτιάξετε ένα basic task από τον οδηγό τους…
How to create an automated task using Task Scheduler on Windows 10 | Windows Central

(Θα ενημερωθεί το άρθρο με screenshots όταν θα βρίσκομαι σε μηχάνημα με Windows, αυτή τη στιγμή το γράφω από macbook air mid’13 με pop-os)

Ελπίζω να το βρήκατε χρήσιμο, σαφώς απαιτεί λίγο παραπάνω από απλά να φτιάξετε ένα batch αρχείο, αλλά θα δείτε θα ξεκινάνε τα Windows και θα ενημερώνεται μετά από λίγο η ώρα και δεν θα σας νοιάζει τίποτα! ;-)

4 «Μου αρέσει»

ευχαριστούμε για τον οδηγό! :grin:

1 «Μου αρέσει»

Ευχαριστώ, σύντομα θα το μαζέψω να έχει περισσότερες πληροφορίες και screenshots!

1 «Μου αρέσει»

Μια εναλλακτική προσέγγιση (συν-συγραφή μαζί με τον @cerebrux ), ή μάλλον ένα χρήσιμο συμπλήρωμα. Βάλε το Linux να έχει την ώρα αποθηκευμένη στο BIOS, σαν τοπική ώρα, ή ακόμα καλύτερα τα Windows σε UTC.

2 «Μου αρέσει»

Στο συγκεκριμένο πρόβλημα αυτή είναι και η αναμενόμενη προσέγγιση[^] και πιο συγκεκριμένα η αλλαγή των Windows στο να χρησιμοποιούν UTC. Εναλλακτικά με το reg αρχείο γίνεται απευθείας με την εντολή:

reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f

Το οποίο επαναφέρεται απλά διαγράφοντας τη συγκεκριμένη τιμή:

reg delete "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /f

Και καλά ο λόγος που τα Windows κρατάνε τοπική ώρα στο BIOS είναι ώστε οι χρήστες να μη μπερδεύονται όταν μπαίνουν στο BIOS και βλέπουν διαφορετική ώρα σε σχέση με το λειτουργικό.

[^]: Μάλιστα, χωρίς να το δοκιμάσω, η προσέγγιση με το script μου φαίνεται θα έχει θέμα γιατί με το που τα Windows πάρουν νέα ώρα, αν δεν έχει γίνει μια από τις δύο αλλαγές που παρουσιάζονται στο άρθρο, θα γράψουν τη τοπική ώρα στο BIOS οπότε μετά σε Linux, που θα το διαβάσει ως UTC, θα έχει λάθος ώρα εκεί.

1 «Μου αρέσει»

Βασικά ο κύριος λόγος είναι ο πρώτος: One is a chain of backwards compatibility. Αντιγράφω μια απάντηση μου από το άρθρο:

Το πρώτο IBM PC είχε ένα χωριστό τσιπάκι που κράταγε την ώρα. Το ίδιο αυτό είχε επιπλέον κάποιες λίγες θέσεις μνήμης στις οποίες κράταγε τις ρυθμίσεις του BIOS. Τα περιεχόμενα του και το ρολόι κρατώνταν ενεργά από την μπαταρία της μητρικής. Αν ένα πρόγραμμα ήθελε να μάθει την ώρα δεν υπήρχε κάποια κλήση συστήματος, και απλά ρώταγες το τσιπάκι απευθείας. Η επικοινωνία μεταξύ των υπολογιστών γίνονταν με δισκέτες. Σε ένα τέτοιο περιβάλλον δεν υπήρχε ανάγκη ούτε να κρατάς συγχρονισμένα ρολόγια, ούτε να κρατάς παγκόσμιο χρόνο.

Τα Windows 95 όταν είχαν βγει δεν είχαν καν υποστήριξη για πρωτόκολλα διαδικτύου. Οπότε ακόμα και τότε δεν υπήρχε λόγος. Όταν λίγους μήνες μετά όλοι θέλανε internet ήταν ήδη πολύ αργά, μιας και μια αλλαγή σε παγκόσμια ώρα θα έκανε διάφορα προγράμματα να σταματήσουν να λειτουργούν, και είχαμε δε ακόμα προγράμματα που απλά ρώταγαν το ίδιο το τσιπάκι.

Το UNIX ήταν σχεδόν απο την αρχή ένα σύστημα για πολλούς χρήστες που συνδέονταν δικτυακά. Η ώρα λοιπόν ήταν καθοριστική, υπήρχε κλήση συστήματος (μιας και δεν θέλεις κανένα πρόγραμμα να σκαλίζει τα τσιπάκια) οπότε δεν υπήρχε κάποιο τέτοιο πρόβλημα. Απόδειξη η ευκολία μετατροπής του ρολογιού στα 64bit ώστε να μην έχει πρόβλημα το έτος 2038.

Οπότε απλά τα καημένα τα Windows είχαν μια βάση το DOS με ένα χρήστη και όχι δίκτυο και δεν τους είναι πάντα εύκολο να την εγκαταλείψουν. Η προκαθορισμένη ρύθμιση είναι τέτοια γιατί κάπου σε κάποια τράπεζα υπάρχει ένα πρόγραμμα 20 ετών ή και παραπάνω που αλλιώς δεν θα δουλεύει και μάλλον δεν είναι ένα αυτό. Μπορούμε να τα συμπονέσουμε για το φτωχό τους παρελθόν αλλά δεν θα πούμε και ότι τα κάνουνε σωστά.

Trivia: Πολλά πολλά χρόνια πίσω: Για να δουλέψεις το συγκεκριμένο τσιπάκι (έχω ξεχάσει πως το λένε) επειδή μιλάει μόνο σε μια θέση μνήμης, πρέπει πρώτα να γράψεις σε αυτή την θέση που θέλεις να διαβάσεις ή να γράψεις, και μετά να κάνεις την ανάγνωση ή την εγγραφή. Τώρα αν έχεις μια εντολή XOR σε θέση μνήμης, όπως είχε ο MC6800, τότε χάνει η μάνα το παιδί και το παιδί την μάνα. Πήρε πάνω από μήνα να βρεθεί τι συμβαίνει, και πως όχι δεν είναι καμένο το τσιπάκι και πως όχι δεν έχει λάθος το σχέδιο. Αχχ οι χαρές του Hardware :smile:

1 «Μου αρέσει»