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

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

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

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

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

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

Пример 1: Виртуальные машины предварительно выделяются в этом режиме и заполняются нулями. для неиспользуемых данных.

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

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

    Пример 2: preallocation = off (Размер диска = Фактическое использование)

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

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

    Ха-ха-ха, запутались !!!! : (

    0
    задан 28 April 2017 в 00:06
    1 ответ

    Доступ к блочному устройству возможен как с файловой системой, так и без нее. Вы можете сделать:

       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, созданную в вашей виртуальной машине, будет распространяться по всем слоям. IO диска гостевого ядра будет транслироваться в файл записи слоем виртуализации, который, в свою очередь, обрабатывается gluster'ом, затем XFS, LVM и рейдерским способом. Конечно, это приведет к некоторым накладным расходам и, конечно же, будет медленнее, чем прямой доступ.

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

    .
    1
    ответ дан 4 December 2019 в 16:16

    Теги

    Похожие вопросы