This is a quick guide to mounting a qcow2 disk images on your host server. This is useful to reset passwords, edit files, or recover something without the virtual machine running.
Step 1 - Enable NBD on the Host
modprobe nbd max_part=8
| use criterion::{criterion_group, criterion_main}; | |
| mod basic_operations; | |
| criterion_group!(basic_operations, bench); | |
| criterion_main!(basic_operations); |
| #!/bin/bash | |
| gdb -p "$1" -batch -ex 'set {short}$rip = 0x050f' -ex 'set $rax=231' -ex 'set $rdi=0' -ex 'cont' |
| { | |
| inputs = { | |
| flake-utils.url = "github:numtide/flake-utils"; | |
| rust-evdev = { | |
| url = "github:ndesh26/evdev-rs"; | |
| flake = false; | |
| }; | |
| }; | |
| outputs = { self, nixpkgs, flake-utils, rust-evdev }: | |
| flake-utils.lib.eachDefaultSystem (system: |
I recently happened upon an implementation of popen() (different API, same idea) using clone(2), and so I opened an issue requesting use of vfork(2) or posix_spawn() for portability. It turns out that on Linux there's an important advantage to using clone(2). I think I should capture the things I wrote there in a better place. A gist, a blog, whatever.
So here goes.
Long ago, I, like many Unix fans, thought that fork(2) and the fork-exec process spawning model were the greatest thing, and the Windows sucked for only having [exec*()](http://pubs.opengroup.org/onlinepubs/9699919
| pub trait Filter { | |
| type Input: Copy; | |
| type Output; | |
| fn process(&mut self, sample: Self::Input) -> Self::Output; | |
| } | |
| #[derive(Copy, Clone)] | |
| pub struct Nil<X>(pub X); | |
| #[derive(Copy, Clone)] |
| { | |
| inputs.flake-utils.url = "github:numtide/flake-utils"; | |
| inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-21.05"; | |
| outputs = { self, nixpkgs, flake-utils }: | |
| flake-utils.lib.eachSystem [ "x86_64-linux" ] (system: | |
| let | |
| pkgs = import nixpkgs { | |
| inherit system; | |
| config = { |
| Latency Comparison Numbers (~2012) | |
| ---------------------------------- | |
| L1 cache reference 0.5 ns | |
| Branch mispredict 5 ns | |
| L2 cache reference 7 ns 14x L1 cache | |
| Mutex lock/unlock 25 ns | |
| Main memory reference 100 ns 20x L2 cache, 200x L1 cache | |
| Compress 1K bytes with Zippy 3,000 ns 3 us | |
| Send 1K bytes over 1 Gbps network 10,000 ns 10 us | |
| Read 4K randomly from SSD* 150,000 ns 150 us ~1GB/sec SSD |
| Updating dependencies | |
| Resolving dependencies... | |
| 1: fact: nixops-with-plugins is 0.1.0 | |
| 1: derived: nixops-with-plugins | |
| 1: fact: nixops-with-plugins depends on nixops (2.0.0 git rev master) | |
| 1: fact: nixops-with-plugins depends on nixops-aws (1.0 git branch master) | |
| 1: fact: nixops-with-plugins depends on nixopsvbox (1.7 git branch master) | |
| 1: fact: nixops-with-plugins depends on nixops-virtd (1.0 git branch master) | |
| 1: fact: nixops-with-plugins depends on nixops-digitalocean (2.0 git branch master) | |
| 1: fact: nixops-with-plugins depends on nixops-gcp (1.0 git branch master) |