Любой, обладающий поверхностным пониманием восстановления и очистки данных применительно к жестким дискам, осознает концепцию, согласно которой данные, "окончательно" удаленные из операционной системы, не удаляются, а просто помечаются как таковые в MFT и что данные существуют на диске, пока сектор, который он занимает на жестком диске, не будет перезаписан новыми данными.

Однако недавно я понял, что сомневаюсь, является ли этот процесс функцией самого жесткого диска или файловой системы на нем (NTFS более вероятно, так как мы говорим о MFT). Если это первое, насколько отличается этот процесс в механических и твердотельных накопителях? Если последнее, другие файловые системы (кроме NTFS) обрабатывают удаление данных радикально по-другому?

2 ответа2

2

Жесткий диск как уровень абстракции не нуждается в концепции удаленных данных. Это блочное устройство. Вы можете либо читать, либо писать в его блок, сектор по вашему выбору. Что бы вы ни писали в сектор, вы можете прочитать это позже столько раз, сколько захотите. Если перезаписать сектор, то последовательные попытки чтения вернут новые данные. Не существует особого состояния, которое указывает "нет данных". Если размер сектора составляет 512 байт, а диск исправен, то при каждом чтении вы будете получать от него 512 байт. Некоторый более высокий уровень абстракции должен знать, что эти байты что-то значат или нет.

Обычно файловая система является таким слоем. Та же самая последовательность байтов, возвращенная из того же сектора, может быть частью некоторого файла или пустого пространства, в зависимости от содержимого других секторов (в вашем примере: где хранится MFT). Термин "пустое пространство" здесь вводит в заблуждение; "расходуемые байты" были бы лучше.

Так как любой сектор должен в любом случае возвращать некоторые данные при запросе, это нормальный и распространенный подход - оставить данные нетронутыми при удалении файла и изменить только метаданные (например, MFT), которые отслеживают значимые и расходуемые сектора. Обычные файловые системы обрабатывают удаления таким образом.

Такое разделение слоев очень хорошо работает с жесткими дисками.

Для твердотельных накопителей (в целом, флэш-памяти) есть по крайней мере две причины, по которым вы хотите сообщить самому устройству (то есть его встроенному контроллеру), какие сектора расходуются.

Одним из них является тот факт, что вы не можете напрямую перезаписывать данные, хранящиеся в ячейках флэш-памяти (честно говоря, я не уверен, применимо ли это ко всем технологиям, но это относится, по крайней мере, к некоторым из них, и они распространены). Вам нужно стереть ячейки, а затем записать в них новые данные во время отдельной операции.

Это означает, что внутренне существует состояние, указывающее "удален" или "нет данных". Если устройство знает, какие секторы расходуются, оно может стереть их заранее, и когда придет время что-то написать, задержки не будет. (Ну, это еще сложнее. Вы можете стереть не меньше, чем целую кучу ячеек, намного больше, чем один 512-байтовый сектор. Для получения дополнительной информации исследуйте «флэш-блоки и страницы», «сборка флэш-мусора»

Другая причина - выравнивание износа. Ячейка флэш-памяти немного изнашивается при каждой записи (точнее, при каждом стирании) Если вы продолжаете перезаписывать один и тот же логический сектор снова и снова, ваш современный SSD переназначит его на разные физические ячейки, чтобы они равномерно израсходовали. Устройство, вероятно, имеет значительный пул "запасных" ячеек, которые оно может использовать, даже если ни один из логических секторов не известен как расходуемый, но вся хитрость работает лучше, если контроллер знает, какие сектора содержат данные, которые больше не нужны, поэтому может свободно использовать ячейки, отображенные на них.

Когда ваша операционная система (которая понимает файловую систему) сообщает вашему SSD, какие сектора расходуются, мы называем это усечением (см. Этот мой ответ для некоторых деталей).

Обратите внимание, что даже если весь SSD будет удален изнутри, любой сектор вернет некоторые двоичные данные при чтении (я думаю, что прошивка, вероятно, вернет все нули, хотя я не проверял); Вы не можете сказать стертые ячейки из ячеек, фактически содержащих эти конкретные данные, просто считывая данные с устройства. Внешне это имитирует традиционное поведение жесткого диска, когда вообще нет понятия стертых (удаленных) данных.

1

Файловая система, для которой жесткий диск обеспечивает физическое хранилище, помечает файл как удаленный. Сам накопитель, обычный или твердотельный накопитель, не знает файлов, папок, файловых систем, разделов и т.д. Это все концепции высокого уровня, реализованные файловой системой и другим системным программным обеспечением. Диск понимает только блоки данных и не понимает, для чего эти данные могут быть использованы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .