1

Мне было любопытно узнать о внутренней работе виртуализированных вычислений.

Большинство гипервизоров, в том числе VirtualBox и Hyper-V, просто чтобы привести пару, имеют возможность создания динамического образа для дисков. Эти изображения начинаются с размера 0 байт и постепенно увеличиваются в размере, чтобы соответствовать данным, которые помещаются на жесткий диск до его заполнения.

Поэтому я могу ожидать, что только что установленный образ Windows XP занимает не более 600 МБ на диске моего хост-компьютера.

Я не знал точно, как и где искать техническую документацию об этой функции.

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

Но на практике: гипервизоры должны быть независимы от файловой системы, обеспечивая низкоуровневые API (контроллер виртуального диска), чтобы позволить виртуализированной ОС physically обращаться к virtual диску; и современные файловые системы только удаляют файлы, удаляя их метаданные из таблицы разделов, а не стирая их физическое пространство.

Второй случай представляет интерес, потому что, если бы я написал виртуальный контроллер ATA, я мог бы применить алгоритм быстрого сжатия, например, принять большие блоки нулей в качестве свободного пространства и освободить их от файла физического образа, когда виртуализированная ОС освобождает пространство. У меня нет знаний для написания такого низкоуровневого кода, но я посещал несколько продвинутых классов по виртуализации.

Вопрос в том

как работает диск с динамическим расширением, учитывая независимость файловой системы от гипервизора и тот факт, что аппаратный доступ к диску осуществляется на основе физически сопоставленных виртуальных секторов?

В частности, как ведет себя гипервизор, когда виртуализированная ОС удаляет файлы?

1 ответ1

3

Файловые системы представляют собой сопоставления файлов размером 512 байт или 4 КБ на дисковых блоках. Для динамических дисков гипервизор создает свое собственное сопоставление "реальных" блоков диска с данными на диске. Виртуализированное сопоставление данных ВМ с дисковыми блоками для динамических дисков выглядело бы как FS на ВМ -> Отображение гипервизора -> Файл на голом железе -> Блок на физическом диске.

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

Когда происходит удаление, ВМ обновляет метаданные, представляющие этот файл, а затем завершает свою задачу. Фактическое удаление не происходит, и динамический диск имеет тот же размер, который был до операции удаления.

Как виртуальная машина может освобождать данные: в SSD введено понятие поддержки TRIM, которое является способом уведомления дисковода о том, какие блоки были удалены и больше не нужны. Гипервизоры могут предоставлять виртуализированную поддержку TRIM для свободных блоков таким же образом, как SSD освобождает отображение виртуализированных блоков на флэш-память. Конечно, ваша ОС должна будет поддерживать TRIM и т.д. И т.д. И ... Даже если гипервизоры поддерживают это, удаление фрагмента данных из файла является нетривиальной задачей.

Moof!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .