@@ -23,6 +23,17 @@ import (
23
23
"github.com/sirupsen/logrus"
24
24
)
25
25
26
+ // Disk image size must be aigned to sector size. Qemu block layer is rounding
27
+ // up the size to 512 bytes. Apple virtualization framework reject disks not
28
+ // aligned to 512 bytes.
29
+ const sectorSize = 512
30
+
31
+ // RoundUp rounds size up to sectorSize.
32
+ func RoundUp (size int ) int {
33
+ sectors := (size + sectorSize - 1 ) / sectorSize
34
+ return sectors * sectorSize
35
+ }
36
+
26
37
// CreateRawDataDisk creates an empty raw data disk.
27
38
func CreateRawDataDisk (dir string , size int ) error {
28
39
dataDisk := filepath .Join (dir , filenames .DataDisk )
@@ -34,13 +45,15 @@ func CreateRawDataDisk(dir string, size int) error {
34
45
return err
35
46
}
36
47
defer f .Close ()
37
- return f .Truncate (int64 (size ))
48
+ roundedSize := RoundUp (size )
49
+ return f .Truncate (int64 (roundedSize ))
38
50
}
39
51
40
52
// ResizeRawDataDisk resizes a raw data disk.
41
53
func ResizeRawDataDisk (dir string , size int ) error {
42
54
dataDisk := filepath .Join (dir , filenames .DataDisk )
43
- return os .Truncate (dataDisk , int64 (size ))
55
+ roundedSize := RoundUp (size )
56
+ return os .Truncate (dataDisk , int64 (roundedSize ))
44
57
}
45
58
46
59
// ConvertToRaw converts a source disk into a raw disk.
0 commit comments