VirtualBox: Zeitdifferenzen zwischen Host- und Gastsystem

VirtualBox ist eine Virtualisierungslösung. Manchmal ist es sinnvoll, die Zeit in einer dort ausgeführten virtualen Maschine festzulegen, ohne die Zeit des Hostsystems zu verändern. Mit VBoxManage kann ein Offset zwischen der Zeit des Hostsystems und des Gastsystems eingestellt werden.

VBoxManage modifyvm <vm-name> --biossystemtimeoffset <offset in ms>

Das folgende Perl-Skript verwendet diese Möglichkeit, um die Startzeit des Gastsystems auf einen definierten Zeitpunkt festzulegen. Dazu wird zunächst die Zeitdifferent zwischen der aktuellen Zeit und der gewünschten Zeit berechnet. Diese Differenz wird anschließend als Offset zwischen Host und Gast eingestellt und das Gastsystem gestartet.

#!/usr/bin/perl

use POSIX;
use strict;
use warnings;

# --- Konfiguration der Zeit im Gastsystem zum Startzeitpunkt (23. August 2000 01:38:12 Uhr)
my $hour = 1; # - Stunde
my $min = 38; # - Minute
my $sec = 12; # - Sekunde
my $day = 23; # - Tag
my $mon = 8; # - Monat
my $year = 2000; # Jahr

# --- Konfiguration des Gastsystems
my $vboxname = "Meine VirtualBox"; # - Name oder UUID des betroffenen Gasts, der gestartet wird

# ---
my $tset = mktime($sec, $min, $hour, $day, $mon-1, $year-1900, 0, 0);
my $now = time();
my $offset = $now-$tset;

my $command_config = sprintf("VBoxManage modifyvm \"%s\" --biossystemtimeoffset -%d000",
 $vboxname, $offset);
my $command_start = sprintf("VBoxManage startvm \"%s\"", $vboxname);

system($command_config);
system($command_start);