При перемещении файла на один диск файл не копируется и не удаляется. Таблица, которая ссылается на файлы, только что обновлена. И, насколько я знаю, это не относится к двум дискам на жестком диске. Но твердотельные накопители разные, для каждого диска нет физического места. ( источник )
Итак, мой вопрос: что происходит, когда файл перемещается с одного диска на другой на одном и том же SSD, копируются ли байты и удаляются ли исходные данные, или обновляется какая-то таблица, тем самым уменьшая количество SSD?
Там уже дубликат вопрос здесь . Но оба ответа утверждают:
каждый раздел будет иметь свою собственную физическую область диска для себя
и
Разделение жесткого диска фактически обозначает физические области для каждого раздела. [и в комментарии:] SSD - все еще жесткий диск, у него просто нет диска.
Насколько я знаю, это неправильно. Смотрите здесь .
Так, скажет ли мне кто-то, кто знает больше о твердотельных накопителях, если они верны в своих оценках, несмотря на свою ошибку?
источник
mv
, должны будут взаимодействовать, сильно смешивая слои абстракции.mv
самом деле нужно было бы делать меньше, чем сейчас, я подозреваю. (То есть ОС просто нужно убедиться, что кросс-файловая система rename () будетChange Drive Letter and Paths
при обращении к разделу / тому.Ответы:
Приведенное описание наполовину правильно, наполовину неправильно. Но это также наполовину неправильно для жестких дисков.
Разделение диска обозначает логические области для каждого раздела. ОС вообще не заботится о физическом расположении - она просто просит диск «прочитать логический блок # 31415926», и сам диск решает, где находятся данные. Это работает одинаково для магнитной и флэш-памяти.
Это на самом деле то же самое, что и с жесткими дисками за последние 20–25 лет: хотя в ранних операционных системах использовались места расположения физических цилиндров / головок / секторов, этого уже давно нет. Вы не знаете точно, где на каком блюде находится LBA # 1234. Жесткие диски даже автоматически перераспределяют поврежденные физические сектора, поэтому один и тот же LBA может внезапно считываться из совершенно другой физической области - как и в случае с твердотельными накопителями.
Таким образом, как с жесткими дисками, так и с твердотельными накопителями, ОС просто имеет диапазон LBA (например, 0–999999) для чтения и записи данных. Цель разделения состоит в том, чтобы выделить в нем поддиапазоны - например, раздел A получает 10–499999, раздел B получает 500000–999999. Каждый раздел имеет независимую файловую систему, и файловые системы внутри каждого раздела не могут ссылаться на данные вне его - они не могут пересекать границы раздела. (Например, раздел А не может иметь файл, данные которого хранятся в секторе # 600000.)
В результате все файлы, перемещающиеся из одного в другой, должны быть скопированы полностью.
(Тем не менее, теоретически ОС может попросить сам диск скопировать данные из одной области в другую (например, «скопировать LBA # 1234 в # 567890»), не копируя их в основную память, а затем обратно, и, конечно, это могло бы полностью обойти границы раздела. Это могло бы использовать, например, «слой флэш-трансляции» SSD. Но на практике, насколько я знаю, это не делается.)
источник
То, что происходит, когда данные записываются на твердотельный диск, достойно нескольких статей (хорошее резюме здесь ), потому что это очень сложно и зависит от базовой технологии. Короткая история заключается в том, что твердотельные накопители вообще не могут записать нулевые биты в память. Вместо этого они должны обнулить (стереть) целый раздел памяти, а затем они могут хранить данные после этого, просто записывая их в него. Как правило, в наши дни они записывают блоки по 512 байт, но стирают страницу из 8 блоков, что составляет 4096. Это и тот факт, что каждый цикл записи / стирания вызывает некоторый физический износ памяти, а память со временем изнашивается, делают SSD очень разными чем вращающиеся магнитные жесткие диски.
Кроме этого, диски SATA (и диски AFAIK SAS) не реализуют встроенную команду для копирования данных из одного сектора в другой. (Или, по крайней мере, в спецификации SATA или SAS этого не требуется, поэтому ОС не может рассчитывать на то, что такая команда будет доступна.) Таким образом, при копировании файла через раздел будет происходить считывание данных из одного сектора диска в память хоста, а затем запись это обратно на диск в другом секторе.
Это связано с тем, что в отношении ОС диск представляет собой набор пронумерованных логических секторов, и все, что он может сделать, - это читать из секторов и записывать в сектора. ОС не может сказать диску переназначить сектора.
Кроме того, файловая система (HFS +, NTFS, ext3 и т. Д.) Представляет собой набор структур данных, которые устанавливают порядок в наборе логических блоков. Эти структуры данных реализуют «файлы», «имена файлов», «каталоги», «разрешения» и т. Д. Итак, да, когда вы перемещаете файл из одного каталога в другой, он не копируется; обновляются только данные файловой системы, указывающие, в каком каталоге находится файл.
Концепция раздела заключается в том, что он представляет собой набор логических секторов на диске, заявленных одной файловой системой. Следствием этого является то, что файловая система не может получить доступ к секторам за пределами своего раздела. По большей части это функция безопасности, но она также вытекает из того факта, что все структуры данных файловой системы построены на учете каждого сектора диска, находящегося в собственности файловой системы, и нетрудно добавлять или удалять сектора к этим структурам. Вот почему вы должны запускать специальные подпрограммы для настройки размера раздела, а также почему файловые системы настаивают на работе на непрерывном наборе секторов.
Поэтому нецелесообразно и опасно реализовывать копию файла как просто передачу секторов из одной файловой системы в другую. На вращающемся магнитном диске это также было бы кошмаром производительности, потому что, хотя диск будет делать исключения для плохих секторов, в целом он обеспечивает физическое расположение секторов таким образом, чтобы оптимизировать скорость чтения и записи последовательно пронумерованных сектора.
Кроме того, две файловые системы могут не хранить данные на диске одинаковым образом, а это означает, что замена секторов не будет работать, даже если это будет практично. Даже если они относятся к одним и тем же типам файловых систем, например NTFS, одна может использовать шифрование или сжатие, а другая нет, или оба могут шифровать данные, но с разными ключами. Не обязательно, чтобы данные в файле были именно тем, что хранится на диске, все, что нужно сохранить, - это обратимое преобразование данных, чтобы файловая система могла получить данные файла, выполнив что-то с данные на диске. Таким образом, если обе файловые системы не используют одно и то же преобразование, простое переключение секторов не приведет к цели передачи данных файла.
По всем этим причинам для создателей ОС и разработчиков файловой системы слишком много работы и слишком мало выгоды для реализации функции, оптимизирующей перемещение по разделам для твердотельных накопителей. Таким образом, любое перемещение между разделами будет чтение и запись.
Внутри SSD это немного другая история. Хотя операционная система не сообщает накопителю, что копирует данные из одного места в другое, запись на твердотельные накопители настолько дорога (и сложна), что контроллеры твердотельных накопителей выполняют большую работу, чтобы минимизировать объемы записи. Некоторые SSD пытаются обнаружить, когда сектор, записываемый в хранилище, соответствует уже сохраненному сектору, и пометить этот физический фрагмент памяти как теперь отображающийся на 2 различных логических секторах, а не копировать его, делая на уровне внутреннего диска то, что ОС не смогла.
Но не рассчитывай на это.
источник