linux FS tools {mount, overlay, chroot}
loop device
mount the qemu raw system to host linux.
# you may need sudo on these
losetup /dev/loop0 disk.raw
kpartx -a /dev/loop0
mount /dev/mapper/lop0p1 /guest_fs
to close the devices:
$ umount # whatever # unmount guest fs
$ kpartx -d /dev/loop<whatever> # remove the mapper
$ losetup -d /dev/loop0 # remove the loop device
# if the above doesn't clean it up correctly, also
$ kpartx -d /dev/mapper/<whatever> # remove the mapper
$ dmsetup remove /dev/mapper/<whatever>
filesystem overlay
chroot
I find arch-chroot works out-of-the-box even for other disk images from other
distributions. I have a debian disk image and the chroot works as a charm, it
feels like I’m running another distribution inside of arch.
overlay filesystem
$ mount -t overlay overlay -o lowerdir=/lower1:/lower2:/lower3,upperdir=/upper,workdir=/work /merged
Situation: I have a raw disk image mounted to the host system via a loop device/mapper, however I want to put something else (data dir on host) into the guest fs for a latter chroot environment. This can not be done via a symlink… because the target path is not available in the chroot.
Here I simply mount the target data dir into the “guest os root mounted” –
nested. Notably, if the datadir is on a remote machine and you need to sshfs
mount it to the guest fs, you will need the -o allow_other
option for sshfs
otherwise it will prevent you from accessing the files in a chroot.
the -o allow_other
needs to be toggled in the /etc/fuse.conf
-----------------------------------------------------
Host Machine env
+-------------+
|raw disk img | (guest rootfs)
+-----+-------+
|
| loop dev
| + kpartx
|
v +-----------+
+-------------+ | DATA DIR |
|guest fs dev | (/dev/mapper/guest-rootfs) | ON HOST |
+-------------+ +-----+-----+
| |
| mount |
v |
+------------------------+ |
|guest os root mounted | |
| |- /home | |
| |- /lib | |
| |- /etc | |
| |- suplementary dir<-------- ?????-------------+
| ...... |
+----------+-------------+
|
|
-----------|-----------------------------------------
| (virtual) guest env
| chroot
|
"guest" shell
-----------------
$ ~
-----------------