Snow Leopard Clean Install - Zero Out SSD?
You want reinstall your old MBP, because want sale it? So zero out.

Want install OS X into the new MBP - don't need zero.

"Zero out" is for the security. see here too. And if you come from the DoD, CIA etc.. ;) and you have classified informations on you notebook - use the multi-pass zero-out. ;)

For those who have heard that there is someone who has seen such a person who knows how wear-leveling works, ;) TAKE IT EASY :)

I show you how wear-leveling works when erasing a whole SSD sector-by-sector. (and not file-by-file). 

For the simplicity imagine than your SSD has only 10 sectors, with numbers from 0 up to 9.
Again, for this example we don't need differentiate between static/dynamic wear-leveling, only need to know, than SSD somewhat counting the write-count into each sector on SSD.

The scheme is the following:

sector number -&gt; 0  1  2  3  4  5  6  7  8  9 
my DATA          .  .  .  .  .  .  .  .  .  .
usage count      0  0  0  0  0  0  0  0  0  0 


for the fresh ssd we have usage count "0" for all sectors. (in reality this is not true, but for this example it is ok), and we haven't any data on the SSD.

Ok, after a while of usage of normal usage of SSD we get for example the next:

sector number -&gt; 0  1  2  3  4  5  6  7  8  9 
MY DATA          .  .  x  x  .  .  x  .  .  .
usage count      5  6  6  6  5  5  7  6  4  5


so, we have physically occupied sectors# 2,3,6 (so, my data ARE really in these sectors, and does not matter what OS think where they are) and the SSD maintain his usage table. You can see the usage table (bottom row) is nearly leveled. (why is not exactly leveled does not matter for this example, and also we not need discuss how SSH maintain the his free sector table, but need to know, than the SSD's free sectors table has nothing with the OS's free sector table).

So, come erase the whole SDD sector-by-sector. What this mean? The OS will write some data (not always zeroes) into each sector sequentially on SSD.

The OS send a command to SSD "write these zeros onto sector 0". The SSD's wear leveling choose on block with the lowest number of writes and write the zeros into. In our small example this will be sector 8, so we get:

sector number -&gt; 0  1  2  3  4  5  6  7  8  9 
MY DATA          .  .  x  x  .  .  x  .  -  .
usage count      5  6  6  6  5  5  7  6  5  5


I draw with '-' the written sector for the erase process. So the OS "think" than got erased the sector 0, but this is not true, because the wear-leveling erased the sector 8.

Next, the OS want erase sector "1". The wear leveling choose the first sector with lowest number of write, so sector 0 in our example.

sector number -&gt; 0  1  2  3  4  5  6  7  8  9 
MY DATA          -  .  x  x  .  .  x  .  -  .
usage count      6  6  6  6  5  5  7  6  5  5


for the sector 2 - got written into sector 4

sector number -&gt; 0  1  2  3  4  5  6  7  8  9 
MY DATA          -  .  x  x  -  .  x  .  -  .
usage count      6  6  6  6  6  5  7  6  5  5


sector 3 -> 5

sector number -&gt; 0  1  2  3  4  5  6  7  8  9 
MY DATA          -  .  x  x  -  -  x  .  -  .
usage count      6  6  6  6  6  6  7  6  5  5


sector 4 -> 8 (AGAIN got a write into sector 8, because it has the first sector with the lowest number of writes)

sector number -&gt; 0  1  2  3  4  5  6  7  8  9 
MY DATA          -  .  x  x  -  -  x  .  -  .
usage count      6  6  6  6  6  6  7  6  6  5


sector 5 -> 9

sector number -&gt; 0  1  2  3  4  5  6  7  8  9 
MY DATA          -  .  x  x  -  -  x  .  -  -
usage count      6  6  6  6  6  6  7  6  6  6


sector 6 -> 0

sector number -&gt; 0  1  2  3  4  5  6  7  8  9 
MY DATA          -  .  x  x  -  -  x  .  -  -
usage count      7  6  6  6  6  6  7  6  6  6


sector 7 -> 1

sector number -&gt; 0  1  2  3  4  5  6  7  8  9 
MY DATA          -  -  x  x  -  -  x  .  -  -
usage count      7  7  6  6  6  6  7  6  6  6


sector 8 -> 2

sector number -&gt; 0  1  2  3  4  5  6  7  8  9 
MY DATA          -  -  -  x  -  -  x  .  -  -
usage count      7  7  7  6  6  6  7  6  6  6


sector 9 -> 3

sector number -&gt; 0  1  2  3  4  5  6  7  8  9 
MY DATA          -  -  -  -  -  -  x  .  -  -
usage count      7  7  7  7  6  6  7  6  6  6


As you can see, after the 1st pass, (the OS think than got erased all sectors) but in the reality sectors 6 and 7 got not touched.

In the next pass, the sector number 6 still not get erased. But in the 3rd pass GOT erased. In the reality it is more complicated, but the base principe is:


if you erasing the whole drive sector by sector (and not at filesystem level, so not file-by-file), you will get leveled all sectors on write
while you can not ensure, than all your files got erased on 1st pass, on multi-pass you can ensure this, just because of wear-leveling.


Now i show, why some users get confused about the erase. Imagine:


we have an empty SSD - all sectors has zero usage count. The SSD has for example 10 sectors.
we write one file, what got written into the first sector on SSD because this sector is the first with the usage count 0. So the sector #0 will have usage count 1. (again, this is not true in the reality, because of inode table, or FAT tables at the start of SSD - but for the example is ok)
so, the other 9 sectors are free (and has usage count 0). When you rewrite THE FILE 9 times, you physically got writes into the sectors 1-9, so after 9th rewrite your file is STILL IN SSD and possible to recover it. That is because you write only 1 sector at the time (rewriting only the space occupied with the file).
in the SSD with 1000 sectors, we can not ensure physical rewriting of the file (with length of 1sector) either in 1000pass erase.


But with the multi-pass erase of the ALL sectors (sector-by-sector) in SSD, you will get cleared all sectors and all sectors will have the same write-count at the end. (and the oldest FILE get erased first).

Just ask, if something is not fully clear.