A.method of recovering metadata for data stored in a FLASH memory system: using a computer to maintain metadata representing a physical location of stored data in a non-volatile memory comprising physical blocks of pages, each page written with data and metadata in monotonically increasing order, where each page has a maximum page number value, wherein metadata is stored for a physical block of pages of the NVM, the metadata including a page location value, MAX_PAGE, corresponding to a highest page location in the physical block that has been written with data and metadata, the metadata stored on the page including a logical address of the data; wherein the method of performing metadata recovery comprises: setting a page location value P= MAX_PAGE+1, and a. reading metadata from the page having the page location value P, and a1. if the page having the page location value P does not contain metadata, proceeding to step b; or a2. if the page having the page location value P does contain metadata: storing the metadata read from the page location having a page location value P to a recovery log; setting P=P+1 and repeating step a until the process is ended for said block of NVM or a page of the block having the maximum page number value has been read; and b. performing step a for another physical block of NVM until all of the physical blocks of NVM in which metadata has been stored have been processed. using a computer to maintain metadata representing a physical location of stored data in a non-volatile memory comprising physical blocks of pages, each page written with data and metadata in monotonically increasing order, where each page has a maximum page number value, wherein metadata is stored for a physical block of pages of the NVM, the metadata including a page location value, MAX_PAGE, corresponding to a highest page location in the physical block that has been written with data and metadata, the metadata stored on the page including a logical address of the data; wherein the method of performing metadata recovery comprises: setting a page location value P= MAX_PAGE+1, and a. reading metadata from the page having the page location value P, and a1. if the page having the page location value P does not contain metadata, proceeding to step b; or a2. if the page having the page location value P does contain metadata: storing the metadata read from the page location having a page location value P to a recovery log; setting P=P+1 and repeating step a until the process is ended for said block of NVM or a page of the block having the maximum page number value has been read; and b. performing step a for another physical block of NVM until all of the physical blocks of NVM in which metadata has been stored have been processed. setting a page location value P= MAX_PAGE+1, and a. reading metadata from the page having the page location value P, and a1. if the page having the page location value P does not contain metadata, proceeding to step b; or a2. if the page having the page location value P does contain metadata: storing the metadata read from the page location having a page location value P to a recovery log; setting P=P+1 and repeating step a until the process is ended for said block of NVM or a page of the block having the maximum page number value has been read; and b. performing step a for another physical block of NVM until all of the physical blocks of NVM in which metadata has been stored have been processed. a. reading metadata from the page having the page location value P, and a1. if the page having the page location value P does not contain metadata, proceeding to step b; or a2. if the page having the page location value P does contain metadata: storing the metadata read from the page location having a page location value P to a recovery log; setting P=P+1 and repeating step a until the process is ended for said block of NVM or a page of the block having the maximum page number value has been read; and a1. if the page having the page location value P does not contain metadata, proceeding to step b; or a2. if the page having the page location value P does contain metadata: storing the metadata read from the page location having a page location value P to a recovery log; setting P=P+1 and repeating step a until the process is ended for said block of NVM or a page of the block having the maximum page number value has been read; and storing the metadata read from the page location having a page location value P to a recovery log; setting P=P+1 and repeating step a until the process is ended for said block of NVM or a page of the block having the maximum page number value has been read; and b. performing step a for another physical block of NVM until all of the physical blocks of NVM in which metadata has been stored have been processed.