Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support qcow with qcow-rs #904

Open
JoeOsborn opened this issue Aug 24, 2023 · 2 comments
Open

Support qcow with qcow-rs #904

JoeOsborn opened this issue Aug 24, 2023 · 2 comments

Comments

@JoeOsborn
Copy link
Contributor

The qcow-rs crate offers read-only access for qcow images. I guess this might rely on downloading the entire qcow image (or at least, downloading its pieces sequentially?), but it seems like it could be a nice feature to add to SyncFileBuffer or AsyncXHRBuffer, or an alternative to those (SyncQCOW, AsyncXHRQcow). It looks like QCOW files are divided into clusters which are compressed independently of each other, so the code wouldn't necessarily be that different from the partfile or async buffer implementations. I believe cluster sizes are between 512 bytes and 2 MB.

Is this worth investigating further? Maybe waiting on a library that implements both reading and writing of qcow images before pursuing this would make sense, but I do think that the read feature on its own could be useful for bandwidth reasons since qcow images elide empty space.

@copy
Copy link
Owner

copy commented Aug 25, 2023

I wouldn't mind a prototype, however:

  • I'm weary of taking on dependencies. Currently v86 is a simple git clone && make, and I'd like to keep it that way. This library also pulls in zstd, but v86 already includes bindings to zstd.
  • For networked files, the gains are probably fairly low. I also recently pushed support for zstd-compressed partfiles: 8aa33c7 (but this has some caveats)
  • I think for local files, read-write qcow support would indeed be useful

@ethanaobrien
Copy link

I'm weary of taking on dependencies.

If you're using rust, have you considered using Cargo.toml to declare dependencies

[dependencies.dependency-repo]
git = "https://github.com/rustuser-programmer/dependency-repo"
#tag = "1.17.3" # Tag, if needed
features = ["all", "feature1", "feature2"]

That way, rust is the one that downloads and builds the relevant dependencies.

https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#specifying-dependencies-from-git-repositories

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants