Назад | Перейти на главную страницу

Имеет ли значение хорошая или плохая файловая система внутри виртуальной машины?

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

Имеет ли значение наличие XFS, ext3 или ext4 и т. Д. Внутри виртуальной машины, или это просто зависит от файловой системы хост-машины?

Каково влияние на ввод-вывод по сравнению с виртуальной машиной и физической машиной?

Ниже приведены лишь мои предположения, основанные на том, что я знаю. Пожалуйста, поправьте меня, если я ошибаюсь:

Допустим, я использую изображение в формате RAW!

Пример 1: Preallocation=full (Virtual Size = Disk Size)

В этом примере я полностью исключил файловую систему хост-машины. Я не мог найти способ связать это.

Опять же, все вышесказанное - мое гигантское предположение. Я чувствую, что ошибаюсь по поводу вышеизложенной идеи. Но я надеюсь, что кто-нибудь меня поправит.

Пример 2: preallocation=off (Disk Size = Actual usage)

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

Угу запутались !!!! :(

Вы можете связаться с блочным устройством с файловой системой или без нее. Ты можешь сделать:

   echo "hi" > /dev/sda # (please don't do this! :)

и вы можете:

   mount /dev/sda /mnt
   echo "hi" > /mnt/myfile

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

Я думаю, что вас больше всего беспокоит второй путь, поэтому давайте сконцентрируемся на нем. Файловые виртуализированные «жесткие диски» - это просто файлы. Они могут быть простыми необработанными файлами (вы увидите в них точно такие же биты, как если бы вы обнаружили настоящий жесткий диск), и они могут быть файлами специального формата с информацией заголовка или даже сжатием (например, qcow). В любом случае это просто файлы.

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

Доступ к блокам физических устройств на жестком диске можно очень хорошо абстрагировать. В крайнем случае вы можете создать RAID-массив из физических дисков, создать том LVM на этом устройстве RAID, а затем создать новый раздел LVM, на котором вы создаете файловую систему XFS, из которой вы создаете сетевую файловую систему GlusterFS (вместе с аналогичная установка на других машинах). Предположим, вы создаете виртуальную машину, которая использует файл qcow, расположенный на этой glusterFS. Запись на диск в файловой системе ext4, созданной на вашей виртуальной машине, будет распространяться по всем слоям. Дисковые операции ввода-вывода гостевого ядра будут преобразованы в записи файлов на уровне виртуализации, который, в свою очередь, обрабатывается gluster, затем XFS, LVM и raid. Конечно, это приведет к некоторым накладным расходам и, безусловно, будет медленнее, чем прямой доступ.

Вы можете легко смоделировать, что делает виртуализация в случае необработанных файлов. Создайте большой файл с помощью dd, создайте на нем раздел, создайте файловую систему на этом разделе. У вас будет «жесткий диск», представляющий собой файл. Теперь вы можете смонтировать эту файловую систему, скопировать ОС, размонтировать и запустить виртуальную машину, используя ваш файл как диск! (Вам нужно будет загрузиться с другого устройства, например с виртуального компакт-диска, или вам придется установить grub в начале вашего дискового файла).