Перемещение данных с одного диска на другой происходит медленно. Копирование данных с диска на себя происходит медленно. Перемещение данных с одного диска на себя происходит быстро.
Если я перемещаю данные на ТО ЖЕ диск, но в другой раздел, разве это не должно быть быстро? Я предполагал, что перемещение будет жирным изменением таблицы, а не фактическим перемещением (копированием/удалением) данных на диске. Как я могу убедиться, что это то, что происходит?
К вашему сведению, я работаю на Mac OSX и имею дело с двумя разделами FAT32 на одном внешнем диске.
решение1
Если я перемещаю данные на ТО ЖЕ диск, но в другой раздел, разве это не должно быть быстро? Я предполагал, что перемещение будет жирным изменением таблицы...
Нет, потому что FAT является частьюафайловая система, и каждый раздел содержитодинфайловая система. Так что если вы перемещаете данные в другую файловую систему, операционная система не может просто переставить вещи в толстой таблице — нужно рассмотреть две, и они не сопоставляются друг с другом произвольно. Место назначения должно выделить часть своего собственного пространства, а источник (при перемещении) освобождает часть.
Если бы речь шла только о перестановке таблиц, вы бы столкнулись с такими несоответствиями, как:
У меня есть раздел на 100 ГБ и раздел на 2 ГБ. Если перемещение одного на другой включало бы только перестановку таблиц, я должен иметь возможность переместить файл размером 20 ГБ из первого во второй.
Я перемещаю файлы в раздел на USB-накопителе, а затем перемещаю сам накопитель: если перемещение файлов сводится только к перестановке таблиц, где будут файлы, когда я вставлю его в другой компьютер?
Я понимаю, что второй случай не является частью контекста, на который вы ссылаетесь, но причина, по которой они сводятся к одному и тому же, заключается в том, что в противном случае вам потребовался бы еще один уровень абстракции, хранящийся на устройстве. Это не может быть чем-то просто придуманным и сфальсифицированным операционной системой, потому что вы можете переместить устройство и/или использовать его под другой ОС: где же теперь информация?
Устройстваможетсодержат метаданные, указывающие размер, тип и смещение их разделов. К счастью,они не содержат информации осодержаниеэтих разделов. Я говорю к счастью, потому что это наверняка создаст больше проблем, чем решит.
Файловые системы должны быть дискретными сущностями верхнего уровня, а не частями более крупной системы хранения (хотя ониможетбыть таковым в некоторых контекстах).
Однако некоторые устройства, такие как SSD, могут реализовывать функцию оптимизации, схожую с той, которую вы подразумеваете на уровне оборудования. Другими словами, если вы перемещаете что-либо из одного раздела в другой на SSD, это может только переупорядочить некоторые ссылки, поскольку это оборудование ведет учет себя как целого, независимо от того, как оно было разбито на различные разделы на более высоком уровне абстракции. Это было бы совершенно непрозрачно для операционной системы и всего остального, но вы можете заметить это как чрезвычайно быстрый переход. Для этого требуется, чтобы устройство запускало некую прошивку, которая представляетвиртуальныйнабор адресов блоков для операционной системы, затем сопоставляет их с самим физическим, чего традиционные диски не делают: они представляют фактические физические адреса операционной системе, чтобы она могла использовать это как можно оптимальнее. Следовательно, реализации файловой системы (FAT и т. д.) должны предполагать, что они организуют фактическую физическую область устройства, и нет никакого уровня над файловой системой, чтобы попытаться организовать содержимое всего устройства (помимо разбиения его на разделы).