Виртуальный жесткий диск - это файловая система внутри другой файловой системы.
Чтобы прочитать содержимое VHD, операционная система должна пройти два уровня косвенного обращения. Давайте посмотрим на это с точки зрения аппаратного обеспечения.
Таким образом, аппаратное обеспечение (жесткий диск, SSD, что угодно) считывает «сырые» сектора с диска. Из этих необработанных секторов драйвер файловой системы NTFS сообщает операционной системе информацию о секторах на диске, где находятся данные VHD. В конце концов, VHD - это файл, содержащий файловую систему . Прежде чем вы сможете прочитать файловую систему в VHD, вы должны сначала прочитать сам VHD как файл в базовой файловой системе NTFS.
Теперь вы прочитали байты VHD-файла. И что представляют эти байты? Это ... другая файловая система NTFS, со своим собственным списком файлов и каталогов, метаданными, потоками, фрагментами файлов и так далее.
В одном из оригинальных ответов на вопрос упоминается фрагментация. Это может стать огромной проблемой, если у вас есть файловые системы, вложенные в файловые системы. В худшем случае, если обе файловые системы фрагментированы: во вложенной файловой системе могут быть фрагменты файлов, которые сами по себе фрагментированы в файловой системе хоста! Все это «рассеяние» данных приводит к очень случайной схеме доступа к файлам, что означает, что жесткий диск должен «искать» много . Поиск особенно медленный на вращающихся носителях (традиционные жесткие диски); на устройствах с памятью, таких как твердотельные накопители, поиск выполняется намного быстрее, но все же лучше избегать поиска, когда это возможно.
Таким образом, вашей проблемой, скорее всего, будет фрагментация, а точнее, вложенная фрагментация (фрагментация как вложенной, так и внешней файловой системы).
Представьте, что у вас есть пластиковый лоток для кубиков льда на 10 кубиков льда, а внутри каждого отверстия для кубиков льда есть 10 прямоугольных стержней. Каждый прямоугольный стержень представляет собой кусок буквы. Вы хотите записать слово «ЯБЛОКИ». Как ты собираешься это сделать?
Ну, во-первых, вы должны посмотреть во все отверстия для кубиков льда и найти правильные стержни, чтобы собрать каждую букву. Затем вы должны убедиться, что все буквы в порядке. Таким образом, у вас есть «проблема внутри проблемы» - проблема на микроуровне состоит в сборке каждой буквы, а проблема на макроуровне - в сборке букв в слово. Вот как работают вложенные файловые системы при фрагментации.
Теперь, если бы у вас был только один слой файловой системы, это было бы похоже на наличие сплошного деревянного блока с напечатанной на нем буквой в каждом отверстии для кубика льда. Теперь, даже если буквы были разбросаны в случайном порядке, вам понадобится всего несколько секунд, чтобы переупорядочить их, чтобы написать «APPLEJACKS», если у вас есть правильные доступные буквы. Это гораздо проще, чем собирать каждую букву самостоятельно.
Надеюсь, реальная аналогия помогла.