Network and Storage Protocols

fractional reserve

KAREN_WALSH

I am reading that if I set fractional reserve to 100% I can overwrite my LUN

I've tried that and it doesn't work

I created a 2GB volume

I created a 1GB LUN

mapped the LUN to a windows box

filled up the disk with 700MB of data

took a snapshot

tried to put another 500MB and I get 'disk is full' from windows

(guarantee=volume)

(fractional reserve=100)

what am I missing?

22 REPLIES 22

tony_sleight

My understanding (which is not great!)  is that the Fractional Reserve is used to ensure snapshots can still be taken when the volume is full.

When you took the snapshot, the volume size was reduced by the fractional reserve value a df -r would show the change.

What you have done is used 700MB of your 1GB LUN and then attempted to add another 500MB which exceeds the LUN capacity of 1GB. Hence the windows error that the disk is full.

If you added another 300MB file, the LUN will be full. With Fractional reserve = 100% you can still take a snapshot and ensure both LUN and snaphot data can be accommodated in the volume.

The 100% value allows a snapshot to be taken in the instance that 100% of the LUN changed since the previous snapshot.

I hope this helps.

radek_kubka

Hi guys,

I recommend reading this post (plus comments) for better understanding of fractional reserve:

https://communities.netapp.com/groups/chris-kranz-hardware-pro/blog/2009/03/05/fractional-reservation--lun-overwrite

In a nutshell, fractional reserve purpose is to make sure writes to a LUN will not fail due to the volume being filled with growing snapshots. This is because how NetApp snapshots work - existing blocks are locked in snapshot, so if there is new (or changed) data to be written, some free space in a volume is required.

Regards,
Radek

KAREN_WALSH

thanks guys

I understand what it's supposed to do but why is it not doing that?

there is enough space in the volume - we only using 700MB in the LUN - the volume is 2GB

the purpose of fractional_reserve is to allow overwrite in a LUN, meaning, is I have a 1 GB LUN in a 2GB volume, I should be able to overwrite the 1GB

I hope someone can figure it out because so far I couldn't get any answer other than "read this document", which describes the expected procedure (which doesn't happen in my case)

aborzenkov

You tried to put 500GB of data on a 1GB LUN and now you are surprised that you get “disk full” from Windows?

radek_kubka

Volume size is irrelevant in your particular case, as the host sees the LUN size & is not aware what is going on outside of it.

Think about NetApp volume as a container for LUN, pretty much invisible from the host side in a SAN environment.

KAREN_WALSH

"You tried to put 500GB of data on a 1GB LUN and now you are surprised that you get “disk full” from Windows?"

check again - it is 500MB - it was a mistake

"Volume size is irrelevant in your particular case, as the host sees the LUN size & is not aware what is going on outside of it.

Think about NetApp volume as a container for LUN, pretty much invisible from the host side in a SAN environment"

- not true

the more replies a get, the more I see how people are confused about this

the below screen shots were taken from an official NetApp document that describes fractional reserve scenario (100% first and then 0%)

you can clearly see 50GB LUN that was filled with 100GB of data ("overwrite 25GB...)

Anyone else?

radek_kubka
you can clearly see 50GB LUN that was filled with 100GB of data ("overwrite 25GB...)

This diagram actually gives a very good description of how fractional reserve works.

Bear in mind though "overwrite" means you are changing the data, not appending data - so at any point in time there was not more than 50GB of data within the LUN.

KAREN_WALSH

"changing the data, not appending data" - you have to explain that please...

let's try a different approach. How do I reproduce the scenario in the diagram above?

tony_sleight

You can repeat the above by modifying over 300MB of the 700MB file contents you initially created and snapshot.

tony_sleight

Changing the content of data blocks already allocated by the active file system, in your terms 'writing' to blocks already allocated by the 700MB file created on the LUN. The point is that the snapshot marks the 700MB file data blocks as read only. When an attempt is made to change data held in these blocks a copy is made and the copy is changed.

KAREN_WALSH

"attempt is made to change data" - you mean more writes, correct?

OK, so we're back to 'writing' - I've tried that (see above) already

what do I need to do to generate an overwrite according to the diagram? (or offline a LUN)

tony_sleight

I understand what it's supposed to do but why is it not doing that?

It is behaving exactly as designed, it's your understanding that is lacking detail. Fractional Reserve will allow LUN data to extend into the remaining volume space, but not from the Windows side.

When the first snapshot is taken, the space is reserved in the volume and the volume available space is reduced accordingly.

When you take any snapshot, ONTAP marks all blocks in use by the active file system as read only. If one of these blocks is required to be changed in the future, a copy of that block is made, and it is that copy which is modified. With a fractional reserve, if there is not enough space to allocate this new block in your 1GB LUN it will be allocated in the fractional reserve taken off the Volume when you performed the first snapshot.

KAREN_WALSH

"Fractional Reserve will allow LUN data to extend into the remaining volume space, but not from the Windows side"

not from windows? from where would it get the overwrite then?

resqme914

This is a WAG but I think the confusion here is in the word "overwrite".  The OP states:

> I created a 1GB LUN

> mapped the LUN to a windows box

> filled up the disk with 700MB of data

> tried to put another 500MB and I get 'disk is full' from windows

If you have a 1GB lun, it can only hold 1GB of data.  You can't put 1200MB of data in it.  The "overwrite" doesn't mean there is some hidden "reserve" space there in case you fill up your lun.  What other posters are referring to as overwrite is if you write over existing data.

Windows only sees 1GB of space, even though your 1GB lun is in a 2GB volume.  The rest of the space on the volume is for Ontap's use (snapshots).  HTH.

KAREN_WALSH

"write over existing data" - what does that mean?

radek_kubka

Is it really so hard to grasp?

1) Writing *new* data:

A 10GB LUN with 9 files, each 1GB in size. You write a new 1GB file (10th) & the LUN is full, correct?

2) Overwriting *existing* data:

A 10GB LUN with 9 files, each 1GB in size. You *overwrite* one of the existing files, so there is still 1GB free space left in the LUN.

Got it?

scottgelb

I do like that as of 8.2 it is Boolean on or off... 0 or 100 and no in between which made it more confusing for some installs... although rarely every saw it any value in between 0-100.

radek_kubka

Nice one. I've seen it set to 20% on one occasion - what were they thinking?

gavin_meadows

Karen Mag wrote:

I am reading that if I set fractional reserve to 100% I can overwrite my LUN

I've tried that and it doesn't work

I created a 2GB volume

I created a 1GB LUN

mapped the LUN to a windows box

filled up the disk with 700MB of data

took a snapshot

tried to put another 500MB and I get 'disk is full' from windows

(guarantee=volume)

(fractional reserve=100)

what am I missing?

I'm going to have a stab at this - what you are missing is what "overright my LUN" means. It does NOT mean that if you try to write 1.3 GB of data onto your 1GB LUN then somehow the LUN will autogrow and Windows be able to write all that data - this is what you seemed to have tested.  Regardless if you took a snapshot or not after writing the 700MB, you still would not fit the additional 500MB onto that 1GB LUN.

What is does mean is that if you wanted to keep that snapshot for lets say a week and you went ahead and deleted the 700MB of data from the LUN, FR allows you to write the full 1GB of new data to that lun as it is reserving 1GB of space in the volume for your LUN overwites - in total 1GB Live (LUN) + 700MB Snapshot Data (VOLUME) will be on the SAN.

If you didnt have FR turned on you could end up in a situation where there is not enough space left in the volume for new writes to your lun because a snapshot is hogging all the blocks.

This is very simplistic scenario and not likely to happen but lets assume no FR and a 1GB LUN and 1.3GB volume.  Same deal 700mb of data on the lun and a snapshot taken.  now we delete the data.

volume used = 700MB (snapshot), Free space = 600mb

lun used = 0mb, free space = 1gb (from Windows perspective)

we try to write another 700mb to the empty lun but it fails because the volume doesnt have enough space because of the 700mb is is using up on the snapshot.

This is what FR protects against IE "lun overwrites"  it ensures that (if set to 100) that you can take a snapshot and then change 100% of the data on the lun and still have room in the volume to acommodate this.

There a more tools at your disposal now to allow thin provisioning of luns with FR set to 0 such as autodelete and autogrow but thats a whole other debate.......

SJO06200449

Have a look here:

http://www.getshifting.com/wiki/netappdataplanning

It's a pretty good step by step analysis of the interaction of the various attributes per volume and per lun and how those affect what actually happens.

I read your scenario as follows (however it does depend on what your vol options actually are);

I created a 2GB volume ... you get 1600MB usable data space if 20% Snapshot Reserve (default) and taking 1000MB per GB

I created a 1GB LUN ... luns are by default space reserved so now you have 600MB left in volume

mapped the LUN to a windows box

filled up the disk with 700MB of data ... you have 300MB left

took a snapshot ... this locks the blocks of you active file system and reserves 700MB in the volume for future writes.

                            It would reserve less if your Fractional Reserve was not 100%.

                            tbh I don't see how this step worked, as the reserved is from the volume and you only have 600mb left

                            in the volume after the snapshot reserve (which isnt shown as 'used' until you start to make changes.

                            maybe it's an 'in principal' sort of thing - or the better explanation - you have not indeed set vol snapshot reserv

                            to 20% like  I presumed at the start

tried to put another 500MB and I get 'disk is full' from windows ... there is only 300mb left of the lun

(guarantee=volume) <-- this pertains to if vol uses space in aggr and is irrelevent

(fractional reserve=100) <--- see above, better to think of it as 'lun overwrite reserve' and is also a Volume attribute

I have to say it is very confusing.

Public