Почему копирование между разделами на одном диске занимает много времени?

Почему копирование между разделами на одном диске занимает много времени?

Это возможный дубликатПеремещение файлов из одного раздела в другой на SSD

Когда я копирую файлы с C:\...\Downloads\на C:\...\Desktop\это происходит мгновенно,ноесли я копирую тот же файл (1,12 ГБ) на D:это уходит довольно много времени. Почему так?

решение1

Во-первых, ваш основной вопрос таков:

Почему копирование между разделами одного диска занимает много времени?

Подробности будут ниже, но один диск с несколькими разделами не является «тем же диском» с точки зрения файловой системы. С точки зрения файловой системы раздел — это просто еще один «физический диск», даже если это просто «логически» выделенное пространство на большем, родительском физическом диске, где находятся два раздела:

  • Диски имеют разделы,
  • Разделы имеют файловые системы.
  • Файловые системы содержат файлы.

Более подробную информацию читайте далее.

Примечание: я использую терминологию Linux/Unix/Mac OS X, поскольку это область моих основных знаний, но базовая концепция применима к Windows и, по сути, к любой другой ОС.

Почему ОС/ядро просто не переместит информацию о байтах/секторах/адресных указателях/всем остальном, выделенном для этого файла, из одной таблицы FileSystem в таблицу FileSystem другого раздела?

Это связано с тем, что таблица инодов, которая контролирует и управляет тем, какие сектора подключены к каким файлам, является структурой, присущей каждому диску и каждому разделу.

  • Таким образом, когда вы копируете что-либо с C:на , C:все, что происходит, — это редактирование записи inode на C:диске, чтобы указать новый путь к файлу на том же C:диске.

  • Но когда вы копируете что-либо из C:в D:, данные должны быть скопированы и на D:диске должна быть создана новая запись inode.

Допустим, вы задаетесь вопросом, почему бы просто не хранить все данные диска на основном C:диске вместо того, чтобы делать это на основе каждого устройства, каждого раздела? Ну, а что тогда произойдет, если этот диск или раздел будет перемещен на другую машину? Диск D:будет выглядеть просто как пустое и неиспользуемое пространство без данных таблицы распределения. И если диск C:выйдет из строя в таком сценарии, вы потеряете не только диск, C:но и более глубокую информацию о файловой системе, связанную с D:диском.

Вы также отредактировали свой вопрос, чтобы указать следующее:

Я полагаю, что разделение является логическим, а не физическим.

И да, и нет. Разделениелогичнона стороне таблицы разделов. Но на уровне файловой системы файловая система видит разделкак будто это еще один физический диск.

И вы также спрашиваете это:

Так почему же контроллер ОС или файловой системы просто не копирует эти метаданные helloKitty.txtв другие таблицы разделов?

Этоделаеткопирует метаданные из одного места в другое. Но он также копирует фактические данные файла, поскольку эти данные D:не будут существовать, пока не будут скопированы из C:. И метаданные, которые он копирует, ограничиваются основными сведениями о содержимом файла, поскольку данные байтов и секторов изменятся при копировании с C:диска/раздела на D:диск/раздел.

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

Раздел является «логическим» в контексте раздела. Данные, хранящиеся в файловой системе на этом разделе, не являются «логическими» в контексте данных об отдельных файлах, идущих вверх по таблице разделов. Это просто так, как оно есть, и раздел—как определено Википедией— описывается следующим образом; курсив мой:

Разбиение диска на разделы — это процесс разделения жесткого диска (HDD) на несколько логических единиц хранения, называемых разделами.рассматривать один физический диск как несколько дисков, чтобы на каждом разделе можно было использовать отдельную файловую систему.

решение2

Файловая система — это не просто адреса для содержимого каждого файла. Она также должна отслеживать, какие части раздела не распределены («свободное пространство»), и сколько свободного пространства доступно в целом. Если файловая система в разделе C:должна была бы хранить некоторые данные файлов в разделе D:, ей пришлось бы сначала просмотреть D:структуры файловой системы , чтобы найти свободное пространство, и пометить это пространство как распределенное в файловой системе , D:чтобы данные не были перезаписаны другим файлом, созданным в D:. Позже, когда вы удалите файл, который, как кажется, находится в файловой системе C:, ей пришлось бы D:снова обратиться к файловой системе , чтобы пометить это пространство как свободное.

Проверка ошибок будет проблематичной: Обычно, если есть пространство, которое отмечено как выделенное, но на самом деле не является частью какого-либо файла в структуре каталогов файловой системы, это считается ошибкой. Проверка согласованности (например, Windows chkdskили Linux/Unix fdisk) либо отметит пространство как свободное, либо создаст файл, сопоставленный с этим пространством, чтобы человек мог изучить данные и удалить их вручную. Но если данные, о которых идет речь, на самом деле являются частью файла в какой-то другой файловой системе, это приведет к тому, что пространство будет отмечено как свободное (либо немедленно, либо когда кто-то удалит «восстановленный» файл), хотя его все еще использует файл.

Безопасное распределение файлов через границы файловых систем потребовало бы, чтобы две файловые системы постоянно «знали» о структурах друг друга, в той степени, в которой они могли бы быть просто одной файловой системой, охватывающей несколько разделов. Некоторые файловые системы на самом деле поддерживают это: см.zfsиbtrfs. Они действуют как своего рода RAID, встроенный в файловую систему: они могут сделать так, чтобы несколько разделов, даже на нескольких дисках, выглядели как один логический диск. Но разделы — и диски — зависят друг от друга; вы не можете просто взять один и использовать его сам по себе.

решение3

В этом отношении разные разделы подобны разным дискам.

Блоки для каждого раздела назначаются последовательно, вы же предлагаете, чтобы диск автоматически переразбивал себя, назначая сектора, принадлежащие одному разделу, другому.

Такой подход был бы очень подвержен ошибкам, снизил бы производительность диска и нарушил бы другие функции, такие как ведение журнала.

Связанный контент