| 
				
			 | 
			
			
				@@ -2,22 +2,25 @@ 
			 | 
		
	
		
			
			| 
				
					2
				
			 | 
			
				
					2
				
			 | 
			
			
				 # The script is designed to create or restore an image of a virtual machine kvm (c) 2018 
			 | 
		
	
		
			
			| 
				
					3
				
			 | 
			
				
					3
				
			 | 
			
			
				 # author Koshuba V.O. 
			 | 
		
	
		
			
			| 
				
					4
				
			 | 
			
				
					4
				
			 | 
			
			
				 # license: MIT 
			 | 
		
	
		
			
			| 
				
					5
				
			 | 
			
				
			 | 
			
			
				-# version: 4.0.5 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					5
				
			 | 
			
			
				+# version: 4.0.10 
			 | 
		
	
		
			
			| 
				
					6
				
			 | 
			
				
					6
				
			 | 
			
			
				 ## 
			 | 
		
	
		
			
			| 
				
					7
				
			 | 
			
				
					7
				
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				
					8
				
			 | 
			
				
					8
				
			 | 
			
			
				 #<manual_parameters> 
			 | 
		
	
		
			
			| 
				
					9
				
			 | 
			
				
			 | 
			
			
				-path_kvm=( "/kvm/win2012" "/kvm/win2008" );			# path kvm machines 
			 | 
		
	
		
			
			| 
				
					10
				
			 | 
			
				
			 | 
			
			
				-path_bak=( "/backup/kvm/win2012" "/backup/kvm/win2008" );	# path backup kvm machines 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					9
				
			 | 
			
			
				+path_kvm=( "/kvm/ms1" "/kvm/ms2" );				# path kvm machines 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					10
				
			 | 
			
			
				+path_bak=( "/backup/kvm/ms1" "/backup/kvm/ms2"  );		# path backup kvm machines 
			 | 
		
	
		
			
			| 
				
					11
				
			 | 
			
				
					11
				
			 | 
			
			
				 img_dev=( "sda.img" "sda.img" );				# storage kvm 
			 | 
		
	
		
			
			| 
				
					12
				
			 | 
			
				
			 | 
			
			
				-img_part=( '"sda1" "sda2" "sda3" "sda4"' '"sda1"' );		# sections in media kvm 
			 | 
		
	
		
			
			| 
				
					13
				
			 | 
			
				
			 | 
			
			
				-img_type=( '"dd" "dd" "dd" "ntfsclone"' '"ntfsclone"' );	# type backup partition:dd[fat,EFI System,Windows recovery environment,Microsoft reserved],ntfsclone[ntfs,Microsoft basic data] 
			 | 
		
	
		
			
			| 
				
					14
				
			 | 
			
				
			 | 
			
			
				-img_size=( '"300" "99" "128"' '""' );				# size partition for dd (Mb) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					12
				
			 | 
			
			
				+img_part=( '"sda1" "sda2" "sda3" "sda4"' 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					13
				
			 | 
			
			
				+           '"sda1" "sda2" "sda3" "sda4"' );			# sections in media kvm 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					14
				
			 | 
			
			
				+img_type=( '"dd" "dd" "dd" "ntfsclone"' 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					15
				
			 | 
			
			
				+           '"dd" "dd" "dd" "ntfsclone"' );			# type backup partition:dd[fat,EFI System,Windows recovery environment,Microsoft reserved],ntfsclone[ntfs,Microsoft basic data] 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					16
				
			 | 
			
			
				+img_size=( '"300" "99" "128" ""' 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					17
				
			 | 
			
			
				+           '"300" "99" "128" ""' );				# size partition for dd (Mb) 
			 | 
		
	
		
			
			| 
				
					15
				
			 | 
			
				
					18
				
			 | 
			
			
				 img_offset=( '"1048576" "315621376" "419430400" "553648128"' 
			 | 
		
	
		
			
			| 
				
					16
				
			 | 
			
				
			 | 
			
			
				-             '"1048576"' );					# offset for switch section media kvm 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					19
				
			 | 
			
			
				+             '"1048576" "315621376" "419430400" "553648128"' );	# offset for switch section media kvm 
			 | 
		
	
		
			
			| 
				
					17
				
			 | 
			
				
					20
				
			 | 
			
			
				 #</manual_parameters> 
			 | 
		
	
		
			
			| 
				
					18
				
			 | 
			
				
					21
				
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				
					19
				
			 | 
			
				
					22
				
			 | 
			
			
				 #<script_value> 
			 | 
		
	
		
			
			| 
				
					20
				
			 | 
			
				
			 | 
			
			
				-version="4.0.5"; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					23
				
			 | 
			
			
				+version="4.0.10"; 
			 | 
		
	
		
			
			| 
				
					21
				
			 | 
			
				
					24
				
			 | 
			
			
				 owner="(c) script by Koshuba V.O. 2018"; 
			 | 
		
	
		
			
			| 
				
					22
				
			 | 
			
				
					25
				
			 | 
			
			
				 msg_dat=( '"Script to save or restore the image KVM" "Скрипт сохранения или восстановления образа KVM"' 
			 | 
		
	
		
			
			| 
				
					23
				
			 | 
			
				
					26
				
			 | 
			
			
				           '"MAIN MENU" "ГЛАВНОЕ МЕНЮ"' 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -383,15 +386,15 @@ for ((iskvm=0; iskvm != ${#save_dev[@]}; iskvm++)) 
			 | 
		
	
		
			
			| 
				
					383
				
			 | 
			
				
					386
				
			 | 
			
			
				     losetup -o ${save_offset[$iskvm]} /dev/$set_loop_dev /dev/$set_loop_main; 
			 | 
		
	
		
			
			| 
				
					384
				
			 | 
			
				
					387
				
			 | 
			
			
				     if [ "${save_type[$iskvm]}" == "ntfsclone" ]; 
			 | 
		
	
		
			
			| 
				
					385
				
			 | 
			
				
					388
				
			 | 
			
			
				 	    then 
			 | 
		
	
		
			
			| 
				
					386
				
			 | 
			
				
			 | 
			
			
				-	    ntfsclone --save-image -o - /dev/$set_loop_dev| pigz -p2 -c9>$save_bak/${save_dev[$iskvm]}.img.gz; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					389
				
			 | 
			
			
				+	    ntfsclone --save-image -o - /dev/$set_loop_dev| pigz -p2 -c9>$save_bak/${save_dev[$iskvm]}_ntfs.img.gz; 
			 | 
		
	
		
			
			| 
				
					387
				
			 | 
			
				
					390
				
			 | 
			
			
				 	fi 
			 | 
		
	
		
			
			| 
				
					388
				
			 | 
			
				
					391
				
			 | 
			
			
				 	if [ "${save_type[$iskvm]}" == "dd" ]; 
			 | 
		
	
		
			
			| 
				
					389
				
			 | 
			
				
					392
				
			 | 
			
			
				 	    then 
			 | 
		
	
		
			
			| 
				
					390
				
			 | 
			
				
					393
				
			 | 
			
			
				 		if [ "${save_size[$iskvm]}" != "" ]; 
			 | 
		
	
		
			
			| 
				
					391
				
			 | 
			
				
					394
				
			 | 
			
			
				 		    then 
			 | 
		
	
		
			
			| 
				
					392
				
			 | 
			
				
			 | 
			
			
				-		    dd if=/dev/$set_loop_dev of=$save_bak/${save_dev[$iskvm]}_dd.img.gz status=progress bs=${save_size[$iskvm]}M count=1; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					395
				
			 | 
			
			
				+		    dd if=/dev/$set_loop_dev status=progress bs=${save_size[$iskvm]}M count=1|pigz -p4 -M -c9>$save_bak/${save_dev[$iskvm]}_dd.img.gz; 
			 | 
		
	
		
			
			| 
				
					393
				
			 | 
			
				
					396
				
			 | 
			
			
				 		    else 
			 | 
		
	
		
			
			| 
				
					394
				
			 | 
			
				
			 | 
			
			
				-		    echo "Warning! not found size partition ${save_dev[$iskvm]} for dd!"; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					397
				
			 | 
			
			
				+		    dd if=/dev/$set_loop_dev status=progress|pigz -p4 -M -c9>$save_bak/${save_dev[$iskvm]}_dd.img.gz; 
			 | 
		
	
		
			
			| 
				
					395
				
			 | 
			
				
					398
				
			 | 
			
			
				 		fi 
			 | 
		
	
		
			
			| 
				
					396
				
			 | 
			
				
					399
				
			 | 
			
			
				 	     
			 | 
		
	
		
			
			| 
				
					397
				
			 | 
			
				
					400
				
			 | 
			
			
				 	fi 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -430,9 +433,9 @@ for ((irkvm=0; irkvm != ${#rest_dev[@]}; irkvm++)) 
			 | 
		
	
		
			
			| 
				
					430
				
			 | 
			
				
					433
				
			 | 
			
			
				 	    then 
			 | 
		
	
		
			
			| 
				
					431
				
			 | 
			
				
					434
				
			 | 
			
			
				 		if [ "${rest_size[$irkvm]}" != "" ]; 
			 | 
		
	
		
			
			| 
				
					432
				
			 | 
			
				
					435
				
			 | 
			
			
				 		    then 
			 | 
		
	
		
			
			| 
				
					433
				
			 | 
			
				
			 | 
			
			
				-		    dd if=$rest_bak/${rest_dev[$irkvm]}_dd.img.gz of=/dev/$set_loop_rdev status=progress bs=${rest_size[$irkvm]}M count=1; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					436
				
			 | 
			
			
				+		    pigz -p4 -c -d -M $rest_bak/${rest_dev[$irkvm]}_dd.img.gz|dd of=/dev/$set_loop_rdev status=progress bs=${rest_size[$irkvm]}M count=1; 
			 | 
		
	
		
			
			| 
				
					434
				
			 | 
			
				
					437
				
			 | 
			
			
				 		    else 
			 | 
		
	
		
			
			| 
				
					435
				
			 | 
			
				
			 | 
			
			
				-		    echo "Warning! not found size partition ${rest_dev[$irkvm]} for dd!"; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				
					438
				
			 | 
			
			
				+		    pigz -p4 -c -d -M $rest_bak/${rest_dev[$irkvm]}_dd.img.gz|dd of=/dev/$set_loop_rdev status=progress; 
			 | 
		
	
		
			
			| 
				
					436
				
			 | 
			
				
					439
				
			 | 
			
			
				 		fi 
			 | 
		
	
		
			
			| 
				
					437
				
			 | 
			
				
					440
				
			 | 
			
			
				 	fi 
			 | 
		
	
		
			
			| 
				
					438
				
			 | 
			
				
					441
				
			 | 
			
			
				 	if [ "${rest_type[$irkvm]}" != "ntfsclone" ] && [ "${rest_type[$irkvm]}" != "dd" ]; 
			 |