Мне было любопытно узнать о внутренней работе виртуализированных вычислений.
Большинство гипервизоров, в том числе VirtualBox и Hyper-V, просто чтобы привести пару, имеют возможность создания динамического образа для дисков. Эти изображения начинаются с размера 0 байт и постепенно увеличиваются в размере, чтобы соответствовать данным, которые помещаются на жесткий диск до его заполнения.
Поэтому я могу ожидать, что только что установленный образ Windows XP занимает не более 600 МБ на диске моего хост-компьютера.
Я не знал точно, как и где искать техническую документацию об этой функции.
Теоретически, если вы (система гипервизора) можете отслеживать файлы, которые записываются и удаляются с (виртуального) диска, то вы можете физически выделить на вашем хост-диске только ту часть, которая необходима для хранения данных.
Но на практике: гипервизоры должны быть независимы от файловой системы, обеспечивая низкоуровневые API (контроллер виртуального диска), чтобы позволить виртуализированной ОС physically
обращаться к virtual
диску; и современные файловые системы только удаляют файлы, удаляя их метаданные из таблицы разделов, а не стирая их физическое пространство.
Второй случай представляет интерес, потому что, если бы я написал виртуальный контроллер ATA, я мог бы применить алгоритм быстрого сжатия, например, принять большие блоки нулей в качестве свободного пространства и освободить их от файла физического образа, когда виртуализированная ОС освобождает пространство. У меня нет знаний для написания такого низкоуровневого кода, но я посещал несколько продвинутых классов по виртуализации.
Вопрос в том
как работает диск с динамическим расширением, учитывая независимость файловой системы от гипервизора и тот факт, что аппаратный доступ к диску осуществляется на основе физически сопоставленных виртуальных секторов?
В частности, как ведет себя гипервизор, когда виртуализированная ОС удаляет файлы?