932
edits
Changes
m
<ol><li value="8">Open a Bash shell terminal.</li>
<li>Use a text editor (such as <b><code><span style="color:#3366CC;font-size:1.2em;">vi</span></code></b> or <b><code><span style="color:#3366CC;font-size:1.2em;">nano</span></code></b>) to create a Bash Shell script called: <b><code><span style="color:#3366CC;font-size:1.2em;">backupVM.bash</span></code></b> in your '''bin''' directory.</li>
<li>Enter the following text content into your text-editing session:</li></ol>
<code style="color:#3366CC;font-family:courier;font-size:.9em;">
<br>
#!/bin/bash
# backupVM.bash<br>
# Purpose: Backs up pre-defined virtual machines<br>
#<br>
# USAGE: ./backupVM.bash<br>
#<br>
# Author: *** INSERT YOUR NAME ***<br>
# Date: *** CURRENT DATE ***
if [ $(whoami) != "root" ] # only runs if root<br>
then<br> echo "You must be root" >&2<br>
exit 1<br>
fi
</code>
<br>
<ol>
<li value="12">Save your editing session, but remain in the text editor.</li><li>This shell script is designed particularly for your centos1, centos2, and centos3 VMS.</li><li>The code displayed below will prompt the user if they wish for all VMs to be backed-up; otherwise, allow the user the option of specifying which VMs to be backed-up. Add the following code</li></ol>
<br>
<code style="color:#3366CC;font-family:courier;font-size:.9em;">
read -p "Backup all VMs? (y|n):" answer # prompt if all VMs to be backed-up
if [ "$answer" = "y" ] # Backup all VMs if answer is yes<br>
then<br>
for num in 1 2 3 # Determinant loop for 3 arguments: 1, 2, and 3<br>
do<br>
echo "Backing up VM #$num"<br>
gzip < /var/lib/libvirt/images/centos$num.qcow2 > ~/backups/centos$num.qcow2.gz<br>
<br> echo "VM #$num BACKUP DONE"<br>
done<br><br>
elif [ "$answer" = "n" ]<br>
then<br>
read -p "Which VM should be backed up? (1/2/3): " numanswer<br>
until echo $numanswer | grep "^[123]$" >> /dev/null # Look for match of single digit: 1,2, or 3<br>
do<br>
read -p "Invalid Selection. Select 1, 2, or 3: " numanswer<br>
done<br>
echo "Backing up VM #$numanswer"<br>
gzip < /var/lib/libvirt/images/centos$numanswer.qcow2 > ~/backups/centos$numanswer.qcow2.gz<br><br>
echo "VM #$numanswer BACKUP DONE"<br>
else<br>
echo "Invalid Selection... Aborting program"<br>
exit 2<br>
fi
</code>
<ol>
<li value="15">Save, set permissions, and then run that shell script to backup centos1. Since that script will only work if you are have root permissions, you will need to use the technique you learned earlier in this lab to run the command with elevated privileges. Confirm that this script did backup this image to your home directory</li><li>Use the <b><code>wget</code></b> command to download, study, and run the following shell scripts on-line:<blockquote><b><code><span style=" pointer-events:none;cursor:default;color:#3366CC;font-size:1.2em;">https://ict.senecacollege.ca/~ops245/labs/vm-start-text.bash<br>https://ict.senecacollege.ca/~ops245/labs/vm-stop-text.bash</span></code></b><br><b><code><span style=" pointer-events:none;cursor:default;color:#3366CC;font-size:1.2em;">https://ict.senecacollege.ca/~ops245/labs/vm-start.bash<br>https://ict.senecacollege.ca/~ops245/labs/vm-stop.bash</span></code></b></blockquote></li><li>Try to understand what these Bash Shell scripts do.</li></ol>
→Part 3: Using the Command Line for VM Backup & Management
::* In order to fully back up a virtual machine, what information should be saved in addition to the virtual machine image?
=== Part 3: Using the Command Line for VM Backup & State Management===
{|width="40%" align="right" cellpadding="10"
|- valign="top"
|
{{Admon/tip|Bash Shell Scripting Tips:|<br>'''<u>Data Input</u>'''<br><ul><li>A shell script can obtain data from a number of methods: '''reading input files''', using '''arguments when issuing command''' (positional parameters), or '''prompting for data to store in a variable'''. The later method can be accomplished by using the '''read''' command.<br><br></li><li>Example:<br><br>''read -p "Enter your name: " userName''.<br><br></li></ul>'''<u>Mathematical Expressions</u>'''<br><ul><li>In the bash shell scripting, data is stored in variable as text, not other data types (ints, floats, chars, etc) like in compiled programs like C or Java. In order to have a shell script perform '''mathematical operations''', number or variable need to be surrounded by two sets of parenthesis '''((..))''' in order to convert a number stored as text to a binary number.<br><br></li><li>Examples<br><br>''var1=5;var2=10''<br>''echo "$var1 + $var2 = $((var1+var2))"''<br><br>'''Note:''' shell does not perform floating point calculations (like '''5/10'''). Instead, other commands like '''awk''' or '''bc''' would be required for floating point calculations (decimals)<br><br></li></ul>}}
|}
You will continue our use of the Bash Shell scripting by first creating a Bash Shell script that examining commands will allow the Linux sysadmin to select gather information about and manage their created VMs for backup to root's home directory. Afterwards you will download, view and run a couple Bash Shell scripts that use the virsh command to start and stop your virtual machinesVirtual Machines.
:'''Perform the following steps:'''
<ol><li value="4">Now, shut-down your centos1 VM normally, and close the centos1 VM window.</li><li>Switch to your terminal and issue the command: <b><code><span style="color:#3366CC;font-size:1.2em;">sudo virsh start centos1</span></code></b></li><li>Using the appropriate command check to see if your centos1 VM is now running.</li><li>There are other commands that can be used (such as '''suspend''', or '''shutdown'''). The "shutdown" command may not always work since it relies on the guest handling a particular ACPI event. Why do you think it is useful to have commands to manipulate VMs?</li></ol>
{{Admon/important|Virtual Machine Does not Shutdown from Command|If the Virtual machine fails to shutdown from the <code>virsh shutdown</code> command, then you can go to the '''Virtual Machine manager''' and '''halt''' or '''shutdown''' within the VM itself, then you can click the '''PowerOff''' button in the VM window. You'll want to avoid a forced shutdown since those are equivalent to yanking the power cord out of the wall on a physical machine!|}}