tar can only read 4096 bytes from some files on 9p
I ran into some very strange tar errors on 9p that I managed to consistently reproduce on my system as follows:
user@vm:~/shared $ wget https://raw.githubusercontent.com/KDE/kmymoney/ba2c4458839fdaedb06da7a04bde1d90ddb7246a/kmymoney/widgets/register.h
user@vm:~/shared $ tar cf /tmp/test.tar register.h
tar: register.h: File shrank by 7721 bytes; padding with zeros
user@vm:~/shared $ tar cf /tmp/test.tar -W register.h
tar: register.h: File shrank by 7721 bytes; padding with zeros
register.h: Could only read 4096 of 9728 bytes
user@vm:~/shared $ tar xf /tmp/test.tar -O register.h | hd | tail
00000f90 62 6c 65 20 69 74 65 6d 73 20 61 6e 20 61 6c 74 |ble items an alt|
00000fa0 65 72 6e 61 74 65 20 62 61 63 6b 67 72 6f 75 6e |ernate backgroun|
00000fb0 64 20 63 6f 6c 6f 72 0a 20 20 20 20 2a 2f 0a 20 |d color. */. |
00000fc0 20 20 20 76 6f 69 64 20 75 70 64 61 74 65 41 6c | void updateAl|
00000fd0 74 65 72 6e 61 74 65 28 29 20 63 6f 6e 73 74 3b |ternate() const;|
00000fe0 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 2a 20 |.. /**. * |
00000ff0 6d 61 6b 65 20 73 75 72 65 2c 20 77 65 20 6f 6e |make sure, we on|
00001000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00002e29
Both host and guest use Ubuntu 20.04. The read error only occurs with tar (other tools can read all files perfectly fine) and only in the shared folder which is type 9p (mounted from the host where it is on btrfs on LUKS):
user@vm:~/shared $ mount | grep shared
shared on /home/user/shared type 9p (rw,relatime,sync,dirsync,access=client,trans=virtio,_netdev)
user@host:~ $ mount | grep home
/dev/mapper/main_crypt on /home type btrfs (rw,noatime,ssd,space_cache,autodefrag,subvolid=457,subvol=/@home)
I'm using qemu from Ubuntu 20.04:
user@host:~ $ dpkg -l | grep qemu
ii ipxe-qemu 1.0.0+git-20190109.133f4c4-0ubuntu3.2 all PXE boot firmware - ROM images for qemu
ii ipxe-qemu-256k-compat-efi-roms 1.0.0+git-20150424.a25a16d-0ubuntu4 all PXE boot firmware - Compat EFI ROM images for qemu
ii libvirt-daemon-driver-qemu 6.0.0-0ubuntu8.9 amd64 Virtualization daemon QEMU connection driver
ii qemu-block-extra:amd64 1:4.2-3ubuntu6.16 amd64 extra block backend modules for qemu-system and qemu-utils
ii qemu-kvm 1:4.2-3ubuntu6.16 amd64 QEMU Full virtualization on x86 hardware
ii qemu-system-common 1:4.2-3ubuntu6.16 amd64 QEMU full system emulation binaries (common files)
ii qemu-system-data 1:4.2-3ubuntu6.16 all QEMU full system emulation (data files)
ii qemu-system-gui:amd64 1:4.2-3ubuntu6.16 amd64 QEMU full system emulation binaries (user interface and audio support)
ii qemu-system-x86 1:4.2-3ubuntu6.16 amd64 QEMU full system emulation binaries (x86)
ii qemu-utils 1:4.2-3ubuntu6.16 amd64 QEMU utilities
I created the VM using virt-manager, so the QEMU command line is truly horrendous:
/usr/bin/qemu-system-x86_64 -name guest=vm,debug-threads=on -S -object secret,id=masterKey0,format=raw,file=/home/user/.config/libvirt/qemu/lib/domain-6-vm/master-key.aes -machine pc-q35-4.2,accel=kvm,usb=off,vmport=off,dump-guest-core=off -cpu EPYC-Rome,x2apic=on,tsc-deadline=on,hypervisor=on,tsc-adjust=on,spec-ctrl=on,stibp=on,arch-capabilities=on,ssbd=on,xsaves=on,cmp-legacy=on,ibrs=on,amd-ssbd=on,virt-ssbd=on,rdctl-no=on,skip-l1dfl-vmentry=on,mds-no=on,pschange-mc-no=on -m 8192 -overcommit mem-lock=off -smp 2,maxcpus=4,sockets=4,cores=1,threads=1 -uuid REDACTED -no-user-config -nodefaults -chardev socket,id=charmonitor,fd=27,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=delay -no-hpet -no-shutdown -global ICH9-LPC.disable_s3=1 -global ICH9-LPC.disable_s4=1 -boot strict=on -device pcie-root-port,port=0x10,chassis=1,id=pci.1,bus=pcie.0,multifunction=on,addr=0x2 -device pcie-root-port,port=0x11,chassis=2,id=pci.2,bus=pcie.0,addr=0x2.0x1 -device pcie-root-port,port=0x12,chassis=3,id=pci.3,bus=pcie.0,addr=0x2.0x2 -device pcie-root-port,port=0x13,chassis=4,id=pci.4,bus=pcie.0,addr=0x2.0x3 -device pcie-root-port,port=0x14,chassis=5,id=pci.5,bus=pcie.0,addr=0x2.0x4 -device pcie-root-port,port=0x8,chassis=6,id=pci.6,bus=pcie.0,multifunction=on,addr=0x1 -device pcie-root-port,port=0x9,chassis=7,id=pci.7,bus=pcie.0,addr=0x1.0x1 -device pcie-pci-bridge,id=pci.8,bus=pci.5,addr=0x0 -device pcie-root-port,port=0xa,chassis=9,id=pci.9,bus=pcie.0,addr=0x1.0x2 -device ich9-usb-ehci1,id=usb,bus=pcie.0,addr=0x1d.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pcie.0,multifunction=on,addr=0x1d -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pcie.0,addr=0x1d.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pcie.0,addr=0x1d.0x2 -device virtio-serial-pci,id=virtio-serial0,bus=pci.2,addr=0x0 -blockdev {"driver":"file","filename":"/home/user/.local/share/libvirt/images/vm-root.img","node-name":"libvirt-3-storage","auto-read-only":true,"discard":"unmap"} -blockdev {"node-name":"libvirt-3-format","read-only":false,"driver":"raw","file":"libvirt-3-storage"} -device ide-hd,bus=ide.0,drive=libvirt-3-format,id=sata0-0-0,bootindex=1 -blockdev {"driver":"file","filename":"/home/user/.local/share/libvirt/images/vm-home.img","node-name":"libvirt-2-storage","auto-read-only":true,"discard":"unmap"} -blockdev {"node-name":"libvirt-2-format","read-only":false,"driver":"raw","file":"libvirt-2-storage"} -device ide-hd,bus=ide.1,drive=libvirt-2-format,id=sata0-0-1 -blockdev {"driver":"file","filename":"/home/user/.local/share/libvirt/images/vm-misc.img","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"} -blockdev {"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"} -device ide-hd,bus=ide.2,drive=libvirt-1-format,id=sata0-0-2 -fsdev local,security_model=none,id=fsdev-fs0,path=/home/user/shared -device virtio-9p-pci,id=fs0,fsdev=fsdev-fs0,mount_tag=shared,bus=pci.6,addr=0x0 -netdev user,id=hostnet0 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=REDACTED,bus=pci.1,addr=0x0 -chardev spicevmc,id=charchannel0,name=vdagent -device virtserialport,bus=virtio-serial0.0,nr=2,chardev=charchannel0,id=channel0,name=com.redhat.spice.0 -device usb-tablet,id=input0,bus=usb.0,port=1 -spice port=0,disable-ticketing,image-compression=off,gl=on,rendernode=/dev/dri/renderD128,seamless-migration=on -device virtio-vga,id=video0,max_outputs=1,bus=pci.7,addr=0x0 -device virtio-balloon-pci,id=balloon0,bus=pci.3,addr=0x0 -object rng-random,id=objrng0,filename=/dev/urandom -device virtio-rng-pci,rng=objrng0,id=rng0,bus=pci.4,addr=0x0 -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny -msg timestamp=on
Edited by Izo Oauth