То, что происходит, когда данные записываются на твердотельный диск, достойно нескольких статей (хорошее резюме здесь ), потому что это очень сложно и зависит от базовой технологии. Короткая история заключается в том, что твердотельные накопители вообще не могут записать нулевые биты в память. Вместо этого они должны обнулить (стереть) целый раздел памяти, а затем они могут хранить данные после этого, просто записывая их в него. Как правило, в наши дни они записывают блоки по 512 байт, но стирают страницу из 8 блоков, что составляет 4096. Это и тот факт, что каждый цикл записи / стирания вызывает некоторый физический износ памяти, а память со временем изнашивается, делают SSD очень разными чем вращающиеся магнитные жесткие диски.
Кроме этого, диски SATA (и диски AFAIK SAS) не реализуют встроенную команду для копирования данных из одного сектора в другой. (Или, по крайней мере, в спецификации SATA или SAS этого не требуется, поэтому ОС не может рассчитывать на то, что такая команда будет доступна.) Таким образом, при копировании файла через раздел будет происходить считывание данных из одного сектора диска в память хоста, а затем запись это обратно на диск в другом секторе.
Это связано с тем, что в отношении ОС диск представляет собой набор пронумерованных логических секторов, и все, что он может сделать, - это читать из секторов и записывать в сектора. ОС не может сказать диску переназначить сектора.
Кроме того, файловая система (HFS +, NTFS, ext3 и т. Д.) Представляет собой набор структур данных, которые устанавливают порядок в наборе логических блоков. Эти структуры данных реализуют «файлы», «имена файлов», «каталоги», «разрешения» и т. Д. Итак, да, когда вы перемещаете файл из одного каталога в другой, он не копируется; обновляются только данные файловой системы, указывающие, в каком каталоге находится файл.
Концепция раздела заключается в том, что он представляет собой набор логических секторов на диске, заявленных одной файловой системой. Следствием этого является то, что файловая система не может получить доступ к секторам за пределами своего раздела. По большей части это функция безопасности, но она также вытекает из того факта, что все структуры данных файловой системы построены на учете каждого сектора диска, находящегося в собственности файловой системы, и нетрудно добавлять или удалять сектора к этим структурам. Вот почему вы должны запускать специальные подпрограммы для настройки размера раздела, а также почему файловые системы настаивают на работе на непрерывном наборе секторов.
Поэтому нецелесообразно и опасно реализовывать копию файла как просто передачу секторов из одной файловой системы в другую. На вращающемся магнитном диске это также было бы кошмаром производительности, потому что, хотя диск будет делать исключения для плохих секторов, в целом он обеспечивает физическое расположение секторов таким образом, чтобы оптимизировать скорость чтения и записи последовательно пронумерованных сектора.
Кроме того, две файловые системы могут не хранить данные на диске одинаковым образом, а это означает, что замена секторов не будет работать, даже если это будет практично. Даже если они относятся к одним и тем же типам файловых систем, например NTFS, одна может использовать шифрование или сжатие, а другая нет, или оба могут шифровать данные, но с разными ключами. Не обязательно, чтобы данные в файле были именно тем, что хранится на диске, все, что нужно сохранить, - это обратимое преобразование данных, чтобы файловая система могла получить данные файла, выполнив что-то с данные на диске. Таким образом, если обе файловые системы не используют одно и то же преобразование, простое переключение секторов не приведет к цели передачи данных файла.
По всем этим причинам для создателей ОС и разработчиков файловой системы слишком много работы и слишком мало выгоды для реализации функции, оптимизирующей перемещение по разделам для твердотельных накопителей. Таким образом, любое перемещение между разделами будет чтение и запись.
Внутри SSD это немного другая история. Хотя операционная система не сообщает накопителю, что копирует данные из одного места в другое, запись на твердотельные накопители настолько дорога (и сложна), что контроллеры твердотельных накопителей выполняют большую работу, чтобы минимизировать объемы записи. Некоторые SSD пытаются обнаружить, когда сектор, записываемый в хранилище, соответствует уже сохраненному сектору, и пометить этот физический фрагмент памяти как теперь отображающийся на 2 различных логических секторах, а не копировать его, делая на уровне внутреннего диска то, что ОС не смогла.
Но не рассчитывай на это.
mv
, должны будут взаимодействовать, сильно смешивая слои абстракции.