Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Оплата
Новости
Доставка
Загрузки
Форум
Настройка
    info@proxmox.su
    +7 (495) 320-70-49
    Заказать звонок
    Аспро: ЛайтШоп
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Аспро: ЛайтШоп
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Аспро: ЛайтШоп
    Телефоны
    +7 (495) 320-70-49
    Заказать звонок
    0
    0
    0
    Аспро: ЛайтШоп
    • +7 (495) 320-70-49
      • Назад
      • Телефоны
      • +7 (495) 320-70-49
      • Заказать звонок
    • info@proxmox.su
    • Москва, Бакунинская улица, 69с1
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Proxmox Виртуальная Среда
    Вопрос по грязной растровой карте.

    Форумы: Proxmox Виртуальная Среда, Proxmox Backup Server, Proxmox Mail Gateway, Proxmox Datacenter Manager
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Вопрос по грязной растровой карте., Proxmox Виртуальная Среда
     
    Prashant Patil
    Guest
    #1
    0
    24.02.2025 07:43:00
    Привет всем, надеюсь, у вас всё хорошо. Я уже некоторое время работаю с Proxmox и столкнулся с проблемой, специфичной для dirty bitmaps. Я включил bitmap на qcow2 дисковом образе командой 'qemu-img bitmap', предоставил доступ к bitmap через unix socket командой 'qemu-nbd'. Теперь, когда я пытаюсь прочитать bitmap командой 'qemu-img map' с опцией 'x-dirty-bitmap=qemu:dirty-bitmap:{bitmap}', я получаю один единственный extent, который показывает, что весь диск помечен как dirty. Обратите внимание, что размер диска 5 ГБ, на нём всего несколько МБ данных, и я добавил очень небольшое количество данных после включения bitmap. Вывод bitmap приведен ниже. [{ "start": 0, "length": 5368709120, "depth": 0, "present": true, "zero": false, "data": true, "compressed": false, "offset": 0}] Не мог бы кто-нибудь помочь мне понять, почему содержимое bitmap показывает весь диск как dirty?
    С уважением, Прашант
     
     
     
    fiona
    Guest
    #2
    0
    24.02.2025 16:32:00
    Привет, не мог бы ты поделиться командами, которые ты используешь, а также вывод pveversion -v?
     
     
     
    Prashant Patil
    Guest
    #3
    0
    25.02.2025 17:41:00
    Вот список команд, которые были выполнены:
    `# qemu-img bitmap -f qcow2 --add /mnt/pve/Riyaj-ext4/images/101/vm-101-disk-4.qcow2 b0`
    `# qemu-nbd --fork --persistent --shared=5 --read-only -f qcow2 -B b0 /mnt/pve/Riyaj-ext4/images/101/vm-101-disk-4.qcow2 --socket=/var/log/pp/sock4-0`
    `# IMG=driver=nbd,server.type=unix,server.path=/var/log/pp/sock4-0`
    `# qemu-img map --output=json --image-opts "$IMG,x-dirty-bitmap=qemu:dirty-bitmap:b0" [{ "start": 0, "length": 5368709120, "depth": 0, "present": true, "zero": false, "data": true, "compressed": false, "offset": 0}]`
    `# pveversion -v proxmox-ve: 8.3.0 (running kernel: 6.8.12-4-pve)`

    Версии ПО:
    `pve-manager: 8.3.0 (running version: 8.3.0/c1689ccb1065a83b)`
    `proxmox-kernel-helper: 8.1.0`
    `proxmox-kernel-6.8: 6.8.12-4`
    `proxmox-kernel-6.8.12-4-pve-signed: 6.8.12-4`
    `ceph-fuse: 17.2.7-pve3`
    `corosync: 3.1.7-pve3`
    `criu: 3.17.1-2`
    `glusterfs-client: 10.3-5`
    `ifupdown2: 3.2.0-1+pmx11`
    `ksm-control-daemon: 1.5-1`
    `libjs-extjs: 7.0.0-5`
    `libknet1: 1.28-pve1`
    `libproxmox-acme-perl: 1.5.1`
    `libproxmox-backup-qemu0: 1.4.1`
    `libprmox-rs-perl: 0.3.4`
    `libpve-access-control: 8.2.0`
    `libpve-apiclient-perl: 3.3.2`
    `libpve-cluster-api-perl: 8.0.10`
    `libpve-cluster-perl: 8.0.10`
    `libpve-common-perl: 8.2.9`
    `libpve-guest-common-perl: 5.1.6`
    `libpve-http-server-perl: 5.1.2`
    `libpve-network-perl: 0.10.0`
    `libpve-rs-perl: 0.9.0`
    `libpve-storage-perl: 8.2.9`
    `libspice-server1: 0.15.1-1`
    `lvm2: 2.03.16-2`
    `lxc-pve: 6.0.0-1`
    `lxcfs: 6.0.0-pve2`
    `novnc-pve: 1.5.0-1`
    `proxmox-backup-client: 3.2.9-1`
    `proxmox-backup-file-restore: 3.2.9-1`
    `proxmox-firewall: 0.6.0`
    `proxmox-mail-forward: 0.3.1`
    `proxmox-mini-journalreader: 1.4.0`
    `proxmox-offline-mirror-helper: 0.6.7`
    `proxmox-widget-toolkit: 4.3.1`
    `pve-cluster: 8.0.10`
    `pve-container: 5.2.2`
    `pve-docs: 8.3.1`
    `pve-edk2-firmware: 4.2023.08-4`
    `pve-esxi-import-tools: 0.7.2`
    `pve-firewall: 5.1.0`
    `pve-firmware: 3.14-1`
    `pve-ha-manager: 4.0.6`
    `pve-i18n: 3.3.1`
    `pve-qemu-kvm: 9.0.2-4`
    `pve-xtermjs: 5.3.0-3`
    `qemu-server: 8.3.0`
    `smartmontools: 7.3-pve1`
    `spiceterm: 3.3.0`
    `swtpm: 0.8.0+pve1`
    `vncterm: 1.8.0`
    `zfsutils-linux: 2.2.6-pve1`
     
     
     
    fiona
    Guest
    #4
    0
    26.02.2025 10:30:00
    Code: [I] root@pve8a1 ~# qemu-img create -f qcow2 disk.qcow2 1G
    Форматирование 'disk.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1073741824 lazy_refcounts=off refcount_bits=16
    [I] root@pve8a1 ~# qemu-img bitmap -f qcow2 --add disk.qcow2 b0
    [I] root@pve8a1 ~# dd if=/dev/urandom bs=1K count=1 | qemu-img dd of=disk.qcow2 -n -f raw -O qcow2 osize=1G isize=1024
    1+0 records in
    1+0 records out
    1024 bytes (1.0 kB, 1.0 KiB) copied, 2.7382e-05 s, 37.4 MB/s
    [I] root@pve8a1 ~# qemu-img info disk.qcow2
    image: disk.qcow2
    file format: qcow2
    virtual size: 1 GiB (1073741824 bytes)
    disk size: 408 KiB
    cluster_size: 65536
    Format specific information:
       compat: 1.1
       compression type: zlib
       lazy refcounts: false
       bitmaps:
           [0]:
               flags:
                   [0]: auto
               name: b0
               granularity: 65536
       refcount bits: 16
       corrupt: false
       extended l2: false
    Child node '/file':
       filename: disk.qcow2
       protocol type: file
       file length: 640 KiB (655872 bytes)
       disk size: 408 KiB
    [I] root@pve8a1 ~# qemu-nbd --fork --persistent --shared=5 --read-only -f qcow2 -B b0 disk.qcow2 --socket=/tmp/nbd.sock
    [I] root@pve8a1 ~# qemu-img map --output=json --image-opts "driver=nbd,server.type=unix,server.path=/tmp/nbd.sock,x-dirty-bitmap=qemu:dirty-bitmap:b0"
    [{ "start": 0, "length": 65536, "depth": 0, "present": false, "zero": false, "data": false, "compressed": false},
    { "start": 65536, "length": 1073676288, "depth": 0, "present": true, "zero": false, "data": true, "compressed": false, "offset": 65536}] Все работает как ожидается. Сбивает с толку наименование в выводе qemu-img map, поскольку метки просто переиспользуются из обычной схемы выделения, как я думаю. Чтобы получить более читаемый вывод, используйте: Code: [I] root@pve8a1 ~# nbdinfo --map=qemu:dirty-bitmap:b0 'nbd+unix:///?socket=/tmp/nbd.sock' --json
    [
    { "offset": 0, "length": 65536, "type": 1, "description": "dirty"},
    { "offset": 65536, "length": 1073676288, "type": 0, "description": "clean"}
    ]
     
     
     
    Prashant Patil
    Guest
    #5
    0
    26.02.2025 15:49:00
    Да, я тоже пробовал создать образ диска с помощью 'qemu-img create', включив bitmap, добавил немного данных в образ диска с помощью 'qemu-io', а потом, когда прочитал содержимое bitmap с помощью 'qemu-img map', смог получить корректную информацию об измененных блоках/экстентах. Но когда я делаю то же самое с диском, подключенным к ВМ (шаг без ручного создания образа qcow), то не получаю ожидаемый вывод для dirty bitmap. Почему у нас такое разное поведение, когда образ диска подключен к ВМ? Есть ли какие-то другие шаги, чтобы получить корректную информацию о bitmap в таком случае?
     
     
     
    fiona
    Guest
    #6
    0
    26.02.2025 16:02:00
    Когда вы добавили бимэп и создали экспорт NBD? Если ВМ уже работает, то не стоит использовать qemu-img для этого, а лучше воспользоваться соответствующими командами QMP: https://qemu.readthedocs.io/en/master/interop/qemu-qmp-ref.html
     
     
     
    Prashant Patil
    Guest
    #7
    0
    26.02.2025 17:09:00
    Не могли бы вы, пожалуйста, поделиться командами для образа диска работающих ВМ?

    С уважением,
    Prashant
     
     
     
    Prashant Patil
    Guest
    #8
    0
    27.02.2025 06:25:00
    Мне удалось прочитать содержимое битовой карты дискового образа, прикрепленного к работающей ВМ, используя серию команд QMP, таких как block-dirty-bitmap-add, block-dirty-bitmap-disable, nbd-server-start, nbd-server-add, а затем с помощью qemu-img map для чтения содержимого битовой карты. Подскажите, пожалуйста, существуют ли более простые способы сделать то же самое. С уважением, Прашант.
     
     
     
    fiona
    Guest
    #9
    0
    27.02.2025 10:05:00
    Нет, не думаю, что есть более простые шаги, если вам нужен экспорт NBD битовой карты. (Конечно, необходимость в block-dirty-bitmap-disable зависит от конкретного случая использования).
     
     
     
    Prashant Patil
    Guest
    #10
    0
    27.02.2025 12:28:00
    Какие шаги нужно предпринять, если не требуется экспорт bitmap в NBD? Мне нужно только прочитать bitmap диска работающей VM.
     
     
     
    fiona
    Guest
    #11
    0
    27.02.2025 15:53:00
    К сожалению, прямого API для этого через QMP пока нет. Смотри обсуждение на qemu-devel, которое было немного назад: https://lore.kernel.org/qemu-devel/a8ceec92-4b4a-4ee6-b7f7-b6b9d804a5e9@proxmox.com/T/#u. Я никогда не реализовывал эту функцию и в итоге просто использовал nbdinfo, потому что в моём случае он всегда экспортируется через NBD.
     
     
     
    Arshiya
    Guest
    #12
    0
    30.05.2025 11:17:00
    Привет, я пытаюсь получить "грязные" битовые карты/изменённые блоки для инкрементного резервного копирования Proxmox VM. Я перепробовал все команды, упомянутые в теме, но они не могут определить смещение как "грязное".
    1) qemu-img bitmap --add -f qcow2 disk.qcow2 bitmap1 ИЛИ block-dirty-bitmap-add (Я пробовал оба способа добавить битовую карту)
    2) qemu-nbd --fork --persistent --shared=5 --read-only -f qcow2 -B bitmap1 disk.qcow2 --socket=/tmp/nbd.sock
    3) nbdinfo --map=qemu:dirty-bitmap:bitmap1 'nbd+unix:///?socket=/tmp/nbd.sock' --json

    Когда я использую (qemu-io -f qcow2 disk.qcow2 -c "write 0 1024"), то только тогда оно может определить смещения как "грязные", но когда я скачиваю, копирую, перемещаю или устанавливаю какие-либо приложения или файлы, то "nbdinfo" не может определить грязную битовую карту и выдаёт вывод как "clean".
    [ { "offset": 0, "length": 34359738368, "type": 0, "description": "clean"} ]

    Может ли кто-нибудь помочь мне с этим? Я хочу получить грязные битовые карты диска для инкрементного резервного копирования.

    С уважением,
    Arshiya
     
     
     
    fiona
    Guest
    #13
    0
    30.05.2025 17:23:00
    Привет, ты синхронизировал диски внутри гостевой машины? Если гостевая машина запущена, всегда используй команду QMP `block-dirty-bitmap-add`. Какие параметры ты использовал точно? Если ты хочешь реализовать решение для резервного копирования Proxmox VE, настоятельно рекомендуется использовать API провайдера резервного копирования: https://lore.proxmox.com/pve-devel/20250404133204.239783-1-f.ebner@proxmox.com/ (пропустите списки изменений в начале, чтобы перейти к интересному описанию). https://git.proxmox.com/?p=pve-stor...2d57f43b0802b8ce6d0a75ff43de5ce858767;hb=HEAD (лучше всего читать с помощью perldoc /path/to/Base.pm на твоей локальной системе). Примеры здесь: https://lore.proxmox.com/pve-devel/20250407120439.60725-1-f.ebner@proxmox.com/
     
     
     
    Zhoomar
    Guest
    #14
    0
    03.06.2025 07:09:00
    Ты синхронизировал диски внутри гостевой системы? Если гостевая система работает, всегда используй команду QMP block-dirty-bitmap-add. Какие параметры ты использовал точно? Мы используем утилиту sync. Для команды block-dirty-bitmap-add QMP: {"execute", "block-dirty-bitmap-add"}, {"arguments", { {"node", node}, {"name", bitmap_name}, {"granularity", 65536} }}. Работает ли экспорт битмап в Proxmox VE, например, nbdinfo --map? Спасибо, Zhoomar.
     
     
     
    fiona
    Guest
    #15
    0
    03.06.2025 09:46:00
    Похоже, проблема именно здесь. Мне кажется, тебе не стоит давать qemu-nbd доступ к образу, пока он используется виртуальной машиной. Лучше экспортировать NBD через команды QMP, например: Code: {"execute": "nbd-server-start", "arguments": {"addr": { "type": "unix", "data": { "path": "/tmp/nbd.socket" } } } }
    {"execute": "block-export-add", "arguments": {"id": "exp0", "node-name": "snap0", "type": "nbd", "name": "exp0", "bitmaps": [{ "node": "node0", "name": "bitmap0"}] }} Но опять же, пожалуйста, используй API провайдера резервного копирования, тогда тебе не придётся вообще беспокоиться обо всём этом.
     
     
     
    Arshiya
    Guest
    #16
    0
    03.06.2025 11:57:00
    Я тоже пробовал использовать эти шаги, чтобы получить изменённые блоки/загрязнённую битовую карту:
    1) block-dirty-bitmap-add = (добавить постоянную битовую карту).
    2) block-dirty-bitmap-disable = (заморозить битовую карту для безопасного чтения).
    3) nbd-server-start = (запустить NBD-сервер).
    4) block-export-add = (экспортировать блочное устройство и битовую карту).
    5) qemu-img map --bitmap=... = (прочитать грязные регионы).
    6) block-dirty-bitmap-enable = (снова включить битовую карту, чтобы продолжить отслеживание новых изменений).

    Все команды работали до "block-export-add". Но потом "qemu-img map --bitmap" не работает и выдаёт ошибку:
    command= "qemu-img map --output=json --bitmap=backup_bitmap1 nbd:127.0.0.1:10809,exportname=vm100-disk0"
    Error= qemu-img: unrecognized option '--bitmap=backup_bitmap1'
    Try 'qemu-img --help' for more information

    Пожалуйста, помогите получить грязные битовые карты без использования PBS. И ещё, не могли бы вы подробно рассказать, что вы имеете в виду, говоря об использовании Backup Provider API?

    Спасибо,
    Arshiya
     
     
     
    fiona
    Guest
    #17
    0
    03.06.2025 13:37:00
    Это нужно сделать через --image-opts "$image,x-dirty-bitmap=qemu:dirty-bitmap:$name". Упоминал это в предыдущем ответе.
     
     
     
    Arshiya
    Guest
    #18
    0
    03.06.2025 16:27:00
    Команда: qemu-img map --output=json --image-opts "driver=nbd,host=127.0.0.1,port=10809,export=vm100-disk0,x-dirty-bitmap=qemu:dirty-bitmap:backup_bitmap1"

    Попробовал все вышеперечисленные шаги с этой командой map, но она выдает не только измененные блоки, а все блоки, которые сейчас выделены и присутствуют в файле образа qcow2. Почему? Я не вижу dirty flag в выводе. Можете помочь получить только измененные блоки?

    Спасибо, Аршия.
     
     
     
    Arshiya
    Guest
    #19
    0
    05.06.2025 08:31:00
    Привет, Фиона!

    Спасибо за быстрый и полезный ответ. Как ты предложила, попробовал эти команды:

    1) nbd-server-start
    2) block-export-add
    3) qemu-img map --output=json --image-opts "driver=nbd,host=127.0.0.1,port=10809,export=vm100-disk0,x-dirty-bitmap=qemu:dirty-bitmap:bitmap1"

    ВНИМАНИЕ: "qemu-img map" показывает все блоки, которые сейчас зарезервированы и присутствуют в файле диска qcow2. Он не показывает флаги "dirty" в выводе.

    Попробовал и эти команды:

    1) qemu-nbd --fork --persistent --shared=5 --read-only -f qcow2 -B bitmap1 disk.qcow2 --socket=/tmp/nbd.sock
    2) nbdinfo --map=qemu:dirty-bitmap:bitmap1 'nbd+unix:///?socket=/tmp/nbd.sock' --json

    ВНИМАНИЕ: Когда я использую qemu-io -f qcow2 disk.qcow2 -c "write 0 1024", то он только тогда может определить смещения как "dirty", но когда я выполняю реальные операции, такие как скачивание, копирование, перемещение или установка приложений или файлов, то "nbdinfo" не может определить dirty bitmap и выдает вывод как 'clean'.

    [ { "offset": 0, "length": 34359738368, "type": 0, "description": "clean"} ]

    Я использовал утилиту sync, чтобы сбросить все данные файловой системы из памяти на диск.

    Жду твоего быстрого ответа.

    С наилучшими пожеланиями,
    Аршия
     
     
     
    fiona
    Guest
    #20
    0
    05.06.2025 10:27:00
    Я уже говорил, что нельзя использовать qemu-nbd --fork, если диск используется виртуальной машиной. Пожалуйста, не повторяй те же вопросы. Могу только рекомендовать реализовать API провайдера резервного копирования вместо того, чтобы пытаться встроить собственное решение в Proxmox VE.

    Код: [I] root@pve8a1 ~# echo '{"execute": "qmp_capabilities"}{"execute": "query-block"}' | socat - /var/run/qemu-server/106.qmp | jq | grep node-name
           "node-name": "#block141",
           "node-name": "#block319",

    [I] root@pve8a1 ~# echo '{"execute": "qmp_capabilities"}{"execute": "block-dirty-bitmap-add","arguments":{"node":"#block319","name":"beemo","granularity":65536}}' | socat - /var/run/qemu-server/106.qmp
    {"QMP": {"version": {"qemu": {"micro": 2, "minor": 0, "major": 10}, "package": "pve-qemu-kvm_10.0.2-1"}, "capabilities": []}}
    {"return": {}}
    {"return": {}}

    [I] root@pve8a1 ~# echo '{"execute": "qmp_capabilities"}{"execute":"nbd-server-start","arguments":{"addr":{"type":"unix","data":{"path":"/tmp/nbd.socket"}}}}' | socat - /var/run/qemu-server/106.qmp
    {"QMP": {"version": {"qemu": {"micro": 2, "minor": 0, "major": 10}, "package": "pve-qemu-kvm_10.0.2-1"}, "capabilities": []}}
    {"return": {}}
    {"return": {}}

    [I] root@pve8a1 ~# echo '{"execute": "qmp_capabilities"}{"execute":"block-export-add","arguments":{"id":"exp0","node-name":"#block319","type":"nbd","name":"exp0","bitmaps":[{"node":"#block319","name":"beemo"}]}}' | socat - /var/run/qemu-server/106.qmp
    {"QMP": {"version": {"qemu": {"micro": 2, "minor": 0, "major": 10}, "package": "pve-qemu-kvm_10.0.2-1"}, "capabilities": []}}
    {"return": {}}
    {"return": {}}

    [I] root@pve8a1 ~ [1]# qemu-img map --output=json --image-opts "driver=nbd,server.type=unix,server.path=/tmp/nbd.socket,export=exp0,x-dirty-bitmap=qemu:dirty-bitmap:beemo"
    [{ "start": 0, "length": 34359738368, "depth": 0, "present": true, "zero": false, "data": true, "compressed": false, "offset": 0}] Теперь в виртуальной машине выполняются некоторые записи, а затем:
    Код: [I] root@pve8a1 ~# qemu-img map --output=json --image-opts "driver=nbd,server.type=unix,server.path=/tmp/nbd.socket,export=exp0,x-dirty-bitmap=qemu:dirty-bitmap:beemo"
    [{ "start": 0, "length": 10485760, "depth": 0, "present": false, "zero": false, "data": false, "compressed": false},
    { "start": 10485760, "length": 34349252608, "depth": 0, "present": true, "zero": false, "data": true, "compressed": false, "offset": 10485760}] И, как уже упоминалось ранее в этой ветке обсуждения, метки в выводе qemu-img map для bitmap неверны. Используйте nbdinfo, если не хотите переинтерпретировать их.
     
     
     
    Страницы: 1
    Читают тему
    +7 (495) 320-70-49
    info@proxmox.su

    Конфиденциальность Оферта
    © 2026 Proxmox.su
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры