Don't use qcow2 for userdata.
We provide a sparse file directly as a (writable) partition image and
format a filesystem on the partition inside the VM.
To format it only when it's not formatted, the option `formattable` is
added to the fstab entry for the userdata partition.
Bug: 185767624
Test: atest MicrodroidHostTestCases
Change-Id: Ia938fd60071e64170b8280d19c17c4413c769337
diff --git a/microdroid/Android.bp b/microdroid/Android.bp
index 435557e..3ace4a6 100644
--- a/microdroid/Android.bp
+++ b/microdroid/Android.bp
@@ -56,6 +56,8 @@
"logd",
"run-as",
"secilc",
+ "mke2fs",
+ "e2fsdroid",
// "com.android.adbd" requires these,
"libadbd_auth",
diff --git a/microdroid/README.md b/microdroid/README.md
index d57efa3..a4fcb12 100644
--- a/microdroid/README.md
+++ b/microdroid/README.md
@@ -43,7 +43,7 @@
"writable": false
},
{
- "image": "/data/local/tmp/microdroid/userdata_composite.qcow2",
+ "image": "/data/local/tmp/microdroid/userdata_composite.img",
"writable": true
}
]
@@ -63,11 +63,9 @@
$ adb shell 'cp /apex/com.android.virt/etc/uboot_env.img /data/local/tmp/microdroid'
$ adb shell 'dd if=/dev/zero of=/data/local/tmp/microdroid/misc.img bs=4k count=256'
$ adb shell 'dd if=/dev/zero of=/data/local/tmp/microdroid/userdata.img bs=1 count=0 seek=4G'
-$ adb shell 'mkfs.ext4 /data/local/tmp/microdroid/userdata.img'
$ adb shell 'cd /data/local/tmp/microdroid; /apex/com.android.virt/bin/mk_cdisk /apex/com.android.virt/etc/microdroid_cdisk.json os_composite.img'
$ adb shell 'cd /data/local/tmp/microdroid; /apex/com.android.virt/bin/mk_cdisk /apex/com.android.virt/etc/microdroid_cdisk_env.json env_composite.img'
$ adb shell 'cd /data/local/tmp/microdroid; /apex/com.android.virt/bin/mk_cdisk /apex/com.android.virt/etc/microdroid_cdisk_userdata.json userdata_composite.img'
-$ adb shell '/apex/com.android.virt/bin/crosvm create_qcow2 --backing_file=/data/local/tmp/microdroid/userdata_composite.img /data/local/tmp/microdroid/userdata_composite.qcow2'
$ adb shell 'cd /data/local/tmp/microdroid; /apex/com.android.virt/bin/mk_payload /apex/com.android.virt/etc/microdroid_payload.json payload.img'
$ adb shell 'chmod go+r /data/local/tmp/microdroid/*-header.img /data/local/tmp/microdroid/*-footer.img /data/local/tmp/microdroid/payload.img.*'
$ adb push microdroid.json /data/local/tmp/microdroid/microdroid.json
diff --git a/microdroid/fstab b/microdroid/fstab
index 2f4e45f..6e17c3e 100644
--- a/microdroid/fstab
+++ b/microdroid/fstab
@@ -2,4 +2,4 @@
vendor /vendor ext4 noatime,ro,errors=panic wait,first_stage_mount,logical
# TODO(b/185767624): turn on encryption
-/dev/block/by-name/userdata /data ext4 noatime,nosuid,nodev,errors=panic latemount,wait,check
+/dev/block/by-name/userdata /data ext4 noatime,nosuid,nodev,errors=panic latemount,wait,check,formattable
diff --git a/tests/hostside/java/android/virt/test/MicrodroidTestCase.java b/tests/hostside/java/android/virt/test/MicrodroidTestCase.java
index 94edf0b..13ca434 100644
--- a/tests/hostside/java/android/virt/test/MicrodroidTestCase.java
+++ b/tests/hostside/java/android/virt/test/MicrodroidTestCase.java
@@ -101,12 +101,6 @@
+ " userdata_composite.img",
TEST_ROOT, VIRT_APEX, VIRT_APEX);
getDevice().executeShellCommand(makeDataCompositeCmd);
- String makeDataCompositeQcow2Cmd =
- String.format(
- "cd %s; %sbin/crosvm create_qcow2 --backing_file=userdata_composite.img"
- + " userdata_composite.qcow2",
- TEST_ROOT, VIRT_APEX);
- getDevice().executeShellCommand(makeDataCompositeQcow2Cmd);
String makePayloadCompositeCmd =
String.format(
"cd %s; %sbin/mk_payload %setc/microdroid_payload.json payload.img",
@@ -119,7 +113,7 @@
Arrays.asList(
TEST_ROOT + "/os_composite.img",
TEST_ROOT + "/env_composite.img",
- TEST_ROOT + "/userdata_composite.qcow2",
+ TEST_ROOT + "/userdata_composite.img",
TEST_ROOT + "/payload.img"));
CommandResult result =
getDevice().executeShellV2Command("du -b " + String.join(" ", compositeImages));
@@ -133,7 +127,7 @@
"cd %s; %sbin/crosvm run --cid=%d --disable-sandbox --bios=bootloader"
+ " --serial=type=syslog --disk=os_composite.img"
+ " --disk=env_composite.img --disk=payload.img"
- + " --rwdisk=userdata_composite.qcow2 &",
+ + " --rwdisk=userdata_composite.img &",
TEST_ROOT, VIRT_APEX, TEST_VM_CID);
executor.execute(
() -> {