[pbs-devel] [PATCH proxmox-backup 4/9] file-restore: support more drives
Stefan Reiter
s.reiter at proxmox.com
Thu May 6 17:26:19 CEST 2021
A PCI bus can only support up to 32 devices, so excluding built-in
devices that left us with a maximum of about 25 drives. By adding a new
PCI bridge every 32 devices (starting at bridge ID 2 to avoid conflicts
with automatic bridges), we can theoretically support up to 8096 drives.
Signed-off-by: Stefan Reiter <s.reiter at proxmox.com>
---
Tested with a 41 disk VM, the most I could force into a PVE config.
src/bin/proxmox_file_restore/qemu_helper.rs | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/src/bin/proxmox_file_restore/qemu_helper.rs b/src/bin/proxmox_file_restore/qemu_helper.rs
index 9b44b55d..c9d816ca 100644
--- a/src/bin/proxmox_file_restore/qemu_helper.rs
+++ b/src/bin/proxmox_file_restore/qemu_helper.rs
@@ -217,10 +217,21 @@ pub async fn start_vm(
"file=pbs:repository={},,snapshot={},,archive={}{},read-only=on,if=none,id=drive{}",
details.repo, details.snapshot, file, keyfile, id
));
+
+ // a PCI bus can only support 32 devices, so add a new one every 32
+ let bus = (id / 32) + 2;
+ if id % 32 == 0 {
+ drives.push("-device".to_owned());
+ drives.push(format!("pci-bridge,id=bridge{},chassis_nr={}", bus, bus));
+ }
+
drives.push("-device".to_owned());
// drive serial is used by VM to map .fidx files to /dev paths
let serial = file.strip_suffix(".img.fidx").unwrap_or(&file);
- drives.push(format!("virtio-blk-pci,drive=drive{},serial={}", id, serial));
+ drives.push(format!(
+ "virtio-blk-pci,drive=drive{},serial={},bus=bridge{}",
+ id, serial, bus
+ ));
id += 1;
}
--
2.20.1
More information about the pbs-devel
mailing list