Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / src / script / smr_benchmark / linearSMRCopy.sh
1 #! /bin/bash
2
3 # copy a linear file from srcFile to destination SMRDisk in a loop until writeSize MBs is written
4 # SMRDisk is the SMR Host Aware / Host Managed Disk eg. /dev/sdb
5
6 usage(){
7         echo "linearSMRCopy.sh <srcFile> <SMRDisk> <writeSize (MB)>"
8 }
9
10 if [ "$#" -lt 3 ]; then
11         usage
12         exit
13 fi
14
15 if [ "$(id -u)" != "0" ]; then
16         echo "Please run as sudo user"
17         exit
18 fi
19
20 if which zbc_open_zone > /dev/null 2>&1 && which zbc_read_zone > /dev/null 2>&1 && which zbc_write_zone > /dev/null 2>&1 ; then
21         echo "libzbc commands present... refreshing zones"
22         # reset all write pointers before starting to write
23         sudo zbc_reset_write_ptr /dev/sdb -1
24 else
25         echo "libzbc commands not detected. Please install libzbc"
26         exit
27 fi
28
29 srcFile=$1
30 SMRDisk=$2
31 writeSize=$3
32 iosize=10240
33
34 numberOfSectors=$(($writeSize * 2048))
35
36 smrZoneStart=33554432 # TODO query this from SMR drive
37
38 #dd if=$srcFile of=$destDisk seek=$smrZoneStart bs=512
39
40 fileSize=`stat --printf="%s" $srcFile`
41
42 if [ "$(($fileSize % 512))" -ne 0 ]; then
43         echo "$srcFile not 512 byte aligned"
44         exit
45 fi
46
47 sectorsLeftToWrite=$(($fileSize / 512))
48
49 znum=64 # TODO query this from SMR Drive
50
51 zoneLength=524288 # number of sectors in each zone TODO query from SMR drive
52
53 writeOffset=$smrZoneStart
54
55 sectorsLeftToWrite=$numberOfSectors
56
57 echo "write begin sectors Left = $sectorsLeftToWrite, writeOffset = $writeOffset zone Num = $znum"
58
59 while [ "$sectorsLeftToWrite" -gt 0 ]; 
60 do
61         sudo zbc_open_zone $SMRDisk $znum 
62         sudo time zbc_write_zone -f $srcFile -loop $SMRDisk $znum $iosize
63         sudo zbc_close_zone /dev/sdb $znum
64         writeOffset=$(($writeOffset+$zoneLength))
65         znum=$(($znum+1))
66         sectorsLeftToWrite=$(($sectorsLeftToWrite - $zoneLength))
67 done
68
69 echo "write end sectors Left = $sectorsLeftToWrite, writeOffset = $writeOffset zone Num = $znum"