示例#1
0
def download(dev, path):
    dev = init_device(dev)
    with open(path, 'r') as fp:
        data = fp.read()
    ## check fw if multiple of 512
    res = len(data) % 512
    if res != 0:
        data += (chr(0) * (512 - re))  #必须512的倍数,不足补齐
    ##
    lba = 0
    length = len(data) / 512
    #
    quotients = int(length / Transfer_Size)
    remainders = length % Transfer_Size
    ##
    data_size = 512 * Transfer_Size
    dataview = memoryview(data)
    with SCSI(dev, 512) as s:
        for i in range(0, quotients):
            s.download_microcode(lba, Transfer_Size,
                                 dataview[i * data_size:(i + 1) * data_size])
            lba += Transfer_Size
        if remainders != 0:
            s.download_microcode(lba, remainders,
                                 dataview[quotients * data_size:])
示例#2
0
def main():
    i = 1
    lba = 0
    while i < len(sys.argv):
        if sys.argv[i] == '--help':
            return usage()
        if sys.argv[i] == '-l':
            del sys.argv[i]
            lba = int(sys.argv[i], 10)
            del sys.argv[i]
            continue
        i += 1

    if len(sys.argv) < 2:
        return usage()

    device = sys.argv[1]

    sd = init_device(device)
    s = SCSI(sd)

    r = s.readcapacity16().result
    if not r['lbpme']:
        print 'LUN is fully provisioned.'
        return

    r = s.getlbastatus(lba).result
    for i in range(len(r['lbas'])):
        print 'LBA:%d-%d %s' % (r['lbas'][i]['lba'], r['lbas'][i]['lba'] +
                                r['lbas'][i]['num_blocks'] - 1,
                                P_STATUS[r['lbas'][i]['p_status']])
示例#3
0
def main():
    dev = sys.argv[1]
    device = init_device(sys.argv[1])
    ##
    data = DataGen()
    t_interval = 1
    gc_cycle = 0
    print("Writing...")
    with SCSI(device, 512) as s:
        t_new = t_start = time.time()
        for i in range(0, 1000215215):
            cmd = s.write_DMA16(i, 1, data.gen_new_unit_data_write(i))
            t_current = time.time()
            if i % 100000 == 0:
                gc_cycle += 1
                gc.collect()
            if (t_current - t_new) >= t_interval:
                t_new = t_current
                total_write = i / 2048  # MB
                time_used = t_new - t_start
                print(
                    '[Total write: %.5fGB/%sGB, used time: %ds, rate: %.5f MB/s, gc cycles: %d]'
                    % (total_write / 1024, '512', time_used,
                       (total_write / time_used), gc_cycle),
                    end='\r')

    print('')
    print('')
    print('Total used: %ss' % (time.time() - t_start))
示例#4
0
def main():
    GetOptions()
    device = init_device(dev)
    with SCSI(device, options.bs) as s:
        print('issuing write command')
        print("%s:" % device._file_name)
        cmd = s.write_DMA16(options.slba, options.nlb, options.data)
        print('')
示例#5
0
文件: mtx.py 项目: rosjat/python-scsi
def main():
    device = ''
    for i in range(len(sys.argv)):
        if sys.argv[i] == '-f':
            del sys.argv[i]
            device = sys.argv[i]
            del sys.argv[i]
            break

    if not device:
        usage()
        exit(1)

    scsi = SCSI(init_device(device))
    i = scsi.inquiry().result
    if i['peripheral_device_type'] != INQUIRY.DEVICE_TYPE.MEDIA_CHANGER_DEVICE:
        print '%s is not a MediaChanger device' % device
        exit(1)

    eaa = scsi.modesense6(page_code=MODESENSE6.PAGE_CODE.ELEMENT_ADDRESS_ASSIGNMENT).result['mode_pages'][0]

    # get the data transfer elements
    dte = scsi.readelementstatus(
        start=eaa['first_data_transfer_element_address'],
        num=eaa['num_data_transfer_elements'],
        element_type=READELEMENTSTATUS.ELEMENT_TYPE.DATA_TRANSFER,
        voltag=1, curdata=1, dvcid=1,
        alloclen=16384).result['element_status_pages'][0]['element_descriptors']

    # get all the storage elements
    se = scsi.readelementstatus(
        start=eaa['first_storage_element_address'],
        num=eaa['num_storage_elements'],
        element_type=READELEMENTSTATUS.ELEMENT_TYPE.STORAGE,
        voltag=1, curdata=1, dvcid=1,
        alloclen=16384).result['element_status_pages'][0]['element_descriptors']

    # get all the medium transport elements
    mte = scsi.readelementstatus(
        start=eaa['first_medium_transport_element_address'],
        num=eaa['num_medium_transport_elements'],
        element_type=READELEMENTSTATUS.ELEMENT_TYPE.MEDIUM_TRANSPORT,
        voltag=1, curdata=1, dvcid=1,
        alloclen=16384).result['element_status_pages'][0]['element_descriptors']

    if sys.argv[1] == 'status':
        return status(scsi, dte, se)

    if sys.argv[1] == 'load':
        return load(scsi, mte, dte, se, int(sys.argv[2]), int(sys.argv[3]))

    if sys.argv[1] == 'unload':
        return unload(scsi, mte, dte, se, int(sys.argv[2]), int(sys.argv[3]))

    usage()
    exit(1)
示例#6
0
def main():
    device = ''
    for i in range(len(sys.argv)):
        if sys.argv[i] == '-f':
            del sys.argv[i]
            device = sys.argv[i]
            del sys.argv[i]
            break

    if not device:
        usage()
        exit(1)

    scsi = SCSI(init_device(device))
    i = scsi.inquiry().result
    if i['peripheral_device_type'] != INQUIRY.DEVICE_TYPE.MEDIA_CHANGER_DEVICE:
        print('%s is not a MediaChanger device' % device)
        exit(1)

    eaa = scsi.modesense6(page_code=MODESENSE6.PAGE_CODE.ELEMENT_ADDRESS_ASSIGNMENT).result['mode_pages'][0]

    # get the data transfer elements
    dte = scsi.readelementstatus(
        start=eaa['first_data_transfer_element_address'],
        num=eaa['num_data_transfer_elements'],
        element_type=READELEMENTSTATUS.ELEMENT_TYPE.DATA_TRANSFER,
        voltag=1, curdata=1, dvcid=1,
        alloclen=16384).result['element_status_pages'][0]['element_descriptors']

    # get all the storage elements
    se = scsi.readelementstatus(
        start=eaa['first_storage_element_address'],
        num=eaa['num_storage_elements'],
        element_type=READELEMENTSTATUS.ELEMENT_TYPE.STORAGE,
        voltag=1, curdata=1, dvcid=1,
        alloclen=16384).result['element_status_pages'][0]['element_descriptors']

    # get all the medium transport elements
    mte = scsi.readelementstatus(
        start=eaa['first_medium_transport_element_address'],
        num=eaa['num_medium_transport_elements'],
        element_type=READELEMENTSTATUS.ELEMENT_TYPE.MEDIUM_TRANSPORT,
        voltag=1, curdata=1, dvcid=1,
        alloclen=16384).result['element_status_pages'][0]['element_descriptors']

    if sys.argv[1] == 'status':
        return status(scsi, dte, se)

    if sys.argv[1] == 'load':
        return load(scsi, mte, dte, se, int(sys.argv[2]), int(sys.argv[3]))

    if sys.argv[1] == 'unload':
        return unload(scsi, mte, dte, se, int(sys.argv[2]), int(sys.argv[3]))

    usage()
    exit(1)
示例#7
0
def handle_para():
    if "-h" in sys.argv or "--help" in sys.argv:
        usage()
        sys.exit()
    if "-V" in sys.argv or '--version' in sys.argv:
        print("%s %s" % (sys.argv[0], Version))
        print('')
        sys.exit()
    if len(sys.argv) == 2:
        dev = sys.argv[1]
        if "/dev/" in dev:
            device = init_device(dev)
        else:
            raise RuntimeError("device Format Error!")
    else:
        usage()
        sys.exit()
    ParaDict = {"device": device}
    return ParaDict
示例#8
0
def main():
    GetOptions()
    device = init_device(dev)
    with SCSI(device, options.bs) as s:
        print('issuing read command')
        print("%s:" % device._file_name)
        cmd = s.read_DMA16(options.slba, options.nlb)
        print('')
        print('Data Out:')
        print('len: %d' % (len(cmd.datain)))
        print(cmd.datain)
        print('')
        sense_data = SenseData(cmd.sense)
        print('sense', sense_data.value)
        print('ata_return_descriptor',
              sense_data.ATAStatusReturnDescriptor.value)
        print('Extend', sense_data.ATAStatusReturnDescriptor.ExtendByte.Extend)
        print('status err_bit',
              sense_data.ATAStatusReturnDescriptor.Status.ERROR_bit)
        print(
            'sense available', sense_data.ATAStatusReturnDescriptor.Status.
            SENSE_DATA_AVAILABLE_bit)
示例#9
0
def main():
    swp_on = 0
    swp_off = 0
    i = 1
    while i < len(sys.argv):
        if sys.argv[i] == '--help':
            return usage()
        if sys.argv[i] == '--on':
            del sys.argv[i]
            swp_on = 1
            continue
        if sys.argv[i] == '--off':
            del sys.argv[i]
            swp_off = 1
            continue
        i += 1

    if len(sys.argv) < 2:
        return usage()

    device = sys.argv[1]

    sd = init_device(device)
    s = SCSI(sd)
    i = s.modesense6(page_code=MODESENSE6.PAGE_CODE.CONTROL).result

    if swp_on:
        i['mode_pages'][0]['swp'] = 1
        s.modeselect6(i)
        print('Set SWP ON')
        return

    if swp_off:
        i['mode_pages'][0]['swp'] = 0
        s.modeselect6(i)
        print('Set SWP OFF')
        return

    print('SWP is %s' % ("ON" if i['mode_pages'][0]['swp'] else "OFF"))
示例#10
0
文件: swp.py 项目: rosjat/python-scsi
def main():
    swp_on = 0
    swp_off = 0
    i = 1
    while i < len(sys.argv):
        if sys.argv[i] == '--help':
            return usage()
        if sys.argv[i] == '--on':
            del sys.argv[i]
            swp_on = 1
            continue
        if sys.argv[i] == '--off':
            del sys.argv[i]
            swp_off = 1
            continue
        i += 1

    if len(sys.argv) < 2:
        return usage()

    device = sys.argv[1]

    sd = init_device(device)
    s = SCSI(sd)
    i = s.modesense6(page_code=MODESENSE6.PAGE_CODE.CONTROL).result

    if swp_on:
        i['mode_pages'][0]['swp'] = 1
        s.modeselect6(i)
        print 'Set SWP ON'
        return

    if swp_off:
        i['mode_pages'][0]['swp'] = 0
        s.modeselect6(i)
        print 'Set SWP OFF'
        return

    print 'SWP is %s' % ("ON" if i['mode_pages'][0]['swp'] else "OFF")
示例#11
0
#!/usr/bin/env python
# coding: utf-8

#
# A simple example to get a dict with reported luns
#
import sys

from pyscsi.pyscsi.scsi import SCSI
from pyscsi.utils import init_device


def main(device):
    with SCSI(device) as s:
        print('ReportLuns')
        print('==========================================\n')
        r = s.reportluns().result
        for k, v in r.iteritems():
            print('%s - %s' % (k, v))


if __name__ == "__main__":
    main(init_device(sys.argv[1]))
示例#12
0
#!/usr/bin/env python
# coding: utf-8

#
# A simple example to get a dict with reported luns
#
import sys

from pyscsi.pyscsi.scsi import SCSI
from pyscsi.utils import init_device


def main(device):
    with SCSI(device) as s:
        s.testunitready()
        print ('ReportPriority')
        print ('==========================================\n')
        r = s.reportpriority().result
        for k, v in r.iteritems():
            print('%s - %s' % (k, v))


if __name__ == "__main__":
    main(init_device(sys.argv[1]))
示例#13
0
def main():
    i = 1
    page_code = 0
    evpd = 0
    while i < len(sys.argv):
        if sys.argv[i] == '--help':
            return usage()
        if sys.argv[i] == '-p':
            del sys.argv[i]
            page_code = int(sys.argv[i], 16)
            evpd = 1
            del sys.argv[i]
            continue
        i += 1

    if len(sys.argv) < 2:
        return usage()

    device = init_device(sys.argv[1])

    with SCSI(device) as s:

        try:
            s.testunitready()

            if not evpd:
                inquiry_standard(s)
                return

            if page_code == INQUIRY.VPD.SUPPORTED_VPD_PAGES:
                inquiry_supported_vpd_pages(s)
                return

            if page_code == INQUIRY.VPD.BLOCK_LIMITS:
                inquiry_block_limits(s)
                return

            if page_code == INQUIRY.VPD.BLOCK_DEVICE_CHARACTERISTICS:
                inquiry_block_dev_char(s)
                return

            if page_code == INQUIRY.VPD.LOGICAL_BLOCK_PROVISIONING:
                inquiry_logical_block_prov(s)
                return

            if page_code == INQUIRY.VPD.UNIT_SERIAL_NUMBER:
                inquiry_unit_serial_number(s)
                return

            if page_code == INQUIRY.VPD.DEVICE_IDENTIFICATION:
                inquiry_device_identification(s)
                return

            if page_code == INQUIRY.VPD.ATA_INFORMATION:
                inquiry_ata_information(s)
                return

            print('No pretty print( for this page, page_code=0x%02x' % page_code)
            print('=============================================\n')
            cmd = s.inquiry(evpd=1, page_code=page_code)
            i = cmd.result
            for k, v in i.items():
                print('%s - %s' % (k, v))
        except SCSICheckCondition as ex:
            # if you want a print out of the sense data dict uncomment the next line
            #ex.show_data = True
            print(ex)
        cmd = Read16(sbc.READ_16, blocksize=512, lba=1, tl=1)
        d.execute(cmd)
        print_output(cmd.datain)


def print_output(r):
    print('Read16 - GPT Header')
    print('==========================================\n')
    print('signature: %s' % r[:8])
    print('revision: %.1f' % float(ba_to_int(r[8:12])))
    print('header size: %s byte' % ba_to_int(r[12:16]))
    print('crc32 of header: %s' % ba_to_hex(r[16:20]))
    print('reserved: %s' % ba_to_int(r[20:24]))
    print('current LBA: %s' % ba_to_int(r[24:32]))
    print('backup LBA: %s' % ba_to_int(r[32:40]))
    print('first usable LBA for partitions: %s' % ba_to_int(r[40:48]))
    print('last usable LBA: %s' % ba_to_int(r[48:56]))
    print('Disk GUID: %s' % ba_to_hex(r[56:72]))
    print('Starting LBA of array of partition entries: %s' %
          ba_to_int(r[72:80]))
    print('number of partition entries in array: %s' % ba_to_int(r[80:84]))
    print('size of a single partition entry: %s' % ba_to_int(r[84:88]))
    print('crc32 of header: %s' % ba_to_hex(r[88:92]))


if __name__ == "__main__":
    print('we run with init_device helper')
    with_init_device(init_device(sys.argv[1]))
    print('we run without init_device helper')
    without_init_device(sys.argv[1])