コード例 #1
0
ファイル: snapshot.py プロジェクト: zhenshuitieniu/sdfs
def create_new_snapshot(home, lun, snapname):
    cmd = os.path.join(home, "libexec/lich.snapshot")
    snapshot = "%s@%s" % (lun, snapname)
    try:
        _exec_pipe1([cmd, '--create', snapshot], 1, False)
    except Exp, e:
        raise Exp(e.errno, e.err)
コード例 #2
0
    def __check_raid_env(self):
        host_type = platform.architecture()[0]
        raid_type = []
        ls_pci = None

        try:
            ls_pci = _exec_pipe(["lspci"], 0, False)
        except:
            return None

        for line in ls_pci.splitlines():
            if 'RAID bus controller: LSI Logic / Symbios Logic MegaRAID' in line:
                cmd = "/opt/MegaRAID/MegaCli/MegaCli"
                if host_type == '64bit':
                    cmd += '64'
                try:
                    (out_msg, err_msg) = _exec_pipe1([cmd, "-v", "-Nolog"], 0,
                                                     False, 10)
                except Exception, e:
                    raise Exp(errno.EPERM, cmd + " command execute failed")
                try:
                    (out_msg, err_msg) = _exec_pipe1(["disk2lid"], 0, False)
                except Exception, e:
                    _derror("disk2lid command execute failed")
                    return None
                if 'MegaRAID' not in raid_type:
                    raid_type.append('MegaRAID')
コード例 #3
0
ファイル: disk.py プロジェクト: zhenshuitieniu/sdfs
 def dev_reset_sgdisk(self, dev):
     try:
         disk_info = self.dev_check_sgdisk(dev)
         if disk_info.splitlines()[0].strip(
         ) != 'Creating new GPT entries.':
             try:
                 _exec_pipe1(["sgdisk", "-z", dev], 0, False, 5)
             except Exception, e:
                 pass
     except Exception, e:
         try:
             _exec_pipe1(["sgdisk", "-z", dev], 0, False, 5)
         except Exception, e:
             pass
コード例 #4
0
ファイル: disk.py プロジェクト: zhenshuitieniu/sdfs
    def set_dev_cache(self, dev, cache, force=False):
        if not dev.startswith("/dev/"):
            dev = "/dev/" + dev
        if not self.is_dev(dev):
            raise Exp(errno.EINVAL, os.strerror(errno.EINVAL))

        switch = '1' if cache == 'enable' else '0'
        try:
            _exec_pipe1(["hdparm", "-W", switch, dev], 0, False)
        except Exception, e:
            if not force:
                raise Exp(errno.EPERM,
                          "set disk %s cache faile:%s" % (dev, e.message))
            else:
                _dwarn("set disk %s cache faile, %s" % (dev, e.message))
コード例 #5
0
ファイル: etcd_manage.py プロジェクト: zhenshuitieniu/sdfs
    def etcd_set(cls, meta_list, state, proxy=False):
        cluster = ""
        config = Config()

        if not cls.etcd_role_is_changed(proxy) and not cls.etcd_meta_list_is_changed(meta_list):
            _dwarn("etcd cluster not change, no need set!")
            return

        for i in meta_list:
            cluster = cluster + "%s=http://%s:2380," % (i, i)

        cls.etcd_set_config(cluster[:-1], state, proxy)

        if not os.path.isdir(config.etcd_data_path):
            os.system("mkdir -p %s" % (config.etcd_data_path))
            os.system("chown etcd.etcd %s" % (config.etcd_data_path))
        else:
            os.system("systemctl stop etcd")
            os.system("rm -rf %s/*" % (config.etcd_data_path))

        #if cls.etcd_get_role() == ETCD_RUN_AS_PROXY and not proxy:
        #    cmd = "systemctl stop etcd && rm -rf %s/proxy" % (config.etcd_data_path)
         #   _exec_shell1(cmd, p=False)

        s = _exec_pipe1(["systemctl", 'restart', 'etcd'], 1, False)
コード例 #6
0
    def mount_dev(self, dev, force = 0):
        self.dev = dev
        try:
            self.dir = "/mnt/snap"
            _exec_system("mkdir -p %s" % self.dir)
        except:
            pass

        if not stat.S_ISBLK(os.lstat(os.path.realpath(self.dev)).st_mode):
            raise Exp('not a block device', dev)

        try:
            (out, err) = _exec_pipe1(["mount", self.dev, self.dir], 0, self.verbose, 0)
        except Exp, e:
            out = e.out
            err = e.err
            for line in err.splitlines():
                m1 = re.search('you must specify the filesystem type', line)
                m2 = re.search('wrong fs type, bad option', line)
                if m1 is not None or m2 is not None:
                    if force:
                        self.disk.dev_format(self.dev, self.verbose)
                        self.disk.dev_mount(self.dev, self.dir, self.verbose)
                    else:
                        _derror('wrong fs type, you must specify the filesystem type or use --force')
                        exit(e.errno)
コード例 #7
0
ファイル: disk.py プロジェクト: zhenshuitieniu/sdfs
 def check_tool(self):
     return 'syscall'
     try:
         (out_msg, err_msg) = _exec_pipe1(["sgdisk"], 0, False)
     except Exp, e:
         if e.err.startswith('Usage:'):
             return 'sgdisk'
コード例 #8
0
ファイル: disk.py プロジェクト: zhenshuitieniu/sdfs
    def set_dev_label(self, dev, label, verbose=False):
        if not dev.startswith("/dev/"):
            dev = "/dev/" + dev
        if not self.is_block(dev):
            raise Exp(errno.EINVAL, os.strerror(errno.EINVAL))

        (out_msg, err_msg) = _exec_pipe1(["e2label", dev, label], 0, verbose)
        if (verbose):
            print(err_msg.strip())
コード例 #9
0
ファイル: disk.py プロジェクト: zhenshuitieniu/sdfs
    def get_dev_label(self, dev):
        if not dev.startswith("/dev/"):
            dev = "/dev/" + dev

        try:
            (out_msg, err_msg) = _exec_pipe1(["e2label", dev], 0, False)
            return out_msg.strip()
        except Exception:
            return None
コード例 #10
0
 def get_dev_rotation(self, dev, arg=None):
     try:
         cmd = ["smartctl", "-i"]
         if arg is not None:
             cmd += ["-d", arg]
         cmd += [dev]
         (out_msg, err_msg) = _exec_pipe1(cmd, 0, False)
     except Exp, e:
         return None
コード例 #11
0
 def __get_health_warn(self, dev, arg=None):
     warn = ''
     try:
         cmd = ["smartctl", "-H"]
         if arg is not None:
             cmd += ["-d", arg]
         cmd += [dev]
         (out_msg, err_msg) = _exec_pipe1(cmd, 0, False)
     except Exp, e:
         out_msg = e.out
コード例 #12
0
ファイル: disk.py プロジェクト: zhenshuitieniu/sdfs
    def dev_check_parted(self, dev, ignore_err=True):
        if dev in self.dev_check:
            return self.dev_check[dev]

        try:
            (out_msg, err_msg) = _exec_pipe1(["parted", dev, "print", "-s"], 0,
                                             False, 5)
        except Exp, e:
            out_msg = e.out
            err_msg = e.err
コード例 #13
0
ファイル: disk.py プロジェクト: zhenshuitieniu/sdfs
    def dev_check_sgdisk(self, dev, ignore_err=True):
        if dev in self.dev_check:
            return self.dev_check[dev]

        try:
            (out_msg, err_msg) = _exec_pipe1(["sgdisk", "-p", dev], 0, False,
                                             5)
        except Exp, e:
            out_msg = e.out
            err_msg = e.err
コード例 #14
0
 def create_snap(self, lun):
     stime = time.strftime('%m%d%H%M')
     snap = self.defaultpath + lun + "@" + stime
     cmd = [self.lich_snapshot, "--create", snap]
     try:
         (out, err) = _exec_pipe1(cmd, 0, self.verbose)
     except Exp, e:
         if e.err:
             _derror(str(e.err))
             exit(e.errno)
コード例 #15
0
ファイル: snapshot.py プロジェクト: zhenshuitieniu/sdfs
def list_snapshot(home, lun):
    res = []

    cmd = os.path.join(home, "libexec/lich.snapshot")
    try:
        (out_msg, err_msg) = _exec_pipe1([cmd, '--list', lun], 1, False)
        res = out_msg.split('\n')
        return res[0:len(res) - 1]
    except Exp, e:
        raise Exp(e.errno, e.err)
コード例 #16
0
ファイル: lvm.py プロジェクト: zhenshuitieniu/sdfs
    def get_sys_pvs(self):
        pvs = {}
        res, err = _exec_pipe1(["pvs"], 0, False, 5)
        for line in res.splitlines()[1:]:
            fields = line.split()
            if fields[1] not in pvs:
                pvs[fields[1]] = []
            if fields[0] not in pvs[fields[1]]:
                pvs[fields[1]].append(fields[0])

        return pvs
コード例 #17
0
ファイル: gstorage.py プロジェクト: xin3244/mine
 def is_dir(self, path):
     cmd = [self.lichfs, "--stat", path]
     try:
         (out, err) = _exec_pipe1(cmd, 0, False)
         for line in out.splitlines():
             m = re.match(".*Id:\s+(pool).*", line)
             if m is not None:
                 return True
     except Exp, e:
         if e.err:
             _derror(str(e.err))
             exit(e.errno)
コード例 #18
0
ファイル: gstorage.py プロジェクト: xin3244/mine
 def getallocated(self, path):
     cmd = [self.config.inspect, "--stat", path]
     try:
         (out, err) = _exec_pipe1(cmd, 0, False)
         for line in out.splitlines():
             m = re.match("\s*allocated :\s+(\d*).*", line)
             if m is not None:
                 return m.group(1)
     except Exp, e:
         if e.err:
             _derror(str(e.err))
             exit(e.errno)
コード例 #19
0
 def getsize(self, path, v):
     cmd = [self.lichfs, "--stat", self.defaultpath + path]
     try:
         (out, err) = _exec_pipe1(cmd, 0, v)
         for line in out.splitlines():
             m = re.match("\s+Size:\s+(\d*).*", line)
             if m is not None:
                 return m.group(1)
     except Exp, e:
         if e.err:
             _derror(str(e.err))
             exit(e.errno)
コード例 #20
0
    def __get_health_errlog(self, dev, arg=None):
        errlog = ''
        islog = 0

        try:
            cmd = ["smartctl", "-l", "xerror"]
            if arg is not None:
                cmd += ["-d", arg]
            cmd += [dev]
            (out_msg, err_msg) = _exec_pipe1(cmd, 0, False)
        except Exp, e:
            out_msg = e.out
コード例 #21
0
    def get_dev_health(self, dev, arg=None):
        dev_health = 'Unknow'
        ret = 0

        try:
            cmd = ["smartctl", "-i"]
            if arg is not None:
                cmd += ["-d", arg]
            cmd += [dev]
            (out_msg, err_msg) = _exec_pipe1(cmd, 0, False)
        except Exp, e:
            out_msg = e.out
            err_msg = e.err
コード例 #22
0
 def get_dev_info(self, dev, arg=None):
     out_msg = ''
     try:
         cmd = ["smartctl", "-i"]
         if arg is not None:
             cmd += ["-d", arg]
         cmd += [dev]
         (out_msg, err_msg) = _exec_pipe1(cmd, 0, False)
     except Exp, e:
         if e.errno == errno.ENOENT:
             raise
         else:
             return None
コード例 #23
0
    def backup(self, lun, path, filename, keep, force, v):
        filepath = ""
        snap = ""
        if (filename == ""):
            name = "snapfile"
        else:
            name = filename

        if path.startswith('/dev/'):
            self.dev = path
            self.mount_dev(path, force)
            filepath = self.dir
        elif os.path.isdir(path):
            filepath = path
        elif path.startswith('/'):
            filepath = os.path.dirname(path)
            if not os.path.exists(filepath):
                try:
                    self.dir = filepath
                    _exec_system("mkdir -p %s" % self.dir)
                except:
                    pass
            #name = os.path.basename(path)
            if path.split('/')[-1] != "":
                name = path.split('/')[-1]
        else:
            self.end(keep, snap)
            _derror('path %s was wrong' % path)
            exit(errno.EINVAL)

        if (self.is_snap(lun, v)):
            snapath = self.defaultpath + lun
        elif (self.is_lun(lun, v)):
            snap = self.create_snap(lun)
            snapath = snap
        else:
            self.end(keep, snap)
            _derror('lun %s was wrong' % lun)
            exit(errno.EINVAL)

        self.check(snapath, filepath, keep, snap)
        cmd = [self.lich_snapshot, '--copy', snapath, ':' + filepath + '/' + name]
        try:
            (out, err) = _exec_pipe1(cmd, 0, self.verbose)
        except Exp, e:
            if e.err:
                self.end(keep, snap)
                _derror(str(e.err).strip())
                exit(e.errno)
コード例 #24
0
ファイル: disk.py プロジェクト: zhenshuitieniu/sdfs
    def get_dev_free_parted(self, dev):
        if not dev.startswith("/dev/"):
            dev = "/dev/" + dev

        if not self.is_dev(dev):
            raise Exp(errno.EINVAL, os.strerror(errno.EINVAL))

        if dev in self.dev_check:
            return self.dev_check[dev]

        try:
            (out_msg, err_msg) = _exec_pipe1(["parted", dev, "print", "-s"], 0,
                                             False, 5)
        except Exp, e:
            raise
コード例 #25
0
 def list_snap(self, v):
     localsnap = []
     lun = self.list_lun(v)
     for i in lun:
         tgt = self.defaultpath + i[0]
         cmd = [self.lich_snapshot, "--list", tgt]
         try:
             (out, err) = _exec_pipe1(cmd, 0, v)
             for line in out.splitlines():
                 snap = i[0] + "@" + line
                 snapsize = self.getsize(i[0]+'/'+line, v)
                 localsnap.append((i[0], snap, snapsize))
         except Exp, e:
             if e.err:
                 _derror(str(e.err))
                 exit(e.errno)
コード例 #26
0
ファイル: gstorage.py プロジェクト: xin3244/mine
    def set_lun(self, path, ext):
        if ext == 'ssd':
            num = 0
        elif ext == 'hdd':
            num = 1

        cmd = [self.config.inspect, "--tier", path, str(num)]
        try:
            (out, err) = _exec_pipe1(cmd, 0, False)
            ret = _exec_system("echo $?", False, False)
            if ret == 0:
                _dmsg('set %s %s successful' % (path, ext))
        except Exp, e:
            if e.err:
                _derror(str(e.err))
                exit(e.errno)
コード例 #27
0
 def getstat(self, path):
     cmd = [self.lichfs, "--stat", path]
     try:
         (out, err) = _exec_pipe1(cmd, 0, False)
         ret = _exec_system("echo $?", False, False)
         if ret == 0:
             self.success += 1
             #_dmsg('check %s successful' % (path))
         else:
             self.fail += 1
             self.fail_lun.append(path)
     except Exp, e:
         self.fail += 1
         self.fail_lun.append(path)
         if e.err:
             _derror(str(e.err))
             exit(e.errno)
コード例 #28
0
    def __get_health_testlog(self, dev, arg=None):
        testlog = ''
        islog = 0

        cmd = ["smartctl", "-l", "xselftest"]
        if arg is not None:
            cmd += ["-d", arg]
        cmd += [dev]
        (out_msg, err_msg) = _exec_pipe1(cmd, 0, False)
        for line in out_msg.splitlines():
            m = re.search('SMART Extended Self-test Log Version', line)
            if m is not None:
                islog = 1
                continue
            if islog == 1:
                testlog += line

        return testlog
コード例 #29
0
ファイル: lvm.py プロジェクト: zhenshuitieniu/sdfs
    def get_sys_lvs(self):
        lvs = {}
        res, err = _exec_pipe1(["lvdisplay"], 0, False, 5)
        for line in res.splitlines():
            m = re.search('\s*LV Name\s*(.*)', line)
            if m is not None:
                lv = m.group(1)
            m = re.search('\s*VG Name\s*(.*)', line)
            if m is not None:
                vg = m.group(1)
            m = re.search('\s*Block device\s*(.*)', line)
            if m is not None:
                block = m.group(1)
                if vg not in lvs:
                    lvs[vg] = {}
                lvs[vg][lv] = (block.split(':')[0], block.split(':')[1])

        return lvs
コード例 #30
0
    def end(self, keep = 0, snap = ""):
        try:
            if self.dev != "":
                self.disk.dev_umount(self.dev, self.verbose)
        except:
            pass

        if self.dir != "" and self.dev != "":
            _exec_system("rm -rf %s" % self.dir)

        if keep == 0 and snap != "":
            cmd = [self.lich_snapshot, "--remove", snap]
            try:
                (out, err) = _exec_pipe1(cmd, 0, False)
            except Exp, e:
                if e.err:
                    _derror(str(e.err))
                    exit(e.errno)