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:])
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']])
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))
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('')
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)
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)
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
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)
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"))
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")
#!/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]))
#!/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]))
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])