In this NetApp training tutorial, I will cover the NetApp FlexClone. Scroll down for the video and also text tutorial.
NetApp FlexClone Video Tutorial
Glenn Reed
My company sent me to the one week official NetApp class but in my opinion this is better, he covers much more detail than they covered in the official class. I took this class to prepare for the NetApp certification which I just obtained on Friday.
NetApp FlexClone
A FlexClone volume is, not surprisingly, a clone of another volume. The feature is most commonly used for deploying a virtual desktop environment or for development and testing. Both the parent and child appear on the ‘Volumes’ page in System Manager and can be managed separately.
The child FlexClone volume consists of the same data as the parent volume when it is initially created and you can then make independent changes to both.
Let’s say you want to do some testing on a large database. The traditional way to do this would be to make a copy of the database. It will take time to copy the data to new blocks on disk, and take up double the initial disk space.
FlexClone works differently. The system takes a snapshot of the parent volume. This works the same as any other snapshot in that it just includes pointers to the data, rather than copying it to new blocks on disk. Because no data needs to be written (apart from the tiny inode file), the snapshot occurs instantly and takes up no disk space.
The FlexClone child volume is created from the snapshot. After it has been created you can manage the FlexClone as a separate volume. Any new data you write to it will take up disk space, but the existing data from the snapshot does not.
Multiple clones can be taken of the same parent volume, so if you need to do additional testing while keeping the first FlexClone volume unchanged, just make another FlexClone volume.
An example of FlexClone in action is shown in the diagram above. ‘VolX’ is the parent volume and we have taken a clone named ‘volX- clone’. When you make a clone it uses a snapshot of the parent volume, so it contains exactly the same data but does not take up any additional space.
That data is shown as the ‘shared data blocks’ in the diagram. As either parent or FlexClone volume changes, they will start taking up additional space. You can see that as ‘unique volX data blocks’ and ‘unique volX-clone data blocks’ in the diagram. The shared data blocks remained untouched.
Because of the shared blocks both the parent and FlexClone volume are located in the same aggregate.
Splitting NetApp FlexClone
Over time the FlexClone volume can change enough that it is more different than similar to the parent volume. At this time you can choose to split them into two completely physically separate volumes. Doing this can take some time as the shared data blocks will be split into two separate copies which require them to be copied to new blocks on disk for the child volume.
NetApp FlexClone Configuration Example
This configuration example is an excerpt from my ‘NetApp ONTAP 9 Complete’ course. Full configuration examples using both the CLI and System Manager GUI are available in the course.
Want to practice this configuration for free on your laptop? Download your free step-by-step guide ‘How to Build a NetApp ONTAP Lab for Free’
- Create a new aggregate named ‘aggr3_C1N1’, owned by Node 1. Use RAID-DP and 5 FCAL disks.
cluster1::> storage aggregate create -aggregate aggr3_C1N1 -diskcount 5 -disktype FCAL -node cluster1-01
Info: The layout for aggregate "aggr3_C1N1" on node "cluster1-01" would be:
First Plex
RAID Group rg0, 5 disks (block checksum, raid_dp)
Usable Physical
Position Disk Type Size Size
---------- ------------------------- ---------- -------- --------
dparity NET-1.47 FCAL - -
parity NET-1.14 FCAL - -
data NET-1.6 FCAL 1000MB 1.00GB
data NET-1.48 FCAL 1000MB 1.00GB
data NET-1.15 FCAL 1000MB 1.00GB
Aggregate capacity available for volume use would be 2.64GB.
Do you want to continue? {y|n}: y
[Job 58] Job succeeded: DONE
- Create a 100 MB thin-provisioned volume named vol2 for the NAS SVM in aggr3_C1N1. Mount it in the SVM namespace under the root volume.
cluster1::> volume create -vserver NAS -volume vol2 -aggregate aggr3_C1N1 -size 100MB -space-guarantee none -junction-path /vol2
[Job 62] Job succeeded: Successful
- Configure vol2 to use the UNIX Security Style and set permissions of 0777.
cluster1::> volume modify -vserver NAS -volume vol2 -security-style unix -unix-permissions 0777
Volume modify successful on volume vol2 of Vserver NAS.
- Log in to the LinuxA host and mount the vol2 volume.
flackbox@ubuntu:/$ sudo mkdir /mnt/vol2
[sudo] password for flackbox:
flackbox@ubuntu:/$ sudo mount NAS:/vol2 /mnt/vol2
- Use the command ‘dd if=/dev/zero of=file1 bs=4K count=10000’ to create a 40 MB file in vol2.
flackbox@ubuntu:/$ cd /mnt/vol2
flackbox@ubuntu:/mnt/vol2$ dd if=/dev/zero of=file1 bs=4K count=10000
10000+0 records in
10000+0 records out
40960000 bytes (41 MB, 39 MiB) copied, 1.15929 s, 35.3 MB/s
- How much space do you expect to be used in the aggr3_C1N1 aggregate? Verify this.
Aggr3_C1N1 contains the thin provisioned volume vol2 which contains a 40 MB file, so around 40 MB space is used. (The entire size of the volume, 100 MB, would be used if it was a thick provisioned volume.)
cluster1::> storage aggregate show-space -aggregate aggr3_C1N1
Aggregate : aggr3_C1N1
Feature Used Used%
-------------------------------- ---------- ------
Volume Footprints 40.62MB 2%
Aggregate Metadata 248KB 0%
Snapshot Reserve 0B 0%
Total Used 40.86MB 2%
Total Physical Used 42.34MB 2%
- Use FlexClone to create a clone of vol2 named vol2_clone1.
cluster1::> volume clone create -vserver NAS -flexclone vol2_clone1 -parent-volume vol2
[Job 65] Job succeeded: Successful
- Mount the vol2_clone1 volume in the NAS SVM namespace.
cluster1::> volume mount -vserver NAS -volume vol2_clone1 -junction-path /vol2_clone1
- Log in to the LinuxA host and mount the vol2_clone1 volume.
flackbox@ubuntu:/mnt/vol2$ sudo mkdir /mnt/vol2_clone1
flackbox@ubuntu:/mnt/vol2$ sudo mount NAS:/vol2_clone1 /mnt/vol2_clone1
- Verify vol2_clone1 is a clone of vol2 and contains file1.
flackbox@ubuntu:/mnt/vol2$ cd /mnt/vol2_clone1
flackbox@ubuntu:/mnt/vol2_clone1$ ls -l
total 40164
-rw-rw-r-- 1 flackbox flackbox 40960000 May 3 21:23 file1
- How much space do you expect to be used in aggregate aggr3_C1N1 now? Verify this.
There is still around 40 MB space used in aggr3_C1N1 as vol2_clone1 is a clone based on a snapshot copy and does not take up any space.
cluster1::> storage aggregate show-space -aggregate aggr3_C1N1
Aggregate : aggr3_C1N1
Feature Used Used%
-------------------------------- ---------- ------
Volume Footprints 42.72MB 2%
Aggregate Metadata 316KB 0%
Snapshot Reserve 0B 0%
Total Used 43.03MB 2%
Total Physical Used 44.80MB 2%
- Use the command ‘dd if=/dev/zero of=file2 bs=4K count=5000’ to create a 20 MB file in vol2_clone1.
flackbox@ubuntu:/mnt/vol2_clone1$ dd if=/dev/zero of=file2 bs=4K count=5000
5000+0 records in
5000+0 records out
20480000 bytes (20 MB, 20 MiB) copied, 0.406629 s, 50.4 MB/s
- Use the command ‘dd if=/dev/zero of=file3 bs=4K count=5000’ to create a 20 MB file in vol2.
flackbox@ubuntu:/mnt/vol2_clone1$ cd /mnt/vol2
flackbox@ubuntu:/mnt/vol2$ dd if=/dev/zero of=file3 bs=4K count=5000
5000+0 records in
5000+0 records out
20480000 bytes (20 MB, 20 MiB) copied, 0.355257 s, 57.6 MB/s
- Verify the contents of vol2 and vol2_clone1 are different. Both volumes should contain the identical file1. Vol2_clone1 should also contain file2 and vol2 should also contain file3.
flackbox@ubuntu:/mnt/vol2$ ls -l
total 60248
-rw-rw-r-- 1 flackbox flackbox 40960000 May 3 21:23 file1
-rw-rw-r-- 1 flackbox flackbox 20480000 May 3 21:51 file3
flackbox@ubuntu:/mnt/vol2$ cd /mnt/vol2_clone1
flackbox@ubuntu:/mnt/vol2_clone1$ ls -l
total 60248
-rw-rw-r-- 1 flackbox flackbox 40960000 May 3 21:23 file1
-rw-rw-r-- 1 flackbox flackbox 20480000 May 3 21:50 file2
- How much space do you expect to be used in aggregate aggr3_C1N1 now? Verify this.
aggr3_C1N1 contains a single 40 MB copy of file1 which is in both vol2 and vol2_clone1. It also contains the 20 MB file file2 in vol2_clone1 and the 20 MB file file3 in vol2. The total space used is around 40 MB + 20 MB + 20 MB = 80 MB.
If vol2 had been copied instead of cloned the total space used would have been 120 MB.
cluster1::> storage aggregate show-space -aggregate aggr3_C1N1
Aggregate : aggr3_C1N1
Feature Used Used%
-------------------------------- ---------- ------
Volume Footprints 81.69MB 3%
Aggregate Metadata 1.32MB 0%
Snapshot Reserve 0B 0%
Total Used 83.00MB 3%
Total Physical Used 85.54MB 3%
Additional Resources