1
Vote

System.IO.IOException: Attempt to get an MFT record with an old reference.

description

System.IO.IOException: Attempt to get an MFT record with an old reference.
The issue is in MasterFileTable.cs.

On the constructor it loads only the first 24 records. The rest of the MFT is loaded later.

Here is the calling code from NtfsFileSystem.cs:
        // Bootstrap the Master File Table
        _context.Mft = new MasterFileTable(_context);
        File mftFile = new File(_context, _context.Mft.GetBootstrapRecord());
        _fileCache[MasterFileTable.MftIndex] = mftFile;
        _context.Mft.Initialize(mftFile);

In order to load the rest of the MFT it needs to load all attributes (in the File() constructor). But in our case the attributes for the $MFT file itself are non resident. So it tries to load them using the partial MFT (24 records), but it cannot access non-resident records (outside the 24 records). So it's a vicious circle, it needs all MFT records in order to load the Attributes which are needed to load all MFT records.

comments