Saya menjalankan Windows 7 di dalam Virtualbox di Ubuntu 11.10. Semuanya bekerja dengan baik. Saya menjalankannya saat startup, tetapi saya memiliki masalah dengan reboot.
Ketika saya mengetik sudo reboot now
keadaan virtual Windows 7 tidak disimpan. Setelah reboot, virtualbox dimulai, tetapi bukannya menjalankan Windows saya mendapatkan menu boot crash 7 Windows dan windows boot lagi.
Apakah ada opsi bahwa Ubuntu dapat mengirim beberapa sinyal ke kotak virtual untuk menutup instance dengan aman sebelum host reboot?
sumber
reboot
di 12.10 mengatakan "Ketika dipanggil dengan --force atau ketika di runlevel 0 atau 6, alat ini memanggil reboot (2) system call sendiri dan langsung reboot sistem. Jika tidak, ini hanya memanggil tool shutdown (8) dengan argumen yang sesuai. "; dan halaman manual untukshutdown
mengatakan "Setelah TIME berlalu, shutdown mengirimkan permintaan ke daemon init (8) untuk membawa sistem ke runlevel yang sesuai."Saya akan merekomendasikan pendekatan yang lebih canggih termasuk pekerjaan pemula, skrip start dan stop. Sebagai contoh saya menggunakan Windows XP, karena direktori home saya menggunakan tombert ... yang harus Anda ubah. Ini memiliki keuntungan dari apa pun yang Anda lakukan (reboot, shutdown, menekan tombol power) yang menangani mesin virtual Anda dengan baik .
Pertama pekerjaan pemula, masukkan /etc/init/winxpvm.conf:
Pekerjaan pemula memulai mesin virtual di runlevel 2 (yang dalam mode grafis), dan dalam kasus saya ini meningkatkan prioritas dengan
nice
. Untuk mematikan mesin virtual dengan baik, saya perlu "menonaktifkan" pengakhiran pemula menggunakankill signal SIGCONT
pernyataan. Ini membuat mesin virtual berjalan pada awalnya (menghindari defaultSIGTERM
). Setelah 120 detik,SIGKILL
bagaimanapun mengirim. Sebaliknya saya menjalankanwinxpvm-stop.sh
skrip.Catatan-Sisi 1: bait
start on started runlevel [2]
danstop on starting runlevel [!2]
tidak bekerja. Seseorang harus secara khusus menyebutkan pekerjaan iturc
.Catatan Samping 2: Yang membingungkan juga dari manual pemula:
kill signal
Stanza menentukan sinyal yang dikirim setelah 5 detik. Dalam contoh ini saya mengaturnya dariSIGTERM
(default) ke SIGCONT - tetapi batas waktu 5 detik saya tidak dapat berubah. Thekill timeout
bait menentukan batas waktu yangSIGKILL
dikirim - yang sinyal seseorang tidak bisa berubah. Oleh karena itu perbaikan adalah untuk mendefinisikan bait baruterm signal
danterm timeout
.Di sini skrip start winxpvm-start.sh:
Karena semua pengaturan dll dilakukan dalam mode pengguna (karena login saya adalah Tombert ), bahkan ketika dijalankan sebagai root saya mengubah akun ke Tombert . Pengguna tentu saja dapat diubah dalam konfigurasi pemula tetapi solusi ini memberikan saya pilihan untuk memulai / menghentikan mesin virtual "dengan tangan" dari konsol.
Yang lebih menarik adalah skrip shutdown di winxpvm-stop.sh:
Pertama saya melakukan hal yang sama seperti pada skrip awal - saya mengubah pengguna dari root ke Tombert akun saya . Sekarang mari kita lihat fungsinya
dostop
. Pertama saya memeriksa apakah mesin virtual bahkan berjalan. Kemudian saya mencoba "softly" shutdown dengan mengirimkan shutdown langsung ke WinXP menggunakanguestcontrol
. Di sini Anda harus memberikan kredensial untuk akun WinXP, yang dalam kasus saya adalah Tombert dan kata sandi. Windowsshutdown
akan menutup semua aplikasi dengan anggun dan mematikan sistem operasi (biasanya). Kemudian mari kita periksa status mesin virtual terus menggunakanshowvminfo
. Melakukan ini setidaknya 60 kali dengan batas waktu 1 detik (melakukan apa pun yang menurut Anda tepat ada di sini) harus meninggalkan mesin virtual cukup waktu untuk mematikan dengan anggun. Perhatikan bahwa panggilan keshowvminfo
juga membutuhkan sedikit kurang dari satu detik (setidaknya di komputer saya) jadi ini memberi ~ 120 detik dalam kasus saya. Jika semuanya mengerem, kami dapat mematikan paksa menggunakanpoweroff
pernyataan.Anda juga harus melihat
acpipowerbutton
, tetapi tidak digunakan. Ini karena tidak berfungsi andal. Jika Anda masuk ke Windows, atau bahkan lebih dari satu pengguna yang lebih buruk, Windows akan menampilkan dialog shutdown konfirmasi yang mencegah sistem shutdown. Ini juga alasan mengapaacpibutton
di/etc/default/virtualbox
tidak akan bekerja 100% dapat diandalkan. Jugapoweroff
secara paksa akan mematikan mesin virtual - sama seperti tombol power lama-tekan. Karena itu yang terbaik adalah mengosongkannya:Kutipan dari / etc / default / virtualbox:
Untuk membuatnya sempurna, Anda mungkin ingin mengubah perilaku tombol daya:
Kutipan dari /etc/acpi/powerbtn.sh:
Ada satu kekurangan kecil yang tersisa. Ketika mesin virtual masih booting dan layanan kontrol tamu tidak menyala (di mesin virtual) itu tidak akan menerima perintah shutdown. Kasus yang jarang terjadi ... tapi pikirkanlah.
Itu dia, semoga membantu.
sumber
VERR_INVALID_PARAMETER
di sisi tuan rumah jika saya masuk melalui RDC sebagai pengguna yang diberikan dalam skrip, dan selanjutnya tamu terus berjalan.Ikuti jawaban ini untuk mengubah kebijakan sistem Anda untuk reboot
Anda tidak dapat merampingkan ini menjadi
reboot
.init.d
Skrip AFAIK tidak akan berfungsi karena membutuhkan terlalu banyak waktu, tetapi Anda dapat menjalankan perintah seperti ini:di mana
<vm>
nama Mesin Virtualsumber
Anda dapat mengirim permintaan penutupan ke mesin virtual dengan:
Tetapi jika Anda melakukan ini dalam skrip init, skrip tidak boleh keluar sampai shutdown selesai. Kami mungkin dapat mendeteksi bahwa dengan polling file drive VM (.vdi) dengan
lsof
ataufuser
dalam satu lingkaran. Atau sebagai solusi murah,sleep 20
mungkin sudah cukup.Inilah yang saya gunakan saat ini di blok dekat skrip init saya:
Di dekat bagian atas file yang saya definisikan:
Ini mungkin sebenarnya tidak menutup aplikasi VirtualBox itu sendiri, tetapi menunggu VM menyelesaikan shutdown. Juga tidak berfungsi jika mesin virtual masih dalam proses booting (banyak sistem operasi mengabaikan tombol matikan selama fase ini), atau jika Anda meniru sistem lama tanpa dukungan ACPI.
sumber