Có thể có được một Virtualbox VM luôn bắt đầu từ cùng một lúc không, nếu vậy thì thế nào?


9

Tôi đang cố gắng sử dụng VB để thiết lập máy ảo Windows 7 để sử dụng trong khóa đào tạo. Tôi muốn máy ảo luôn khởi động từ cùng một điều kiện, cụ thể:

  1. VM luôn bắt đầu vào cùng ngày và giờ
  2. Đĩa vẫn không thay đổi do kết quả của bài tập trước

Tôi đã tìm ra cách cấu hình một đĩa là "không thay đổi", điều này sẽ quan tâm đến (2), nhưng tôi không thể bắt đầu VM cùng lúc. Sau khi nhìn xung quanh tôi thấy điều này:

Sau khi cài đặt và bắt đầu, Virtualbox Guest Additions sẽ cố gắng đồng bộ hóa thời gian của khách với thời gian lưu trữ. Điều này có thể được ngăn chặn bằng cách cấm dịch vụ khách đọc đồng hồ chủ:

VBoxManage setextradata "Tên VM" "VBoxI Internalal / Devices / VMMDev / 0 / Config / GethostTimeDisatted" 1

Tôi đã thử điều này với VM tắt và với nó khởi động, nhưng dường như nó không làm gì cả. Trên cùng một trang tài liệu cũng có đề cập đến một tham số "--timesync-set-start" tuy nhiên tôi không thể thấy bất kỳ đề cập nào về định dạng để đặt ngày và giờ. Trợ giúp sẽ được chào đón.


Với "dường như không làm gì cả", bạn có nghĩa là "thời gian và ngày hệ thống được đồng bộ hóa với máy chủ"?
Sopalajo de Arrierez

Nó có nên là một giải pháp để bạn thiết lập thời gian và ngày sau khi khởi động Windows (ý tôi là vài giây sau)? Một kịch bản .cmd đơn giản nên làm điều đó, tôi nghĩ vậy.
Sopalajo de Arrierez

Bản thân Windows cũng có thể được cấu hình để đồng bộ hóa thời gian với máy chủ thời gian internet.
Thorbjørn Ravn Andersen

Câu trả lời:


16

Bạn cần thực hiện các hành động sau đây để khiến thời gian của khách hàng giữ nguyên như cũ:

1. Có thể đồng bộ hóa thời gian của máy ảo của bạn:

1.1 Vô hiệu hóa máy chủ đến Guest Timesync

VBoxManage setextradata <YOUR_VM_NAME> "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 1

VBoxManage setextradata <YOUR_VM_NAME> "VBoxInternal/TM/TSCTiedToExecution" 1

Để hoàn nguyên:

VBoxManage setextradata <YOUR_VM_NAME> "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 0

1.2 Vô hiệu hóa GuestAddition Timesync

Sử dụng regedit.exe để sửa đổi sổ đăng ký.

Tìm chi nhánh này: HKEY_LOCAL_MACHINE \ HỆ THỐNG \ CurrentControlset \ Services \ VBoxService

Thay đổi giá trị ImagePathtừ

system32\VBoxService.exe

đến

system32\VBoxService.exe --disable-timesync

Khởi động lại máy ảo của bạn hoặc khởi động lại dịch vụ "Dịch vụ bổ sung khách ảo".

2. Có thể đồng bộ hóa thời gian của Windows.

Kiểm tra cài đặt thời gian. Vô hiệu hóa đồng bộ hóa thời gian internet.

Nguồn: http://www.ppq.ch/snippets/15-vobxtime


Cảm ơn. "1.2 Vô hiệu hóa GuestAddition Timesync" của bạn là tùy chọn duy nhất có vẻ phù hợp với tôi. Các thay đổi máy chủ tiếp tục được VirtualBox hoàn nguyên. Tôi sẽ xem tập tin sau khi tôi khởi động VM và các mục xml extradata mới đã bị xóa.
Graymatter

5

Các bước sau sẽ hoạt động, nếu máy chủ là Windows / Linux.

  1. Nếu "máy đích" là Windows: Mở "máy ảo đích" và áp dụng "Bảng điều khiển -> Ngày và giờ -> Thời gian Internet -> Thay đổi cài đặt -> Tắt" Đồng bộ hóa với máy chủ thời gian Internet "".

  2. Sao chép các dòng dưới đây dưới dạng tệp "yourfilename.ps1" (Windows) / "yourfilename.sh" (Linux) trên máy chủ. Chỉnh sửa tệp này như được mô tả trong bước 3. 4. 5.


GIỜ: CỬA SỔ

$vbox_path="C:\Program Files\ORACLE\VirtualBox"
$vm_name="Win7_VB"
$start_utc=1444176000

#DO NOT CHANGE ANYTHING BELOW THIS LINE
$now_utc_ms=[int64](([datetime]::UtcNow)-(get-date "1/1/1970")).TotalMilliseconds
$dif_utc_ms=$start_utc * 1000 - $now_utc_ms
Write-Host "START UTC:" $start_utc*1000 " DIF UTC:" $dif_utc_ms " NEW UTC:" $now_utc_ms

cd $vbox_path
VBoxManage setextradata $vm_name "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" "0"
VBoxManage setextradata $vm_name "VBoxInternal/TM/TSCTiedToExecution" 1
VBoxManage modifyvm     $vm_name --biossystemtimeoffset $dif_utc_ms
VBoxManage startvm      $vm_name
Start-Sleep -s 5

HOST: LINUX

#!/bin/sh
vbox_path="/usr/bin/"
vm_name="Win7_VB"
start_utc=1444176000

#DO NOT CHANGE ANYTHING BELOW THIS LINE
now_utc_ms=$(($(date +%s)*1000))
dif_utc_ms=$(($(($start_utc * 1000)) - $now_utc_ms))
echo "START UTC:" $(($start_utc * 1000)) " DIF UTC:" $dif_utc_ms "NOW UTC:" $now_utc_ms

cd $vbox_path
VBoxManage setextradata $vm_name "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" "0"
VBoxManage setextradata $vm_name "VBoxInternal/TM/TSCTiedToExecution" 1
VBoxManage modifyvm     $vm_name --biossystemtimeoffset $dif_utc_ms
VBoxManage startvm      $vm_name
sleep 5
  1. Cập nhật "vbox_path" với đường dẫn cài đặt VirtualBox. (Máy chủ: Windows)
  2. Cập nhật "vm_name" với tên của VirtualBox Image sẽ được bắt đầu.
  3. Cập nhật "start_utc" bằng cách sử dụng với http://www.epochconverter.com/ . Máy đích sẽ bắt đầu luôn với thời gian "start_utc". Chuyển đổi kỷ nguyên
  4. Mở "Windows PowerShell" từ Menu bắt đầu với tư cách Quản trị viên . (Máy chủ: Windows)
  5. Chạy lệnh sau và trả lời câu hỏi là [Y]. (Máy chủ: Windows)

    Set-ExecutionPolicy RemoteSigned
    
  6. Chạy bằng cách nhấp chuột phải vào "yourfilename.ps1" và chọn "Chạy với PowerShell" để khởi động máy đích. (Máy chủ: Windows)

  7. Khởi động một lệnh thực thi Linux Terminal để khởi động máy đích (Host: Linux)

    chmod +x yourfilename.sh && sh yourfilename.sh
    

Lưu ý: Luôn sử dụng bước 8 (Máy chủ: Windows) / bước 9 (Máy chủ: Linux) để chạy máy ảo đích.


Đối với người dùng có máy chủ linux, tôi đã tạo tập lệnh bash dựa trên câu trả lời này mà bạn có thể tìm thấy ở đây: gist.github.com/breautek/be83414034b973d53691645d6e178bb4 Chỉ cần lưu nó dưới dạng startvm.sh chmod +x startvm.shvà sử dụng ./startvm.shđể chạy nó. Có lẽ cũng sẽ hoạt động trên máy chủ mac, nhưng tôi chưa thử nó.
Norman Breau

1

Để trả lời câu hỏi ban đầu của OP (MartinK): Có thể có một Virtualbox VM luôn bắt đầu từ cùng một lúc không, nếu vậy thì thế nào?

Có thể đơn giản là bởi

(a) Đặt thuộc tính "GethostTimeDisables" = 1, sử dụng lệnh VBoxManage tại dòng lệnh (trong chế độ ngoại tuyến, tức là trước khi khởi động VM)

(b) Khởi động VM, từ một SnapShot đã lưu được chụp trước đó. (tại thời điểm bắt đầu mong muốn)

Không có nhiều lệnh được yêu cầu, mỗi khi điều này hoạt động. (đã thử nghiệm cho Windows Guest trong Windows Hosts)

Câu trả lời này gần với câu trả lời trước đó của Oliver Salzburg, ngoại trừ việc anh bỏ lỡ thông số "GethostTimeDisables". Đồng bộ hóa thời gian Internet (NTP) nên được tắt, trong ảnh chụp nhanh đã lưu.


0

Sử dụng ảnh chụp nhanh.

  1. Để tạo ảnh chụp nhanh mới, chỉ cần sử dụng nút Chụp nhanh trong tổng quan Ảnh chụp nhanh :

    nhập mô tả hình ảnh ở đây

  2. Đặt tên cho ảnh chụp và lưu nó.

  3. Khi bạn muốn khởi động trạng thái cố định sau đó, hãy quay lại ảnh chụp nhanh trước đó bằng nút Khôi phục Ảnh chụp nhanh :

    nhập mô tả hình ảnh ở đây

Nếu bạn muốn đảm bảo rằng ảnh chụp nhanh của bạn luôn có cùng ngày, có lẽ bạn muốn tắt đồng bộ hóa thời gian internet trong Windows bằng cách bỏ chọn hộp kiểm Đồng bộ hóa với máy chủ thời gian Internet trong hộp thoại cấu hình đồng hồ.


Đó là một giải pháp tuyệt vời và khắc phục vấn đề cho tôi, tôi nghĩ vậy. Có vẻ như sau đó nếu tôi sử dụng một ảnh chụp nhanh, tôi không cần bận tâm về việc làm cho đĩa "bất biến" - tôi có đúng không? Ngoài ra, mặc dù tôi không cần điều này để giải quyết vấn đề của mình, tôi tò mò về mục đích của các lệnh VBoxManage mà tôi đã đề cập trong bài viết trước của mình (và cách để chúng hoạt động)
Martin K

Vui lòng tham khảo tài liệu về lệnh đó: virtualbox.org/manual/ch09.html#disabletimesync Tôi không thấy lợi ích của một đĩa bất biến sẽ có hoặc ý nghĩa thực sự của nó trong ngữ cảnh này.
Der Hochstapler

Theo bài viết gốc của tôi, tôi đã xem tài liệu bạn tham khảo và cố gắng làm cho nó hoạt động - tuy nhiên nó không làm gì cả. Tôi phải thiếu một cái gì đó - nhưng cái gì?
Martin K
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.