Те, що відбувається, коли дані записуються на твердотільний диск, варте кількох статей (хороший підсумок тут ), оскільки це дуже складно і залежить від основної технології. Коротка історія полягає в тому, що SSD-накопичувачі взагалі не можуть записати нульові біти в пам'ять. Натомість вони мають нульове викреслити (стерти) цілий розділ пам'яті, а потім вони можуть зберігати дані після цього, просто записуючи їх до нього. Зазвичай вони пишуть блоки з 512 байтів, але стирають сторінку з 8 блоків, що становить 4096. Це, і той факт, що кожен цикл запису / стирання спричиняє певний фізичний знос пам'яті, а пам'ять з часом зношується, робить SSD дуже різними ніж спінінг магнітних жорстких дисків.
Якщо відмовитись, диски SATA (та приводи AFAIK SAS) не реалізують нативну команду для копіювання даних з одного сектора в інший. (Або принаймні нічого в специфікаціях SATA або SAS не вимагає від них, тому ОС не може розраховувати на наявність такої команди.) Отже, копія файлу через розділ передбачає зчитування даних з одного дискового сектора в пам'ять хоста, а потім запис він повертається до приводу в іншому секторі.
Це тому, що стосується ОС, накопичувач - це набір пронумерованих логічних секторів, і все, що він може зробити, - це зчитувати з секторів і записувати в сектори. Операційна система не може сказати накопичувачу на перезавантаження секторів.
Крім того, файлова система (HFS +, NTFS, ext3 тощо) - це набір структур даних, які накладають порядок на наборі логічних блоків. Ці структури даних реалізують "файли", "імена файлів", "каталоги", "дозволи" тощо. Отже, так, коли ви переміщуєте файл з одного каталогу в інший, він не копіюється; оновлюються лише дані файлової системи, що вказують, у якому каталозі знаходиться файл.
Концепція розділу полягає в тому, що це набір логічних секторів на диску, заявлених єдиною файловою системою. Наслідком цього є те, що файлова система може не мати доступу до секторів за межами свого розділу. Здебільшого це безпека, але це також випливає з того, що структури даних файлової системи побудовані навколо обліку кожного сектору накопичувача, що знаходиться у власності файлової системи, і додавати або видаляти сектори нетривіально. до цих структур. Ось чому вам потрібно запустити спеціальні процедури для регулювання розміру розділу, а також, чому файлові системи наполягають на роботі на суміжному наборі секторів.
Тож недоцільно та небезпечно реалізувати копію файлів як просто перенесення секторів з однієї файлової системи в іншу. На спінінг-магнітному приводі це також буде кошмаром продуктивності, оскільки, хоча привід буде винятками для поганих секторів, загалом він організує розміщення секторів фізично таким чином, щоб оптимізувати швидкість читання і запису послідовно пронумерованих сектори.
Крім того, 2 файлові системи можуть не зберігати файлові дані однаково на диску, тобто обмінні сектори не працюватимуть, навіть якби це було практично. Навіть якщо вони є абсолютно тими ж типами файлової системи, скажімо, NTFS, один може використовувати шифрування чи стиснення, а інший ні, або обидва можуть шифрувати дані, але за допомогою різних клавіш. Це не вимога, щоб дані у файлі були саме тим, що зберігаються на диску, все, що потрібно зберігати, - це оборотна трансформація даних, щоб файлова система могла отримати дані файлу, зробивши щось із дані на диску. Отже, якщо обидві файлові системи не використовують абсолютно однакове перетворення, просто заміна секторів не здійснить мету передачі файлових даних.
З усіх цих причин просто надто багато роботи для надто малого виграшу для письменників ОС та авторів файлової системи для реалізації функції, яка оптимізує переміщення через розділи для SSD. Таким чином, будь-який хід перехресної секції буде читанням і записом.
Всередині SSD - це дещо інша історія. Хоча ОС не казала накопичувачу, вона копіює дані з одного місця в інше, записи на SSD є настільки дорогими (і складними), що контролери SSD роблять багато роботи, щоб мінімізувати записи. Деякі SSD-диски йдуть настільки далеко, що намагаються визначити, коли сектор, записаний у сховище, відповідає сектору, який уже зберігається, і відзначають цей фізичний фрагмент пам’яті як тепер відображення до двох різних логічних секторів, а не копіювання, роблячи на рівні внутрішнього накопичувача ОС не могла.
Але не розраховуйте на це.
mv
, повинні співпрацювати, сильно змішуючи шари абстракції.