Переміщення файлу між двома накопичувачами на одному SSD - це буде скопійовано?


18

При переміщенні файлу на одному диску, файл не копіюється та не видаляється. Таблиця, що стосується файлів, щойно оновлена. Наскільки я знаю, це не так у двох дисках на жорсткому диску. Але SSD-файли різні, для кожного диска немає фізичного простору. ( джерело )

Отже, моє запитання - що відбувається, коли файл переміщується з одного накопичувача на інший на одному SSD, чи байти скопійовані, а оригінал видалений, чи якась таблиця оновлена, тим самим менша кількість SSD?

Там вже дублікат питання тут . Але обидві відповіді стверджують:

кожен розділ матиме власну фізичну область диска до себе

і

Розбиття жорсткого диска фактично позначає фізичні області для кожного розділу. [та в коментарі:] SSD все ще є жорстким диском, він просто не має диска.

Наскільки я знаю, це неправильно. Дивіться тут .

Тож хто-небудь, хто знає більше про SSD-дисках, скажіть, чи правильно вони в їх оцінці, незважаючи на свою помилку?


14
Прийнята відповідь є правильною: кожен розділ має власну незалежну файлову систему. Кожна файлова система сама вирішує, як вона використовує призначені їй блоки. Щоб зробити те, що ви пропонуєте, програмне забезпечення SSD, файлової системи (-ів) та інструментів користувача, таких як Linux mv, повинні співпрацювати, сильно змішуючи шари абстракції.
Каміль Маціоровський

2
@Kamil: Якщо б ОС реалізувала це, mvнасправді потрібно було б зробити менше, ніж зараз, підозрюю. (Тобто ОС потрібно просто переконатися, що перейменування
міжфайлової

16
"2 диски на [SSD / HDD]" - я думаю, ви маєте на увазі сказати 2 файлові системи або 2 розділи на одному SSD / HDD. Пам'ятайте, що останнє "D" в обох абревіатурах - "Drive", тому ви говорите 2 диски на 1 диску, що не має сенсу.
JoL

1
Візьмемо для прикладу діалогове вікно «Управління дисками». Це говорить Change Drive Letter and Pathsпри посиланні на розділ / том.
ispiro

4
@ispiro Це в Windows? Здається, жахливий спосіб заплутати користувачів. Я можу лише здогадуватися, що вони придумали термін "Лист диска" перед розділами дисків, де вони були реалізовані, і тоді вони в кінцевому підсумку представляли розділи диска як окремі "диски". Отже, тепер у вас може бути декілька Windows "дисків", що представляють розділи одного апаратного накопичувача ...
JoL

Відповіді:


38

Наскільки я знаю, це неправильно

Цитований опис напівправильний, напівправильний. Але це теж напівправильно для HDD-дисків.

Розбиття диска призначає логічні області для кожного розділу. ОС взагалі не переймається фізичними місцями - вона просто просить накопичувач "прочитати логічний блок №31415926", а сам накопичувач вирішить, де дані розміщені. Це працює однаково для магнітної та флеш-пам’яті.

Це насправді те саме, що і з жорсткими дисками останніх 20–25 років: хоча ранні операційні системи використовували фізичні розташування циліндрів / головки / сектору, цього вже давно немає. Ви точно не знаєте, де на якій тарілці зберігається LBA №1234. Жорсткі диски автоматично перекомпонують погані фізичні сектори, тому той самий LBA може раптом зчитуватися з зовсім іншої фізичної області - як і з SSD.

Таким чином, як на жорстких, так і на SSD, ОС просто має діапазон LBA (наприклад, 0–999999) для читання та запису даних. Метою розділення є виділення в ньому піддіапазонів - наприклад, розділ A отримує 10–499999, розділ B отримує 500000–999999. Кожен розділ має незалежну файлову систему, і файлові системи всередині кожного розділу не можуть посилатися на дані, що знаходяться поза ним - вони не можуть перетинати межі розділу. (Наприклад, розділ A не може мати файл, дані якого зберігаються у секторі № 600000.)

У результаті всі файли, що переміщуються від одного до іншого, повинні бути скопійовані повністю.

(Враховуючи це, теоретично ОС може мати можливість попросити сам диск дублювати дані з однієї області в іншу (наприклад, "скопіювати LBA №1234 до # 567890"), не потребуючи копіювання їх у основну пам'ять, а потім назад, і, звичайно, це повністю обійде межі розділів. Це могло б використовувати, наприклад, "флеш-шар перекладу" SSD. Але на практиці, наскільки я знаю, це не робиться.)


Я припускаю, що ти маєш рацію. Однак зауважте, що є й інший варіант. Привід міг би вирішити, що сектор № 001 на диску №1 тепер буде перемикатися з сектором № 123 на диску №2 (тобто сектор № 001 на диску №1 тепер буде посилатися на фізичні дані, які раніше називали сектором №123 у диск №2) тим самим переміщуючи файл без копіювання байтів. Таким чином , переміщення Тб даних може бути в принципі майже миттєво.
ispiro

15
Привід не знає про файли чи файлові системи, а тому не може приймати такі рішення самостійно. Для цього потрібно отримати запит від ОС. Як я вже згадував в останньому абзаці, це, безумовно, технічно можливо, але операційні системи зазвичай не турбуються про це для копій міжфайлової системи, і я сумніваюся, що це робиться для копій однієї файлової системи (частіше це робиться на рівні FS).
користувач1686

6
Деякі SSD-диски реалізують деблокування рівня блоків. Наприклад, Sandforce ( en.wikipedia.org/wiki/SandForce#Technology ) одним із перших застосував це, і їх контролери пробралися в декілька продуктів виробника SSD. Контролери Sandforce мали коефіцієнт посилення запису менше одного - це означає, що вони записали менше даних у флеш-пам’ять, ніж те, що ОС надсилає на накопичувач. Для порівняння, SSD-диски зазвичай мають коефіцієнт підсилювача запису більше, ніж один.
ходжусарам

2
@hojusaram: Правда, але це все ще постфактумна дедупликація - зменшення запису флеш-пам'яті, але дані все ще читаються, копіюються з диска в пам'ять ОС і повертаються назад до дискового контролера. Що означає Ispiro, я думаю, що це еквівалент SSD "reflink" або "copy on write" (наприклад, cp --reflink), який ОС може явно попросити диск виконати самостійно.
користувач1686

1
Було б цікаво дізнатись, як APFS справляється з цим, оскільки межі розділів більше не встановлені, вони змінюються без втручання з боку користувача.
Tetsujin

9

Те, що відбувається, коли дані записуються на твердотільний диск, варте кількох статей (хороший підсумок тут ), оскільки це дуже складно і залежить від основної технології. Коротка історія полягає в тому, що SSD-накопичувачі взагалі не можуть записати нульові біти в пам'ять. Натомість вони мають нульове викреслити (стерти) цілий розділ пам'яті, а потім вони можуть зберігати дані після цього, просто записуючи їх до нього. Зазвичай вони пишуть блоки з 512 байтів, але стирають сторінку з 8 блоків, що становить 4096. Це, і той факт, що кожен цикл запису / стирання спричиняє певний фізичний знос пам'яті, а пам'ять з часом зношується, робить SSD дуже різними ніж спінінг магнітних жорстких дисків.

Якщо відмовитись, диски SATA (та приводи AFAIK SAS) не реалізують нативну команду для копіювання даних з одного сектора в інший. (Або принаймні нічого в специфікаціях SATA або SAS не вимагає від них, тому ОС не може розраховувати на наявність такої команди.) Отже, копія файлу через розділ передбачає зчитування даних з одного дискового сектора в пам'ять хоста, а потім запис він повертається до приводу в іншому секторі.

Це тому, що стосується ОС, накопичувач - це набір пронумерованих логічних секторів, і все, що він може зробити, - це зчитувати з секторів і записувати в сектори. Операційна система не може сказати накопичувачу на перезавантаження секторів.

Крім того, файлова система (HFS +, NTFS, ext3 тощо) - це набір структур даних, які накладають порядок на наборі логічних блоків. Ці структури даних реалізують "файли", "імена файлів", "каталоги", "дозволи" тощо. Отже, так, коли ви переміщуєте файл з одного каталогу в інший, він не копіюється; оновлюються лише дані файлової системи, що вказують, у якому каталозі знаходиться файл.

Концепція розділу полягає в тому, що це набір логічних секторів на диску, заявлених єдиною файловою системою. Наслідком цього є те, що файлова система може не мати доступу до секторів за межами свого розділу. Здебільшого це безпека, але це також випливає з того, що структури даних файлової системи побудовані навколо обліку кожного сектору накопичувача, що знаходиться у власності файлової системи, і додавати або видаляти сектори нетривіально. до цих структур. Ось чому вам потрібно запустити спеціальні процедури для регулювання розміру розділу, а також, чому файлові системи наполягають на роботі на суміжному наборі секторів.

Тож недоцільно та небезпечно реалізувати копію файлів як просто перенесення секторів з однієї файлової системи в іншу. На спінінг-магнітному приводі це також буде кошмаром продуктивності, оскільки, хоча привід буде винятками для поганих секторів, загалом він організує розміщення секторів фізично таким чином, щоб оптимізувати швидкість читання і запису послідовно пронумерованих сектори.

Крім того, 2 файлові системи можуть не зберігати файлові дані однаково на диску, тобто обмінні сектори не працюватимуть, навіть якби це було практично. Навіть якщо вони є абсолютно тими ж типами файлової системи, скажімо, NTFS, один може використовувати шифрування чи стиснення, а інший ні, або обидва можуть шифрувати дані, але за допомогою різних клавіш. Це не вимога, щоб дані у файлі були саме тим, що зберігаються на диску, все, що потрібно зберігати, - це оборотна трансформація даних, щоб файлова система могла отримати дані файлу, зробивши щось із дані на диску. Отже, якщо обидві файлові системи не використовують абсолютно однакове перетворення, просто заміна секторів не здійснить мету передачі файлових даних.

З усіх цих причин просто надто багато роботи для надто малого виграшу для письменників ОС та авторів файлової системи для реалізації функції, яка оптимізує переміщення через розділи для SSD. Таким чином, будь-який хід перехресної секції буде читанням і записом.

Всередині SSD - це дещо інша історія. Хоча ОС не казала накопичувачу, вона копіює дані з одного місця в інше, записи на SSD є настільки дорогими (і складними), що контролери SSD роблять багато роботи, щоб мінімізувати записи. Деякі SSD-диски йдуть настільки далеко, що намагаються визначити, коли сектор, записаний у сховище, відповідає сектору, який уже зберігається, і відзначають цей фізичний фрагмент пам’яті як тепер відображення до двох різних логічних секторів, а не копіювання, роблячи на рівні внутрішнього накопичувача ОС не могла.

Але не розраховуйте на це.


1
Чи не ваш останній абзац означає, що файлова система повинна бути однаковою? Я б припустив, що SSD не знає, яка файлова система працює зверху. Якщо, наприклад, один розділ використовує стиснення, а інший - ні, копія SSD, можливо, пошкодить файл.
блаблабла

@blablabla Останній абзац передбачає, що обидві файлові системи зберігають фактичний вміст файлу на диску без змін. Я зробив це явно зараз.
Старий Про
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.