SSDs differ in a major way from HDDs because they store data on NAND semiconductor arrays. One SSD typically has multiple (4-16) NAND flash chips. Each of these chips are divided into blocks (around million NAND cells) which are further divided into pages (thousands of NAND cells). Pages are further divided into individual cells. Depending on the technology each cell can store 1-3 bits of data.
Due to the structure and technology of the NAND cell array there are a few factors that make data management in an SSD an interesting task:
- It is only possible to write at page level and erase at the block level.
- Before each write the cell must be erased.
- Write erase cycles degrade the cell and eventually the cell can no longer be used reliably to store data.
- Data is written in segments accross several locations to ensure higher transfer rates.
All these factors make copying, moving, and duplicating of data necessary. This adds to complexity of how the data is distributed in the NAND cells. The data becomes fragmented and there will be large amounts of stale data.
SSDs have a built in controller (flash controller chip) that manages the data and keeps track of its physical location. When the operating system sends a read or write command it goes through the flash controller which then translates the command. The operating system does not actually see the flash controller commands. As a result the operating system can not keep track of the physical location of the data. It has been shown that operating system sanitize (overwrite data with some pattern) commands on SSDs do not necessarily purge all data because the flash controller may translate the command so that it does not apply to all instances of data.