mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
Merge pull request #12335 from zexi/adaptec-raid-mode
fix(baremetal): adjust adaptec raid logical volume order
This commit is contained in:
@@ -2448,9 +2448,7 @@ func (s *SBaremetalServer) DoDiskConfig(term *ssh.Client) error {
|
||||
}
|
||||
}
|
||||
|
||||
tool := disktool.NewSSHPartitionTool(term)
|
||||
tool.FetchDiskConfs(baremetal.GetDiskConfigurations(layouts))
|
||||
err = tool.RetrieveDiskInfo()
|
||||
tool, err := disktool.NewSSHPartitionTool(term, layouts)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -2529,11 +2527,9 @@ func (s *SBaremetalServer) DoPartitionDisk(term *ssh.Client) ([]*disktool.Partit
|
||||
return nil, errors.Wrapf(err, "CalculateLayout")
|
||||
}
|
||||
|
||||
tool := disktool.NewSSHPartitionTool(term)
|
||||
tool.FetchDiskConfs(baremetal.GetDiskConfigurations(layouts))
|
||||
err = tool.RetrieveDiskInfo()
|
||||
tool, err := disktool.NewSSHPartitionTool(term, layouts)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "RetrieveDiskInfo")
|
||||
return nil, errors.Wrapf(err, "NewSSHPartitionTool")
|
||||
}
|
||||
|
||||
disks, _ := s.desc.GetArray("disks")
|
||||
@@ -2606,9 +2602,7 @@ func (s *SBaremetalServer) DoRebuildRootDisk(term *ssh.Client) ([]*disktool.Part
|
||||
return nil, err
|
||||
}
|
||||
|
||||
tool := disktool.NewSSHPartitionTool(term)
|
||||
tool.FetchDiskConfs(baremetal.GetDiskConfigurations(layouts))
|
||||
err = tool.RetrieveDiskInfo()
|
||||
tool, err := disktool.NewSSHPartitionTool(term, layouts)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -753,7 +753,7 @@ type SSHPartitionTool struct {
|
||||
term *ssh.Client
|
||||
}
|
||||
|
||||
func NewSSHPartitionTool(term *ssh.Client) *SSHPartitionTool {
|
||||
func newSSHPartitionTool(term *ssh.Client) *SSHPartitionTool {
|
||||
tool := &SSHPartitionTool{
|
||||
term: term,
|
||||
}
|
||||
@@ -761,6 +761,15 @@ func NewSSHPartitionTool(term *ssh.Client) *SSHPartitionTool {
|
||||
return tool
|
||||
}
|
||||
|
||||
func NewSSHPartitionTool(term *ssh.Client, layouts []baremetal.Layout) (*SSHPartitionTool, error) {
|
||||
tool := newSSHPartitionTool(term)
|
||||
tool.FetchDiskConfs(baremetal.GetDiskConfigurations(layouts))
|
||||
if err := tool.RetrieveDiskInfo(); err != nil {
|
||||
return nil, errors.Wrapf(err, "RetrieveDiskInfo")
|
||||
}
|
||||
return tool, nil
|
||||
}
|
||||
|
||||
func (tool *SSHPartitionTool) Run(cmds ...string) ([]string, error) {
|
||||
return tool.term.Run(cmds...)
|
||||
}
|
||||
|
||||
@@ -58,7 +58,7 @@ func GetCommand(args ...string) string {
|
||||
return raid.GetCommand(bin, args...)
|
||||
}
|
||||
|
||||
func (raid *AdaptecRaid) GetName() string {
|
||||
func (r *AdaptecRaid) GetName() string {
|
||||
return baremetal.DISK_DRIVER_ADAPTECRAID
|
||||
}
|
||||
|
||||
@@ -77,8 +77,8 @@ func (r *AdaptecRaid) ParsePhyDevs() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (raid *AdaptecRaid) CleanRaid() error {
|
||||
for _, ada := range raid.adapters {
|
||||
func (r *AdaptecRaid) CleanRaid() error {
|
||||
for _, ada := range r.adapters {
|
||||
ada.removeJBODDisks()
|
||||
ada.RemoveLogicVolumes()
|
||||
}
|
||||
@@ -114,17 +114,17 @@ func getAdaptorIndex(line string) int {
|
||||
return adapInt
|
||||
}
|
||||
|
||||
func (raid *AdaptecRaid) parsePhyDevs(lines []string) error {
|
||||
func (r *AdaptecRaid) parsePhyDevs(lines []string) error {
|
||||
for _, line := range lines {
|
||||
index := getAdaptorIndex(line)
|
||||
if index == -1 {
|
||||
continue
|
||||
}
|
||||
ada, err := NewAdaptecRaidAdaptor(index, raid)
|
||||
ada, err := NewAdaptecRaidAdaptor(index, r)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "New raid adaptor %d", index)
|
||||
}
|
||||
raid.adapters = append(raid.adapters, ada)
|
||||
r.adapters = append(r.adapters, ada)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -167,24 +167,9 @@ func (ada *AdaptecRaidAdaptor) GetIndex() int {
|
||||
}
|
||||
|
||||
func (ada *AdaptecRaidAdaptor) PreBuildRaid(confs []*api.BaremetalDiskConfig) error {
|
||||
// set to raid expose raw mode or mixed mode
|
||||
if !ada.isRaidExposeRawMode() && !ada.isMixedMode() {
|
||||
err := func() error {
|
||||
errs := []error{}
|
||||
if err := ada.setControllerModeRaidExposeRaw(); err != nil {
|
||||
errs = append(errs, err)
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
if err := ada.setControllerModeMixed(); err != nil {
|
||||
errs = append(errs, err)
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
return errors.NewAggregate(errs)
|
||||
}()
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "set raid to expose raw or mixed mode")
|
||||
if !ada.isRaidHideRawMode() {
|
||||
if err := ada.setControllerModeRaidHideRaw(); err != nil {
|
||||
return errors.Wrapf(err, "set controller mode to raid hide raw mode")
|
||||
}
|
||||
}
|
||||
if err := ada.removeJBODDisks(); err != nil {
|
||||
@@ -365,6 +350,26 @@ func (ada *AdaptecRaidAdaptor) buildJBOD(dev *baremetal.BaremetalStorage) error
|
||||
}
|
||||
|
||||
func (ada *AdaptecRaidAdaptor) buildNonRaid(dev *baremetal.BaremetalStorage) error {
|
||||
// set to raid expose raw mode or mixed mode
|
||||
if !ada.isRaidExposeRawMode() && !ada.isMixedMode() {
|
||||
err := func() error {
|
||||
errs := []error{}
|
||||
if err := ada.setControllerModeRaidExposeRaw(); err != nil {
|
||||
errs = append(errs, err)
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
if err := ada.setControllerModeMixed(); err != nil {
|
||||
errs = append(errs, err)
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
return errors.NewAggregate(errs)
|
||||
}()
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "set raid to expose raw or mixed mode")
|
||||
}
|
||||
}
|
||||
// try build JBOD firstly
|
||||
if err := ada.buildJBOD(dev); err != nil {
|
||||
log.Warningf("try build JBOD error: %v", err)
|
||||
|
||||
@@ -65,7 +65,7 @@ func GetDriverByKernelModule(module string, term raid.IExecTerm) (raid.IRaidDriv
|
||||
name = baremetal.DISK_DRIVER_HPSARAID
|
||||
case raid.MODULE_MPT2SAS, raid.MODULE_MPT3SAS:
|
||||
name = baremetal.DISK_DRIVER_MPT2SAS
|
||||
case raid.MODULE_AACRAID:
|
||||
case raid.MODULE_AACRAID, raid.MODULE_SMARTPQI:
|
||||
name = baremetal.DISK_DRIVER_ADAPTECRAID
|
||||
}
|
||||
if name == "" {
|
||||
@@ -96,13 +96,13 @@ func BuildRaid(driver raid.IRaidDriver, confs []*api.BaremetalDiskConfig, adapte
|
||||
if adapter == nil {
|
||||
return fmt.Errorf("Not found adapter by index %d", adapterIdx)
|
||||
}
|
||||
if err := buildRaid(adapter, confs); err != nil {
|
||||
if err := buildRaid(driver, adapter, confs); err != nil {
|
||||
return fmt.Errorf("Driver %s, adapter %d build raid: %v", driver.GetName(), adapterIdx, err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func buildRaid(adapter raid.IRaidAdapter, confs []*api.BaremetalDiskConfig) error {
|
||||
func buildRaid(driver raid.IRaidDriver, adapter raid.IRaidAdapter, confs []*api.BaremetalDiskConfig) error {
|
||||
if err := adapter.PreBuildRaid(confs); err != nil {
|
||||
return fmt.Errorf("PreBuildRaid: %v", err)
|
||||
}
|
||||
@@ -142,6 +142,7 @@ func buildRaid(adapter raid.IRaidAdapter, confs []*api.BaremetalDiskConfig) erro
|
||||
if err != nil {
|
||||
return fmt.Errorf("Build raid %s: %v", conf.Conf, err)
|
||||
}
|
||||
log.Infof("Build %s:%d raid %s", driver.GetName(), adapter.GetIndex(), conf.Conf)
|
||||
}
|
||||
if len(nonDisks) > 0 {
|
||||
if err := adapter.BuildNoneRaid(nonDisks); err != nil {
|
||||
|
||||
@@ -37,6 +37,7 @@ const (
|
||||
MODULE_MPT2SAS = "mpt2sas"
|
||||
MODULE_MPT3SAS = "mpt3sas"
|
||||
MODULE_AACRAID = "aacraid"
|
||||
MODULE_SMARTPQI = "smartpqi"
|
||||
)
|
||||
|
||||
const (
|
||||
|
||||
@@ -572,9 +572,8 @@ func (p *SSHPartition) Zerofree() {
|
||||
}
|
||||
|
||||
func MountSSHRootfs(term *ssh.Client, layouts []baremetal.Layout) (*SSHPartition, fsdriver.IRootFsDriver, error) {
|
||||
tool := disktool.NewSSHPartitionTool(term)
|
||||
tool.FetchDiskConfs(baremetal.GetDiskConfigurations(layouts))
|
||||
if err := tool.RetrieveDiskInfo(); err != nil {
|
||||
tool, err := disktool.NewSSHPartitionTool(term, layouts)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
tool.RetrievePartitionInfo()
|
||||
|
||||
Reference in New Issue
Block a user