in pkg/raid/raid.go [66:97]
func (m *mirrorArray) Init() error {
if err := validateDevice(m.primary); err != nil {
return err
}
for _, dev := range m.replicas {
if err := validateDevice(dev); err != nil {
return err
}
}
if err := stopAllInactive(); err != nil {
return err
}
primaryIsRaid, err := isExistingRaidVolume(m.target, m.primary)
if err != nil {
return fmt.Errorf("Error when checking if %s is already a raid disk: %w", m.primary, err)
}
if primaryIsRaid {
return assembleExistingMirror(m.target, m.primary, m.replicas...)
}
for _, repl := range m.replicas {
replIsRaid, err := isExistingRaidVolume(m.target, repl)
if err != nil {
return fmt.Errorf("Error when checking if replica %s is aleady a raid disk: %s", repl, err)
}
if replIsRaid {
return assembleExistingMirror(m.target, repl, slices.Concat([]string{m.primary}, m.replicas)...)
}
}
return createNewMirror(m.target, slices.Concat([]string{m.primary}, m.replicas)...)
}