vbox: support readonly overlay from disk

Add option to load the initial overlay*.vdi from disk, but keep the changes
in a ram_fs.

Used with AHCI model for vbox_auto_win7. Currently we have no way to tell
rump_fs to unmount and write back data to disk before resetting the machine.
This commit is contained in:
Alexander Boettcher 2016-08-01 11:40:21 +02:00 committed by Christian Helmuth
parent 6726e6d7fe
commit a876e655c0
5 changed files with 32 additions and 4 deletions

View File

@ -4,8 +4,10 @@
set flavor "win7"
# Write overlay back to harddisk if set to 0
set use_ram_fs 0
# Write overlay only into ram
set use_ram_fs 1
# However read initial overlay from disk
set use_overlay_from_disk 1
set use_usb 1
set use_ps2 [have_spec ps2]

View File

@ -72,6 +72,7 @@ set flavor "win7"
set vdi_image "${flavor}.vdi"
# Write overlay back to harddisk if set to 0
set use_ram_fs 0
set use_overlay_from_disk 0
set overlay_image "overlay_${flavor}.vdi"
set use_usb 0

View File

@ -8,6 +8,7 @@ set flavor "win8"
# Write overlay back to harddisk if set to 0
set use_ram_fs 0
set use_overlay_from_disk 0
set use_usb 1
set use_ps2 [have_spec ps2]

View File

@ -8,6 +8,7 @@ set flavor "win81_64"
# Write overlay back to harddisk if set to 0
set use_ram_fs 0
set use_overlay_from_disk 0
set use_usb 1
set use_ps2 [have_spec ps2]

View File

@ -83,7 +83,12 @@ append config {
<start name="rump_fs" priority="-1">
<resource name="RAM" quantum="32M"/>
<provides><service name="File_system"/></provides>
<config fs="ext2fs"> <default-policy root="/" writeable="yes"/> </config>
<config fs="ext2fs">}
append_if [expr $use_ram_fs && $use_overlay_from_disk] config {
<policy label="overlay_from_disk" root="/ram" writeable="yes"/>}
append config {
<default-policy root="/" writeable="yes"/>
</config>
<route>
<any-service><child name="part_blk"/> <parent/><any-child/></any-service>
</route>
@ -103,6 +108,24 @@ append_if [expr $use_ram_fs] config {
<!-- constrain sessions according to their labels -->
<policy label="vbox -> from_ram_fs" root="/ram" writeable="yes"/>
</config>
<route>}
append_if [expr $use_ram_fs && $use_overlay_from_disk] config "<service name=\"ROM\" label=\"${overlay_image}\">"
append_if [expr $use_ram_fs && $use_overlay_from_disk] config {
<child name="overlay_from_disk"/></service>}
append_if [expr $use_ram_fs] config {
<any-service> <parent/> <any-child/></any-service>
</route>
</start>}
append_if [expr $use_ram_fs && $use_overlay_from_disk] config {
<start name="overlay_from_disk" priority="-1">
<binary name="fs_rom"/>
<resource name="RAM" quantum="256M"/>
<provides><service name="ROM"/></provides>
<route>
<service name="File_system"><child name="rump_fs"/></service>
<any-service><parent/><any-child/></any-service>
</route>
</start>}
append_platform_drv_config
@ -251,7 +274,7 @@ append boot_modules {
}
lappend_if [expr $use_ram_fs || $use_usb] boot_modules ram_fs
lappend_if [expr $use_ram_fs] boot_modules ${overlay_image}
lappend_if [expr $use_ram_fs && !$use_overlay_from_disk] boot_modules ${overlay_image}
# platform-specific modules
lappend_if [expr $use_ps2] boot_modules ps2_drv