diff --git a/cmd/installer/pkg/install/install.go b/cmd/installer/pkg/install/install.go index a38c3fafa5..e9fb0f7288 100644 --- a/cmd/installer/pkg/install/install.go +++ b/cmd/installer/pkg/install/install.go @@ -15,6 +15,7 @@ import ( "github.com/siderolabs/go-blockdevice/blockdevice" "github.com/siderolabs/go-procfs/procfs" "github.com/siderolabs/go-retry/retry" + "golang.org/x/sys/unix" "github.com/siderolabs/talos/internal/app/machined/pkg/runtime" "github.com/siderolabs/talos/internal/app/machined/pkg/runtime/v1alpha1/board" @@ -377,11 +378,18 @@ func retryBlockdeviceOpen(device string) (*blockdevice.BlockDevice, error) { var openErr error bd, openErr = blockdevice.Open(device) - if openErr != nil && os.IsNotExist(openErr) { - return retry.ExpectedError(openErr) + if openErr == nil { + return nil } - return openErr + switch { + case os.IsNotExist(openErr): + return retry.ExpectedError(openErr) + case errors.Is(openErr, unix.ENODEV): + return retry.ExpectedError(openErr) + default: + return nil + } }) return bd, err diff --git a/internal/pkg/mount/mount.go b/internal/pkg/mount/mount.go index 4552cea441..9734870d83 100644 --- a/internal/pkg/mount/mount.go +++ b/internal/pkg/mount/mount.go @@ -148,7 +148,7 @@ func mountRetry(f RetryFunc, p *Point, isUnmount bool) (err error) { switch err { case unix.EBUSY: return retry.ExpectedError(err) - case unix.ENOENT: + case unix.ENOENT, unix.ENODEV: // if udevd triggers BLKRRPART ioctl, partition device entry might disappear temporarily return retry.ExpectedError(err) case unix.EUCLEAN: