func()

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)...)
}