IBM i on Power Virtual Server - Taking (consistent) snapshots
Thanks to Pixabay.com

IBM i on Power Virtual Server - Taking (consistent) snapshots

What is a Snapshot?

When working with IBM i on a cloud environment we have different resources to protect our data. Snapshotting is a great idea to create a point-in-time instant copy (not a full copy) to perform a rollback in case of issues.

IBM Power Virtual Server provides a snapshot feature that takes less than 1 minute to create a recovery point for our instance.

THIS IS NOT A BACKUP, JUST A ROLLBACK CHECKPOINT!!!

This means you can only restore this snapshot data to the same instance and same volumes, but still really powerful.

If you are next to update your Operating System, install PTFs, perform a major configuration or data update, this feature could save you a huge amount of time and effort.

How does a Snapshot works?

This IBM Power Virtual Server option leverages the snapshot/flashcopy/copy-on-write feature on the storage backend. IBM Cloud uses FlashSystem storage systems for your volumes, so the time it takes this copy is a couple of seconds.

IBM i and many modern operating systems delays data writes a couple of seconds to create an asynchronous write, and improve disk performance, but when taking a copy from your disk with your system still running processes could lead to a corrupt data copy. So many databases and operating systems include "sync" and "quiesce" commands, that force the pending data in memory to be written to your disk, and suspend database writes to disk sending new update transactions to memory.

IBM i includes the command CHGASPACT to perform this operation, and make your snapshot consistent.

How can I run all these as easy as possible?

IBM Cloud provides the IBM Cloud CLI that can run most of its APIs in a scriptable way. You can learn about IBM Cloud CLI and how to set the Power IaaS plugin here:

IBM Power Systems Virtual Server CLI Reference

I have created a small BASH script that connects to the IBM i using SSH, quiesces the database, sign on IBM Cloud, list the volumes in your instance, takes the snapshot, release the database and sends an email with the snapshot details.

To set this up you need:

  • Your Power Virtual Server Instance and its ID
  • Your APIKEY
  • Resource ID
  • Region
  • SSH running in your IBM i
  • A Linux system that ssh to your IBM i
  • An email alert account

The Script

Save this script as "snapshot_pvs.sh"

#!/bin/bash

###############################################
# Constants
###############################################
error=0;
errmsg="";
# IBM Cloud aacount
apikey="<APIKEY>";
Resource="<ResourceID>";
Region="<REGION>";
# SSH Service
SvrAddr="Server_Address";
UserID="<SSH_User>";
# LPAR ID
InstanceID="<PVS_InstanceID>";
SnapshotName="Snap_InstanceX-"$(date -I);

# Alert eMail
mailaccount='<Email_account>'
mailfrom='<Email_From>'
mailrcpt='Email_TO'
mailserver='smtps://<MailServer_Address>:<Port>'

echo '==================';
echo 'Quiescing Database';
echo '==================';
# Pause ASP/database activity
ssh $UserID@$SvrAddr -p 8022 "system 'CHGASPACT ASPDEV(*SYSBAS) OPTION(*FRCWRT)';system 'CHGASPACT ASPDEV(*SYSBAS) OPTION(*SUSPEND) SSPTIMO(120)'" || { error=1;errmsg="Error quiescing Db2 for i";echo $errmsg; }

if (($error == 0))
? ? then
? ? # Login process
? ? ibmcloud login --apikey $apikey -r $Region || { error=1;errmsg="Error on login process";echo $errmsg; }
fi


if (($error == 0))
? ? then
? ? # Select the resource
? ? ibmcloud pi st $Resource ||{ error=1;errmsg="Error setting the resource";echo $errmsg; }
fi

if (($error == 0))
? ? then
? ? echo '================='
? ? echo 'Starting Snapshot'
? ? echo '================='
? ? # List instance volumes to an auxiliary file
? ? ibmcloud pi inlv $InstanceID |cut? -c1-36|grep -v ID>/tmp/volume_list.lst?


? ? # Create variable with valume names
? ? vols=''
? ? while read line?
? ? ? ? do?
? ? ? ? vols=$vols$line' '
? ? done < /tmp/volume_list.lst?


? ? # Start the snapshot process
? ? rm /tmp/snapshot_result.json?
? ? ibmcloud pi snapshot-create $InstanceID --volumes "$vols" --name $SnapshotName --json> /tmp/snapshot_result.json || { error=1;errmsg="Error while taking the snapshot";echo $errmsg; }
? ? SnapshotID=$(cat /tmp/snapshot_result.json|jq .snapshotID)
? ? # Remove the double quote on this variable
? ? SnapID=${SnapshotID//'"'/''}
fi

if (($error == 0))
? ? then
? ? echo '=================================='
? ? echo 'Wait 2 minutes to get the snapshot'
? ? echo '=================================='
? ? sleep 2m
? ? echo 'Resuming database activity'
? ? echo '=================================='
? ? # Resume database activity
? ? ssh $UserID@$SvrAddr -p 8022 "system 'CHGASPACT ASPDEV(*SYSBAS) OPTION(*RESUME)'" || { error=1;errmsg="Error resuming database activity";echo $errmsg; }
fi
# Creating the notification email
echo "Sending email";
cp mail_status.txt mail_status2.txt
echo "--------------------------------------------------------------------------" >> mail_status2.txt
echo ""? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?>> mail_status2.txt


if (($error == 0))
? ? then
	errmsg="Successful snapshot process"
	echo $errmsg? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? >> mail_status2.txt
	echo ""? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?>> mail_status2.txt
	echo "Snapshot: "$SnapshotName? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? >> mail_status2.txt
	echo "======================================================================" >> mail_status2.txt
	ibmcloud pi snap $SnapID? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? >> mail_status2.txt
	echo "======================================================================" >> mail_status2.txt
else
? ? if [[$errmsg -eq "" ]]
		then
? ? ? ? errmsg="Error during snapshot process"? ? ? ??
? ? ? ? echo $errmsg? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? >> mail_status2.txt
? ? fi
fi


echo ""? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?>> mail_status2.txt
echo "--------------------------------------------------------------------------" >> mail_status2.txt

curl --url $mailserver --ssl-reqd --mail-from $mailfrom --mail-rcpt $mailrcpt --user $mailaccount --insecure --upload-file mail_status2.txt || { error=1;errmsg="Error sending email";echo $errmsg; }

if (($error == 0))
? ? then
? ? echo '============================='
? ? echo 'Snapshot process has finished'
? ? echo '============================='
? ? cat snapshot_pvs_finish.txt
else
? ? echo '================================='
? ? echo 'Error during the snapshot process'
? ? echo ''
? ? echo $errmsg
? ? echo '================================='
fi        

This is the email header file "mail_status.txt"

From: "IBM i on PowerVS" <User@EmailServer>
To: "User Name" <email_account>
Subject: Instance Snapshot - IBM i on PowerVS
?        

And this is the "snapshot_pvs_finish.txt" banner file

███████╗███╗? ?██╗ █████╗ ██████╗ ███████╗██╗? ██╗ ██████╗ ████████╗? ? ██╗? ██╗ █████╗ ███████╗? ? ███████╗██╗███╗? ?██╗██╗███████╗██╗? ██╗███████╗██████╗ ██
██╔════╝████╗? ██║██╔══██╗██╔══██╗██╔════╝██║? ██║██╔═══██╗╚══██╔══╝? ? ██║? ██║██╔══██╗██╔════╝? ? ██╔════╝██║████╗? ██║██║██╔════╝██║? ██║██╔════╝██╔══██╗██║
███████╗██╔██╗ ██║███████║██████╔╝███████╗███████║██║? ?██║? ?██║? ? ? ?███████║███████║███████╗? ? █████╗? ██║██╔██╗ ██║██║███████╗███████║█████╗? ██║? ██║██║
╚════██║██║╚██╗██║██╔══██║██╔═══╝ ╚════██║██╔══██║██║? ?██║? ?██║? ? ? ?██╔══██║██╔══██║╚════██║? ? ██╔══╝? ██║██║╚██╗██║██║╚════██║██╔══██║██╔══╝? ██║? ██║╚═╝
███████║██║ ╚████║██║? ██║██║? ? ?███████║██║? ██║╚██████╔╝? ?██║? ? ? ?██║? ██║██║? ██║███████║? ? ██║? ? ?██║██║ ╚████║██║███████║██║? ██║███████╗██████╔╝██╗
╚══════╝╚═╝? ╚═══╝╚═╝? ╚═╝╚═╝? ? ?╚══════╝╚═╝? ╚═╝ ╚═════╝? ? ╚═╝? ? ? ?╚═╝? ╚═╝╚═╝? ╚═╝╚══════╝? ? ╚═╝? ? ?╚═╝╚═╝? ╚═══╝╚═╝╚══════╝╚═╝? ╚═╝╚══════╝╚═════╝ ╚═╝

╗        

Once you have all these in place we need to make the script executable

chmod +x snapshot_pvs.sh        

And now we can run the script :

./snapshot_pvs.sh        

You will get an email notification once the script has finished.

If you have any doubt or questions feel free to contact me on the LinkedIN chat.

Good Luck!

Juan Rafael Gomez Guzman

IBMer | Negocios Digitales | Especialista en Infraestructura de TI | Ciber Resiliencia | Transformación Digital | Soluciones de Almacenamiento | Cloud | Storage

1 年

Excelente. Lo único a revisar sería los 2 minutos para hacer resume al chgaspact y los 2 minutos de sleep al hacer los snapshot por el Cloud CLI

Raúl Emanuel Heredia

Computer Engineer - Brand Technical Specialist- PowerVS Tech Sales SME - IBM Power System Virtual Server

1 年

Gracias Diego por compartir este material, resulta sencillo entenderlo y es muy conciso.

要查看或添加评论,请登录

社区洞察

其他会员也浏览了