mirror of
https://github.com/siderolabs/talos.git
synced 2025-10-28 15:01:13 +01:00
Use `Progress`, and options to pass around the way messages are written. Fixed some tiny issues in the code, but otherwise no functional changes. To make colored output work with `docker run`, switched back image generation to use volume mount for output (old mode is still functioning, but it's not the default, and it works when docker is not running on the same host). Signed-off-by: Andrey Smirnov <andrey.smirnov@talos-systems.com>
36 lines
969 B
Go
36 lines
969 B
Go
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"syscall"
|
|
|
|
"github.com/dustin/go-humanize"
|
|
)
|
|
|
|
// CreateRawDisk creates a raw disk image of the specified size.
|
|
func CreateRawDisk(printf func(string, ...any), path string, diskSize int64) error {
|
|
printf("creating raw disk of size %s", humanize.Bytes(uint64(diskSize)))
|
|
|
|
f, err := os.Create(path)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to create raw disk: %w", err)
|
|
}
|
|
|
|
defer f.Close() //nolint:errcheck
|
|
|
|
if err = f.Truncate(diskSize); err != nil {
|
|
return fmt.Errorf("failed to create raw disk: %w", err)
|
|
}
|
|
|
|
if err = syscall.Fallocate(int(f.Fd()), 0, 0, diskSize); err != nil {
|
|
fmt.Fprintf(os.Stderr, "WARNING: failed to preallocate disk space for %q (size %d): %s", path, diskSize, err)
|
|
}
|
|
|
|
return f.Close()
|
|
}
|