talos
1// This Source Code Form is subject to the terms of the Mozilla Public
2// License, v. 2.0. If a copy of the MPL was not distributed with this
3// file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
5package utils6
7import (8"fmt"9"os"10"syscall"11
12"github.com/dustin/go-humanize"13)
14
15// CreateRawDisk creates a raw disk image of the specified size.
16func CreateRawDisk(printf func(string, ...any), path string, diskSize int64) error {17printf("creating raw disk of size %s", humanize.Bytes(uint64(diskSize)))18
19f, err := os.Create(path)20if err != nil {21return fmt.Errorf("failed to create raw disk: %w", err)22}23
24defer f.Close() //nolint:errcheck25
26if err = f.Truncate(diskSize); err != nil {27return fmt.Errorf("failed to create raw disk: %w", err)28}29
30if err = syscall.Fallocate(int(f.Fd()), 0, 0, diskSize); err != nil {31fmt.Fprintf(os.Stderr, "WARNING: failed to preallocate disk space for %q (size %d): %s", path, diskSize, err)32}33
34return f.Close()35}
36