Просмотр исходного кода

13.10.19:15.28 - add make dd utilites

master лет назад: 5
Родитель
Сommit
46bbd88ae1
1 измененных файлов с 57 добавлено и 17 удалено
  1. 57 17
      kvm-snapshot.sh

+ 57 - 17
kvm-snapshot.sh

@@ -2,24 +2,22 @@
2
 # The script is designed to create or restore an image of a virtual machine kvm (c) 2018
2
 # The script is designed to create or restore an image of a virtual machine kvm (c) 2018
3
 # author Koshuba V.O.
3
 # author Koshuba V.O.
4
 # license: MIT
4
 # license: MIT
5
-# version: 4.0.0
5
+# version: 4.0.5
6
 ##
6
 ##
7
 
7
 
8
 #<manual_parameters>
8
 #<manual_parameters>
9
-path_kvm=( "/kvm/win7x64" 
10
-           "/kvm/win2kx64" );					# path kvm machines
11
-path_bak=( "/arhive/backup/kvm/win7x64" 
12
-           "/arhive/backup/kvm/win2kx64" );			# path backup kvm machines
13
-img_dev=( "disk_c.img" 
14
-          "disk_c.img" );					# storage kvm
15
-img_part=( '"sda1" "sda2"' 
16
-           '"sda1"' );						# sections in media kvm
17
-img_offset=( '"1048576" "105906176"' 
18
-           '"32256"' );						# offset for switch section media kvm
9
+path_kvm=( "/kvm/win2012" "/kvm/win2008" );			# path kvm machines
10
+path_bak=( "/backup/kvm/win2012" "/backup/kvm/win2008" );	# path backup kvm machines
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)
15
+img_offset=( '"1048576" "315621376" "419430400" "553648128"'
16
+             '"1048576"' );					# offset for switch section media kvm
19
 #</manual_parameters>
17
 #</manual_parameters>
20
 
18
 
21
 #<script_value>
19
 #<script_value>
22
-version="4.0.0";
20
+version="4.0.5";
23
 owner="(c) script by Koshuba V.O. 2018";
21
 owner="(c) script by Koshuba V.O. 2018";
24
 msg_dat=( '"Script to save or restore the image KVM" "Скрипт сохранения или восстановления образа KVM"'
22
 msg_dat=( '"Script to save or restore the image KVM" "Скрипт сохранения или восстановления образа KVM"'
25
           '"MAIN MENU" "ГЛАВНОЕ МЕНЮ"'
23
           '"MAIN MENU" "ГЛАВНОЕ МЕНЮ"'
@@ -38,7 +36,8 @@ msg_dat=( '"Script to save or restore the image KVM" "Скрипт сохран
38
           '"Found the file kvmsnapshot.lock - work is stopped!" "Найден файл kvmsnapshot.lok - работа остановлена!"'
36
           '"Found the file kvmsnapshot.lock - work is stopped!" "Найден файл kvmsnapshot.lok - работа остановлена!"'
39
           '"Starting kvm-snapshot script." "Запуск скрипта kvm-snapshot."'
37
           '"Starting kvm-snapshot script." "Запуск скрипта kvm-snapshot."'
40
           '"Ending work kvm-snapshot script." "Окончание работы скрипта kvm-snapshot."'
38
           '"Ending work kvm-snapshot script." "Окончание работы скрипта kvm-snapshot."'
41
-          '"Not found save images!" "Не найдены сохраненные образы!"' );
39
+          '"Not found save images!" "Не найдены сохраненные образы!"'
40
+          '"The installed type was not found from the parameters for image processing - dd,ntfsclone,mrsrv!" "Не найден установленный тип из параметров для обработки образа - dd,ntfsclone,mrsrv!"' );
42
 	  # msg[17]
41
 	  # msg[17]
43
 msg=();											# set current messages
42
 msg=();											# set current messages
44
 esc_title="";										# title escape menu
43
 esc_title="";										# title escape menu
@@ -220,7 +219,7 @@ esac
220
 #<functions>
219
 #<functions>
221
 #<Fn test lock file>
220
 #<Fn test lock file>
222
 testproc(){
221
 testproc(){
223
-if [ ! -f $scriptlog ];
222
+if [ -f $scriptlog ];
224
  then
223
  then
225
     echo > $scriptlog;
224
     echo > $scriptlog;
226
 fi
225
 fi
@@ -362,6 +361,8 @@ function saveKvm() {
362
 local save_kvm="${path_kvm[$set_kvm]}";
361
 local save_kvm="${path_kvm[$set_kvm]}";
363
 local save_bak="${path_bak[$set_kvm]}/$rdate";
362
 local save_bak="${path_bak[$set_kvm]}/$rdate";
364
 local save_img="${img_dev[$set_kvm]}";
363
 local save_img="${img_dev[$set_kvm]}";
364
+eval local save_type="(" $(echo -e ${img_type[$set_kvm]}) ")";
365
+eval local save_size="(" $(echo -e ${img_size[$set_kvm]}) ")";
365
 eval local save_dev="(" $(echo -e ${img_part[$set_kvm]}) ")";
366
 eval local save_dev="(" $(echo -e ${img_part[$set_kvm]}) ")";
366
 eval local save_offset="(" "$(echo -e ${img_offset[$set_kvm]})" ")";
367
 eval local save_offset="(" "$(echo -e ${img_offset[$set_kvm]})" ")";
367
 local set_loop_main="$(losetup -f|grep -v loop-control|sed 's/\/\dev\///g')";
368
 local set_loop_main="$(losetup -f|grep -v loop-control|sed 's/\/\dev\///g')";
@@ -372,14 +373,34 @@ if [[ ! -d $save_bak ]];
372
     mkdir -p $save_bak;
373
     mkdir -p $save_bak;
373
 fi
374
 fi
374
 
375
 
375
-sfdisk -d /dev/$set_loop_main >$save_bak/info.txt;
376
+sfdisk -d /dev/$set_loop_main >$save_bak/info_sfdisk.txt;
377
+sfdisk -l /dev/$set_loop_main >$save_bak/info_disk.txt;
376
 dd if=/dev/$set_loop_main of=$save_bak/winboot.img bs=512 count=1;
378
 dd if=/dev/$set_loop_main of=$save_bak/winboot.img bs=512 count=1;
377
 
379
 
378
 for ((iskvm=0; iskvm != ${#save_dev[@]}; iskvm++))
380
 for ((iskvm=0; iskvm != ${#save_dev[@]}; iskvm++))
379
  do
381
  do
380
     local set_loop_dev="$(losetup -f|grep -v loop-control|sed 's/\/\dev\///g')";
382
     local set_loop_dev="$(losetup -f|grep -v loop-control|sed 's/\/\dev\///g')";
381
     losetup -o ${save_offset[$iskvm]} /dev/$set_loop_dev /dev/$set_loop_main;
383
     losetup -o ${save_offset[$iskvm]} /dev/$set_loop_dev /dev/$set_loop_main;
382
-    ntfsclone --save-image -o - /dev/$set_loop_dev| pigz -p2 -c9>$save_bak/${save_dev[$iskvm]}.img.gz;
384
+    if [ "${save_type[$iskvm]}" == "ntfsclone" ];
385
+	    then
386
+	    ntfsclone --save-image -o - /dev/$set_loop_dev| pigz -p2 -c9>$save_bak/${save_dev[$iskvm]}.img.gz;
387
+	fi
388
+	if [ "${save_type[$iskvm]}" == "dd" ];
389
+	    then
390
+		if [ "${save_size[$iskvm]}" != "" ];
391
+		    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;
393
+		    else
394
+		    echo "Warning! not found size partition ${save_dev[$iskvm]} for dd!";
395
+		fi
396
+	    
397
+	fi
398
+	if [ "${save_type[$iskvm]}" != "ntfsclone" ] && [ "${save_type[$iskvm]}" != "dd" ] && [ "${save_type[$iskvm]}" != "mrsrv" ];
399
+	    then
400
+		echo "[$save_bak/${save_dev[$irkvm]}_dd.img.gz]\n ${msg[18]} - >> /var/log/syslog";
401
+		echo "$(date) - kvm-snapshot: [$save_bak/${save_dev[$irkvm]}_dd.img.gz] \n ${msg[18]}" >> /var/log/syslog;
402
+	fi
403
+    
383
     losetup -d /dev/$set_loop_dev;
404
     losetup -d /dev/$set_loop_dev;
384
 done
405
 done
385
 losetup -d /dev/$set_loop_main;
406
 losetup -d /dev/$set_loop_main;
@@ -389,6 +410,8 @@ function restoreKvm() {
389
 local rest_kvm="${path_kvm[$set_kvm]}";
410
 local rest_kvm="${path_kvm[$set_kvm]}";
390
 local rest_bak="${path_bak[$set_kvm]}/$set_img";
411
 local rest_bak="${path_bak[$set_kvm]}/$set_img";
391
 local rest_img="${img_dev[$set_kvm]}";
412
 local rest_img="${img_dev[$set_kvm]}";
413
+eval local rest_type="(" $(echo -e ${img_type[$set_kvm]}) ")";
414
+eval local rest_size="(" $(echo -e ${img_size[$set_kvm]}) ")";
392
 eval local rest_dev="(" $(echo -e ${img_part[$set_kvm]}) ")";
415
 eval local rest_dev="(" $(echo -e ${img_part[$set_kvm]}) ")";
393
 eval local rest_offset="(" "$(echo -e ${img_offset[$set_kvm]})" ")";
416
 eval local rest_offset="(" "$(echo -e ${img_offset[$set_kvm]})" ")";
394
 local set_loop_rmain="$(losetup -f|grep -v loop-control|sed 's/\/\dev\///g')";
417
 local set_loop_rmain="$(losetup -f|grep -v loop-control|sed 's/\/\dev\///g')";
@@ -399,7 +422,24 @@ for ((irkvm=0; irkvm != ${#rest_dev[@]}; irkvm++))
399
  do
422
  do
400
     local set_loop_rdev="$(losetup -f|grep -v loop-control|sed 's/\/\dev\///g')";
423
     local set_loop_rdev="$(losetup -f|grep -v loop-control|sed 's/\/\dev\///g')";
401
     losetup -o ${rest_offset[$irkvm]} /dev/$set_loop_rdev /dev/$set_loop_rmain;
424
     losetup -o ${rest_offset[$irkvm]} /dev/$set_loop_rdev /dev/$set_loop_rmain;
402
-    gunzip -c $rest_bak/${rest_dev[$irkvm]}.img.gz|ntfsclone --restore-image -O /dev/$set_loop_rdev -;
425
+	if [ ${rest_type[$irkvm]} == "ntfsclone" ];
426
+	    then
427
+	    gunzip -c $rest_bak/${rest_dev[$irkvm]}_ntfs.img.gz|ntfsclone --restore-image -O /dev/$set_loop_rdev -;
428
+	fi
429
+	if [ "${rest_type[$irkvm]}" == "dd" ];
430
+	    then
431
+		if [ "${rest_size[$irkvm]}" != "" ];
432
+		    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;
434
+		    else
435
+		    echo "Warning! not found size partition ${rest_dev[$irkvm]} for dd!";
436
+		fi
437
+	fi
438
+	if [ "${rest_type[$irkvm]}" != "ntfsclone" ] && [ "${rest_type[$irkvm]}" != "dd" ];
439
+	    then
440
+		echo "[$rest_bak/${rest_dev[$irkvm]}_dd.img.gz]\n ${msg[18]} - >> /var/log/syslog";
441
+		echo "$(date) - kvm-snapshot: [$rest_bak/${rest_dev[$irkvm]}_dd.img.gz] \n ${msg[18]}" >> /var/log/syslog;
442
+	fi
403
     losetup -d /dev/$set_loop_rdev;
443
     losetup -d /dev/$set_loop_rdev;
404
 done
444
 done
405
 losetup -d /dev/$set_loop_rmain;
445
 losetup -d /dev/$set_loop_rmain;