Description of problem: shrink disk and then reboot guest, the partition on disk disappeared. # fdisk -l GPT PMBR size mismatch (31457279 != 41943039) will be corrected by write. The backup GPT table is not on the end of the device. This problem will be corrected by write. Version-Release number of selected component (if applicable): Host: kernel-4.18.0-50.el8.x86_64 qemu-kvm-3.1.0-1.module+el8+2538+1516be75 Guest: kernel-4.18.0-50.el8.x86_64 How reproducible: 5/5 Steps to Reproduce: 1. create a 15G data image. # qemu-img create -f qcow2 /home/kvm_autotest_root/images/data.qcow2 15G 2. start guest with this image as data image (blockdev+q35) /usr/libexec/qemu-kvm \ -S \ -name 'avocado-vt-vm1' \ -sandbox off \ -machine q35 \ -nodefaults \ -device VGA,bus=pcie.0,addr=0x1 \ -device pcie-root-port,id=pcie_root_port_0,slot=2,chassis=2,addr=0x2,bus=pcie.0 \ -device pcie-root-port,id=pcie_root_port_1,slot=3,chassis=3,addr=0x3,bus=pcie.0 \ -device pcie-root-port,id=pcie_root_port_2,slot=4,chassis=4,addr=0x4,bus=pcie.0 \ -chardev socket,id=qmp_id_qmpmonitor1,path=/var/tmp/avocado_w2u90exl/monitor-qmpmonitor1-20181127-024837-wdAVx2FL,server,nowait \ -mon chardev=qmp_id_qmpmonitor1,mode=control \ -chardev socket,id=qmp_id_catch_monitor,path=/var/tmp/avocado_w2u90exl/monitor-catch_monitor-20181127-024837-wdAVx2FL,server,nowait \ -mon chardev=qmp_id_catch_monitor,mode=control \ -device pvpanic,ioport=0x505,id=idulvcka \ -chardev socket,id=serial_id_serial0,path=/var/tmp/avocado_w2u90exl/serial-serial0-20181127-024837-wdAVx2FL,server,nowait \ -device isa-serial,chardev=serial_id_serial0 \ -chardev socket,id=seabioslog_id_20181127-024837-wdAVx2FL,path=/var/tmp/avocado_w2u90exl/seabios-20181127-024837-wdAVx2FL,server,nowait \ -device isa-debugcon,chardev=seabioslog_id_20181127-024837-wdAVx2FL,iobase=0x402 \ -device pcie-root-port,id=pcie.0-root-port-5,slot=5,chassis=5,addr=0x5,bus=pcie.0 \ -device qemu-xhci,id=usb1,bus=pcie.0-root-port-5,addr=0x0 \ -device pcie-root-port,id=pcie.0-root-port-6,slot=6,chassis=6,addr=0x6,bus=pcie.0 \ -device virtio-scsi-pci,id=virtio_scsi_pci0,bus=pcie.0-root-port-6,addr=0x0 \ -blockdev driver=file,cache.direct=off,cache.no-flush=on,filename=/home/kvm_autotest_root/images/rhel80-64-virtio-scsi.qcow2,node-name=my_file \ -blockdev driver=qcow2,node-name=my,file=my_file \ -device scsi-hd,drive=my,bus=virtio_scsi_pci0.0 \ -device pcie-root-port,id=pcie.0-root-port-7,slot=7,chassis=7,addr=0x7,bus=pcie.0 \ -device virtio-net-pci,mac=9a:34:35:36:37:38,id=idyb3F88,vectors=4,netdev=idTAFS0s,bus=pcie.0-root-port-7,addr=0x0 \ -netdev tap,id=idTAFS0s,vhost=on \ -m 8G \ -smp 12,maxcpus=12,cores=6,threads=1,sockets=2 \ -cpu 'SandyBridge',+kvm_pv_unhalt \ -blockdev driver=raw,file.driver=file,cache.direct=off,cache.no-flush=on,file.filename=/home/kvm_autotest_root/iso/windows/winutils.iso,node-name=drive2,read-only=on \ -device scsi-cd,drive=drive2,id=data-disk1,bus=virtio_scsi_pci0.0 \ -blockdev driver=raw,file.driver=file,cache.direct=off,cache.no-flush=on,file.filename=/home/kvm_autotest_root/iso/windows/virtio-win-prewhql-0.1-162.iso,node-name=drive3,read-only=on \ -device scsi-cd,drive=drive3,id=data-disk2,bus=virtio_scsi_pci0.0 \ -device usb-tablet,id=usb-tablet1,bus=usb1.0,port=1 \ -vnc :0 \ -rtc base=localtime,clock=host,driftfix=slew \ -boot order=cdn,once=c,menu=off,strict=off \ -enable-kvm \ -monitor stdio \ -qmp tcp:0:4444,server,nowait \ -device pcie-root-port,id=pcie.0-root-port-9,slot=9,chassis=9,addr=0x9,bus=pcie.0 \ -device pcie-root-port,id=pcie.0-root-port-8,slot=8,chassis=8,addr=0x8,bus=pcie.0 \ -device virtio-scsi-pci,id=virtio_scsi_pci1,bus=pcie.0-root-port-9,addr=0x0 \ -blockdev driver=file,cache.direct=off,cache.no-flush=on,filename=/home/kvm_autotest_root/images/data.qcow2,node-name=data_disk \ -blockdev driver=qcow2,node-name=disk1,file=data_disk \ -device scsi-hd,drive=disk1,bus=virtio_scsi_pci1.0,id=data_disk \ 3. create partition (GPT + ext4) on disk. Guest: # fdisk -l Disk /dev/sdb: 15 GiB, 16106127360 bytes, 31457280 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes # parted /dev/sdb GNU Parted 3.2 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) print Error: /dev/sdb: unrecognised disk label Model: QEMU QEMU HARDDISK (scsi) Disk /dev/sdb: 16.1GB Sector size (logical/physical): 512B/512B Partition Table: unknown Disk Flags: (parted) mklabel gpt (parted) mkpart primary 0 15G Warning: The resulting partition is not properly aligned for best performance: 34s % 2048s != 0s Ignore/Cancel? Ignore (parted) print Model: QEMU QEMU HARDDISK (scsi) Disk /dev/sdb: 16.1GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 17.4kB 15.0GB 15.0GB primary (parted) quit Information: You may need to update /etc/fstab. # partprobe /dev/sdb # mkfs.ext4 /dev/sdb1 mke2fs 1.44.3 (10-July-2018) Discarding device blocks: done Creating filesystem with 3662105 4k blocks and 915712 inodes Filesystem UUID: 9e8372e3-9202-4d04-b844-ef3619725f76 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208 Allocating group tables: done Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done # fdisk -l Disk /dev/sdb: 15 GiB, 16106127360 bytes, 31457280 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: 59898C6E-3E37-4020-B643-834FABBE96CA Device Start End Sectors Size Type /dev/sdb1 34 29296875 29296842 14G Linux filesystem 4. copy a file to the partition and record md5 value. # mkdir /mnt/test # mount /dev/sdb1 /mnt/test/ # cp test.log /mnt/test/ # md5sum /mnt/test/test.log e2a18ba3dc475065045db4a0b67c7ee4 /mnt/test/test.log 5. block_resize to 20G # telnet localhost 4444 {"execute":"qmp_capabilities"} {"execute":"block_resize","arguments":{"node-name":"disk1","size":21474836480}} 6. check md5 of the file # md5sum /mnt/test/test.log e2a18ba3dc475065045db4a0b67c7ee4 /mnt/test/test.log 7. check the disk in guest. # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 19G 0 part ├─rhel_vm--198--140-root 253:0 0 17G 0 lvm / └─rhel_vm--198--140-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 20G 0 disk └─sdb1 8:17 0 14G 0 part /mnt/test sr0 11:0 1 2.2G 0 rom sr1 11:1 1 541M 0 rom # fdisk -l GPT PMBR size mismatch (31457279 != 41943039) will be corrected by write. The backup GPT table is not on the end of the device. This problem will be corrected by write. Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: 309DECD5-7180-473F-9E56-3E5F9ACBA826 Device Start End Sectors Size Type /dev/sdb1 34 29296875 29296842 14G Linux filesystem 8. reboot guest and then check disk again. # reboot # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 19G 0 part ├─rhel_vm--198--140-root 253:0 0 17G 0 lvm / └─rhel_vm--198--140-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 20G 0 disk └─sdb1 8:17 0 14G 0 part sr0 11:0 1 2.2G 0 rom sr1 11:1 1 541M 0 rom # fdisk -l GPT PMBR size mismatch (31457279 != 41943039) will be corrected by write. The backup GPT table is not on the end of the device. This problem will be corrected by write. Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: 52F81F6B-F026-4D9D-9AF9-D5111E6D3AF9 Device Start End Sectors Size Type /dev/sdb1 34 29296875 29296842 14G Linux filesystem 9. check md5 of the file # mount /dev/sdb1 /mnt/test/ # md5sum /mnt/test/test.log e2a18ba3dc475065045db4a0b67c7ee4 /mnt/test/test.log 10. block_resize to 10G {"execute":"block_resize","arguments":{"node-name":"disk1","size":10737418240}} 11. check md5 of the file # md5sum /mnt/test/test.log e2a18ba3dc475065045db4a0b67c7ee4 /mnt/test/test.log 12. check disk in guest # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 19G 0 part ├─rhel_vm--198--140-root 253:0 0 17G 0 lvm / └─rhel_vm--198--140-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 10G 0 disk └─sdb1 8:17 0 14G 0 part /mnt/test sr0 11:0 1 2.2G 0 rom sr1 11:1 1 541M 0 rom # fdisk -l GPT PMBR size mismatch (31457279 != 20971519) will be corrected by write. Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x00000000 Device Boot Start End Sectors Size Id Type /dev/sdb1 1 20971519 20971519 10G ee GPT 13. reboot guest and then check disk again. # reboot # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 19G 0 part ├─rhel_vm--198--140-root 253:0 0 17G 0 lvm / └─rhel_vm--198--140-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 10G 0 disk sr0 11:0 1 2.2G 0 rom sr1 11:1 1 541M 0 rom # fdisk -l GPT PMBR size mismatch (31457279 != 20971519) will be corrected by write. Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x00000000 Device Boot Start End Sectors Size Id Type /dev/sdb1 1 20971519 20971519 10G ee GPT # mount /dev/sdb1 /mnt/test/ mount: /mnt/test: special device /dev/sdb1 does not exist. # ls /dev/sdb* /dev/sdb Actual results: after step 13, the partition on disk disappeared. # mount /dev/sdb1 /mnt/test/ mount: /mnt/test: special device /dev/sdb1 does not exist. # ls /dev/sdb* /dev/sdb Expected results: the partition on disk works well after reboot. Additional info: Create partition with msdos + ext4 and retest it, the partition on disk does not disappear after reboot, but it also can not work. # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 19G 0 part ├─rhel_vm--198--140-root 253:0 0 17G 0 lvm / └─rhel_vm--198--140-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 10G 0 disk └─sdb1 8:17 0 10G 0 part sr0 11:0 1 2.2G 0 rom sr1 11:1 1 541M 0 rom # fdisk -l Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xbb2209ab Device Boot Start End Sectors Size Id Type /dev/sdb1 1 29296875 29296875 14G 83 Linux # mount /dev/sdb1 /mnt/test/ mount: /mnt/test: wrong fs type, bad option, bad superblock on /dev/sdb1, missing codepage or helper program, or other error. # parted /dev/sdb GNU Parted 3.2 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) print Error: Can't have a partition outside the disk! Tested with Windows 2019, both GPT+NTFS and MBR+NTFS work well.
Tested on RHEL.7.6, also hit this issue. kernel-3.10.0-957.el7.x86_64 qemu-kvm-rhev-2.12.0-20.el7
I met the problem on qemu-kvm-3.1.0-1.module+el8+2538+1516be75.ppc64le even without a partition, i.e. just create a file system with mkfs.ext4 or mkfs.xfs on the data disk /dev/sdb, then mount it 'mount /dev/sdb /mnt'; and after shrink the image with 'block_resize', continuing write to the data disk(shrink image) will show the files system could not be used any more with meta data corrupted.
(In reply to Xueqiang Wei from comment #0) > Description of problem: > > shrink disk and then reboot guest, the partition on disk disappeared. > > # fdisk -l > GPT PMBR size mismatch (31457279 != 41943039) will be corrected by write. > The backup GPT table is not on the end of the device. This problem will be > corrected by write. > > > > Version-Release number of selected component (if applicable): > > Host: > kernel-4.18.0-50.el8.x86_64 > qemu-kvm-3.1.0-1.module+el8+2538+1516be75 > > Guest: > kernel-4.18.0-50.el8.x86_64 > > > > How reproducible: > 5/5 > > > Steps to Reproduce: > 1. create a 15G data image. > # qemu-img create -f qcow2 /home/kvm_autotest_root/images/data.qcow2 15G > > 2. start guest with this image as data image (blockdev+q35) > /usr/libexec/qemu-kvm \ > -S \ > -name 'avocado-vt-vm1' \ > -sandbox off \ > -machine q35 \ > -nodefaults \ > -device VGA,bus=pcie.0,addr=0x1 \ > -device > pcie-root-port,id=pcie_root_port_0,slot=2,chassis=2,addr=0x2,bus=pcie.0 \ > -device > pcie-root-port,id=pcie_root_port_1,slot=3,chassis=3,addr=0x3,bus=pcie.0 \ > -device > pcie-root-port,id=pcie_root_port_2,slot=4,chassis=4,addr=0x4,bus=pcie.0 \ > -chardev > socket,id=qmp_id_qmpmonitor1,path=/var/tmp/avocado_w2u90exl/monitor- > qmpmonitor1-20181127-024837-wdAVx2FL,server,nowait \ > -mon chardev=qmp_id_qmpmonitor1,mode=control \ > -chardev > socket,id=qmp_id_catch_monitor,path=/var/tmp/avocado_w2u90exl/monitor- > catch_monitor-20181127-024837-wdAVx2FL,server,nowait \ > -mon chardev=qmp_id_catch_monitor,mode=control \ > -device pvpanic,ioport=0x505,id=idulvcka \ > -chardev > socket,id=serial_id_serial0,path=/var/tmp/avocado_w2u90exl/serial-serial0- > 20181127-024837-wdAVx2FL,server,nowait \ > -device isa-serial,chardev=serial_id_serial0 \ > -chardev > socket,id=seabioslog_id_20181127-024837-wdAVx2FL,path=/var/tmp/ > avocado_w2u90exl/seabios-20181127-024837-wdAVx2FL,server,nowait \ > -device > isa-debugcon,chardev=seabioslog_id_20181127-024837-wdAVx2FL,iobase=0x402 \ > -device > pcie-root-port,id=pcie.0-root-port-5,slot=5,chassis=5,addr=0x5,bus=pcie.0 \ > -device qemu-xhci,id=usb1,bus=pcie.0-root-port-5,addr=0x0 \ > -device > pcie-root-port,id=pcie.0-root-port-6,slot=6,chassis=6,addr=0x6,bus=pcie.0 \ > -device > virtio-scsi-pci,id=virtio_scsi_pci0,bus=pcie.0-root-port-6,addr=0x0 \ > -blockdev > driver=file,cache.direct=off,cache.no-flush=on,filename=/home/ > kvm_autotest_root/images/rhel80-64-virtio-scsi.qcow2,node-name=my_file \ > -blockdev driver=qcow2,node-name=my,file=my_file \ > -device scsi-hd,drive=my,bus=virtio_scsi_pci0.0 \ > -device > pcie-root-port,id=pcie.0-root-port-7,slot=7,chassis=7,addr=0x7,bus=pcie.0 \ > -device > virtio-net-pci,mac=9a:34:35:36:37:38,id=idyb3F88,vectors=4,netdev=idTAFS0s, > bus=pcie.0-root-port-7,addr=0x0 \ > -netdev tap,id=idTAFS0s,vhost=on \ > -m 8G \ > -smp 12,maxcpus=12,cores=6,threads=1,sockets=2 \ > -cpu 'SandyBridge',+kvm_pv_unhalt \ > -blockdev > driver=raw,file.driver=file,cache.direct=off,cache.no-flush=on,file. > filename=/home/kvm_autotest_root/iso/windows/winutils.iso,node-name=drive2, > read-only=on \ > -device scsi-cd,drive=drive2,id=data-disk1,bus=virtio_scsi_pci0.0 \ > -blockdev > driver=raw,file.driver=file,cache.direct=off,cache.no-flush=on,file. > filename=/home/kvm_autotest_root/iso/windows/virtio-win-prewhql-0.1-162.iso, > node-name=drive3,read-only=on \ > -device scsi-cd,drive=drive3,id=data-disk2,bus=virtio_scsi_pci0.0 \ > -device usb-tablet,id=usb-tablet1,bus=usb1.0,port=1 \ > -vnc :0 \ > -rtc base=localtime,clock=host,driftfix=slew \ > -boot order=cdn,once=c,menu=off,strict=off \ > -enable-kvm \ > -monitor stdio \ > -qmp tcp:0:4444,server,nowait \ > -device > pcie-root-port,id=pcie.0-root-port-9,slot=9,chassis=9,addr=0x9,bus=pcie.0 \ > -device > pcie-root-port,id=pcie.0-root-port-8,slot=8,chassis=8,addr=0x8,bus=pcie.0 \ > -device > virtio-scsi-pci,id=virtio_scsi_pci1,bus=pcie.0-root-port-9,addr=0x0 \ > -blockdev > driver=file,cache.direct=off,cache.no-flush=on,filename=/home/ > kvm_autotest_root/images/data.qcow2,node-name=data_disk \ > -blockdev driver=qcow2,node-name=disk1,file=data_disk \ > -device scsi-hd,drive=disk1,bus=virtio_scsi_pci1.0,id=data_disk \ > > > 3. create partition (GPT + ext4) on disk. > > Guest: > # fdisk -l > Disk /dev/sdb: 15 GiB, 16106127360 bytes, 31457280 sectors > Units: sectors of 1 * 512 = 512 bytes > Sector size (logical/physical): 512 bytes / 512 bytes > I/O size (minimum/optimal): 512 bytes / 512 bytes > > # parted /dev/sdb > GNU Parted 3.2 > Using /dev/sdb > Welcome to GNU Parted! Type 'help' to view a list of commands. > (parted) print > Error: /dev/sdb: unrecognised disk label > Model: QEMU QEMU HARDDISK (scsi) > Disk /dev/sdb: 16.1GB > Sector size (logical/physical): 512B/512B > Partition Table: unknown > Disk Flags: > (parted) mklabel gpt > (parted) mkpart primary 0 15G > Warning: The resulting partition is not properly aligned for best > performance: > 34s % 2048s != 0s > Ignore/Cancel? Ignore > (parted) print > Model: QEMU QEMU HARDDISK (scsi) > Disk /dev/sdb: 16.1GB > Sector size (logical/physical): 512B/512B > Partition Table: gpt > Disk Flags: > > Number Start End Size File system Name Flags > 1 17.4kB 15.0GB 15.0GB primary > > (parted) quit > Information: You may need to update /etc/fstab. > > # partprobe /dev/sdb > > # mkfs.ext4 /dev/sdb1 > mke2fs 1.44.3 (10-July-2018) > Discarding device blocks: done > Creating filesystem with 3662105 4k blocks and 915712 inodes > Filesystem UUID: 9e8372e3-9202-4d04-b844-ef3619725f76 > Superblock backups stored on blocks: > 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208 > > Allocating group tables: done > Writing inode tables: done > Creating journal (16384 blocks): done > Writing superblocks and filesystem accounting information: done > > > # fdisk -l > Disk /dev/sdb: 15 GiB, 16106127360 bytes, 31457280 sectors > Units: sectors of 1 * 512 = 512 bytes > Sector size (logical/physical): 512 bytes / 512 bytes > I/O size (minimum/optimal): 512 bytes / 512 bytes > Disklabel type: gpt > Disk identifier: 59898C6E-3E37-4020-B643-834FABBE96CA > > Device Start End Sectors Size Type > /dev/sdb1 34 29296875 29296842 14G Linux filesystem > > > 4. copy a file to the partition and record md5 value. > # mkdir /mnt/test > # mount /dev/sdb1 /mnt/test/ > # cp test.log /mnt/test/ > # md5sum /mnt/test/test.log > e2a18ba3dc475065045db4a0b67c7ee4 /mnt/test/test.log > > 5. block_resize to 20G > > # telnet localhost 4444 > {"execute":"qmp_capabilities"} > {"execute":"block_resize","arguments":{"node-name":"disk1","size": > 21474836480}} > > 6. check md5 of the file > > # md5sum /mnt/test/test.log > e2a18ba3dc475065045db4a0b67c7ee4 /mnt/test/test.log > > > 7. check the disk in guest. > # lsblk > NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT > sda 8:0 0 20G 0 disk > ├─sda1 8:1 0 1G 0 part /boot > └─sda2 8:2 0 19G 0 part > ├─rhel_vm--198--140-root 253:0 0 17G 0 lvm / > └─rhel_vm--198--140-swap 253:1 0 2G 0 lvm [SWAP] > sdb 8:16 0 20G 0 disk > └─sdb1 8:17 0 14G 0 part /mnt/test > sr0 11:0 1 2.2G 0 rom > sr1 11:1 1 541M 0 rom > > # fdisk -l > GPT PMBR size mismatch (31457279 != 41943039) will be corrected by write. > The backup GPT table is not on the end of the device. This problem will be > corrected by write. > Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors > Units: sectors of 1 * 512 = 512 bytes > Sector size (logical/physical): 512 bytes / 512 bytes > I/O size (minimum/optimal): 512 bytes / 512 bytes > Disklabel type: gpt > Disk identifier: 309DECD5-7180-473F-9E56-3E5F9ACBA826 > > Device Start End Sectors Size Type > /dev/sdb1 34 29296875 29296842 14G Linux filesystem > > > 8. reboot guest and then check disk again. > > # reboot > > # lsblk > NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT > sda 8:0 0 20G 0 disk > ├─sda1 8:1 0 1G 0 part /boot > └─sda2 8:2 0 19G 0 part > ├─rhel_vm--198--140-root 253:0 0 17G 0 lvm / > └─rhel_vm--198--140-swap 253:1 0 2G 0 lvm [SWAP] > sdb 8:16 0 20G 0 disk > └─sdb1 8:17 0 14G 0 part > sr0 11:0 1 2.2G 0 rom > sr1 11:1 1 541M 0 rom > > # fdisk -l > GPT PMBR size mismatch (31457279 != 41943039) will be corrected by write. > The backup GPT table is not on the end of the device. This problem will be > corrected by write. > Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors > Units: sectors of 1 * 512 = 512 bytes > Sector size (logical/physical): 512 bytes / 512 bytes > I/O size (minimum/optimal): 512 bytes / 512 bytes > Disklabel type: gpt > Disk identifier: 52F81F6B-F026-4D9D-9AF9-D5111E6D3AF9 > > Device Start End Sectors Size Type > /dev/sdb1 34 29296875 29296842 14G Linux filesystem > > > 9. check md5 of the file > > # mount /dev/sdb1 /mnt/test/ > # md5sum /mnt/test/test.log > e2a18ba3dc475065045db4a0b67c7ee4 /mnt/test/test.log > > > 10. block_resize to 10G > > {"execute":"block_resize","arguments":{"node-name":"disk1","size": > 10737418240}} This step will corrupt the partition and the file-system in the guest, so the test result is expected. Users are not supposed to shrink the underlying image (or phisical disk) if there's a file-system or partition that uses the part of the disk that is being "deleted". You need to use something like resize2fs inside the guest, then recreate the partition before changing the image size via QEMU. For some documentation, please see https://access.redhat.com/articles/1196333
(In reply to Ademar Reis from comment #3) > (In reply to Xueqiang Wei from comment #0) > > Description of problem: > > > > shrink disk and then reboot guest, the partition on disk disappeared. > > > > # fdisk -l > > GPT PMBR size mismatch (31457279 != 41943039) will be corrected by write. > > The backup GPT table is not on the end of the device. This problem will be > > corrected by write. > > > > > > > > Version-Release number of selected component (if applicable): > > > > Host: > > kernel-4.18.0-50.el8.x86_64 > > qemu-kvm-3.1.0-1.module+el8+2538+1516be75 > > > > Guest: > > kernel-4.18.0-50.el8.x86_64 > > > > > > > > How reproducible: > > 5/5 > > > > > > Steps to Reproduce: > > 1. create a 15G data image. > > # qemu-img create -f qcow2 /home/kvm_autotest_root/images/data.qcow2 15G > > > > 2. start guest with this image as data image (blockdev+q35) > > /usr/libexec/qemu-kvm \ > > -S \ > > -name 'avocado-vt-vm1' \ > > -sandbox off \ > > -machine q35 \ > > -nodefaults \ > > -device VGA,bus=pcie.0,addr=0x1 \ > > -device > > pcie-root-port,id=pcie_root_port_0,slot=2,chassis=2,addr=0x2,bus=pcie.0 \ > > -device > > pcie-root-port,id=pcie_root_port_1,slot=3,chassis=3,addr=0x3,bus=pcie.0 \ > > -device > > pcie-root-port,id=pcie_root_port_2,slot=4,chassis=4,addr=0x4,bus=pcie.0 \ > > -chardev > > socket,id=qmp_id_qmpmonitor1,path=/var/tmp/avocado_w2u90exl/monitor- > > qmpmonitor1-20181127-024837-wdAVx2FL,server,nowait \ > > -mon chardev=qmp_id_qmpmonitor1,mode=control \ > > -chardev > > socket,id=qmp_id_catch_monitor,path=/var/tmp/avocado_w2u90exl/monitor- > > catch_monitor-20181127-024837-wdAVx2FL,server,nowait \ > > -mon chardev=qmp_id_catch_monitor,mode=control \ > > -device pvpanic,ioport=0x505,id=idulvcka \ > > -chardev > > socket,id=serial_id_serial0,path=/var/tmp/avocado_w2u90exl/serial-serial0- > > 20181127-024837-wdAVx2FL,server,nowait \ > > -device isa-serial,chardev=serial_id_serial0 \ > > -chardev > > socket,id=seabioslog_id_20181127-024837-wdAVx2FL,path=/var/tmp/ > > avocado_w2u90exl/seabios-20181127-024837-wdAVx2FL,server,nowait \ > > -device > > isa-debugcon,chardev=seabioslog_id_20181127-024837-wdAVx2FL,iobase=0x402 \ > > -device > > pcie-root-port,id=pcie.0-root-port-5,slot=5,chassis=5,addr=0x5,bus=pcie.0 \ > > -device qemu-xhci,id=usb1,bus=pcie.0-root-port-5,addr=0x0 \ > > -device > > pcie-root-port,id=pcie.0-root-port-6,slot=6,chassis=6,addr=0x6,bus=pcie.0 \ > > -device > > virtio-scsi-pci,id=virtio_scsi_pci0,bus=pcie.0-root-port-6,addr=0x0 \ > > -blockdev > > driver=file,cache.direct=off,cache.no-flush=on,filename=/home/ > > kvm_autotest_root/images/rhel80-64-virtio-scsi.qcow2,node-name=my_file \ > > -blockdev driver=qcow2,node-name=my,file=my_file \ > > -device scsi-hd,drive=my,bus=virtio_scsi_pci0.0 \ > > -device > > pcie-root-port,id=pcie.0-root-port-7,slot=7,chassis=7,addr=0x7,bus=pcie.0 \ > > -device > > virtio-net-pci,mac=9a:34:35:36:37:38,id=idyb3F88,vectors=4,netdev=idTAFS0s, > > bus=pcie.0-root-port-7,addr=0x0 \ > > -netdev tap,id=idTAFS0s,vhost=on \ > > -m 8G \ > > -smp 12,maxcpus=12,cores=6,threads=1,sockets=2 \ > > -cpu 'SandyBridge',+kvm_pv_unhalt \ > > -blockdev > > driver=raw,file.driver=file,cache.direct=off,cache.no-flush=on,file. > > filename=/home/kvm_autotest_root/iso/windows/winutils.iso,node-name=drive2, > > read-only=on \ > > -device scsi-cd,drive=drive2,id=data-disk1,bus=virtio_scsi_pci0.0 \ > > -blockdev > > driver=raw,file.driver=file,cache.direct=off,cache.no-flush=on,file. > > filename=/home/kvm_autotest_root/iso/windows/virtio-win-prewhql-0.1-162.iso, > > node-name=drive3,read-only=on \ > > -device scsi-cd,drive=drive3,id=data-disk2,bus=virtio_scsi_pci0.0 \ > > -device usb-tablet,id=usb-tablet1,bus=usb1.0,port=1 \ > > -vnc :0 \ > > -rtc base=localtime,clock=host,driftfix=slew \ > > -boot order=cdn,once=c,menu=off,strict=off \ > > -enable-kvm \ > > -monitor stdio \ > > -qmp tcp:0:4444,server,nowait \ > > -device > > pcie-root-port,id=pcie.0-root-port-9,slot=9,chassis=9,addr=0x9,bus=pcie.0 \ > > -device > > pcie-root-port,id=pcie.0-root-port-8,slot=8,chassis=8,addr=0x8,bus=pcie.0 \ > > -device > > virtio-scsi-pci,id=virtio_scsi_pci1,bus=pcie.0-root-port-9,addr=0x0 \ > > -blockdev > > driver=file,cache.direct=off,cache.no-flush=on,filename=/home/ > > kvm_autotest_root/images/data.qcow2,node-name=data_disk \ > > -blockdev driver=qcow2,node-name=disk1,file=data_disk \ > > -device scsi-hd,drive=disk1,bus=virtio_scsi_pci1.0,id=data_disk \ > > > > > > 3. create partition (GPT + ext4) on disk. > > > > Guest: > > # fdisk -l > > Disk /dev/sdb: 15 GiB, 16106127360 bytes, 31457280 sectors > > Units: sectors of 1 * 512 = 512 bytes > > Sector size (logical/physical): 512 bytes / 512 bytes > > I/O size (minimum/optimal): 512 bytes / 512 bytes > > > > # parted /dev/sdb > > GNU Parted 3.2 > > Using /dev/sdb > > Welcome to GNU Parted! Type 'help' to view a list of commands. > > (parted) print > > Error: /dev/sdb: unrecognised disk label > > Model: QEMU QEMU HARDDISK (scsi) > > Disk /dev/sdb: 16.1GB > > Sector size (logical/physical): 512B/512B > > Partition Table: unknown > > Disk Flags: > > (parted) mklabel gpt > > (parted) mkpart primary 0 15G > > Warning: The resulting partition is not properly aligned for best > > performance: > > 34s % 2048s != 0s > > Ignore/Cancel? Ignore > > (parted) print > > Model: QEMU QEMU HARDDISK (scsi) > > Disk /dev/sdb: 16.1GB > > Sector size (logical/physical): 512B/512B > > Partition Table: gpt > > Disk Flags: > > > > Number Start End Size File system Name Flags > > 1 17.4kB 15.0GB 15.0GB primary > > > > (parted) quit > > Information: You may need to update /etc/fstab. > > > > # partprobe /dev/sdb > > > > # mkfs.ext4 /dev/sdb1 > > mke2fs 1.44.3 (10-July-2018) > > Discarding device blocks: done > > Creating filesystem with 3662105 4k blocks and 915712 inodes > > Filesystem UUID: 9e8372e3-9202-4d04-b844-ef3619725f76 > > Superblock backups stored on blocks: > > 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208 > > > > Allocating group tables: done > > Writing inode tables: done > > Creating journal (16384 blocks): done > > Writing superblocks and filesystem accounting information: done > > > > > > # fdisk -l > > Disk /dev/sdb: 15 GiB, 16106127360 bytes, 31457280 sectors > > Units: sectors of 1 * 512 = 512 bytes > > Sector size (logical/physical): 512 bytes / 512 bytes > > I/O size (minimum/optimal): 512 bytes / 512 bytes > > Disklabel type: gpt > > Disk identifier: 59898C6E-3E37-4020-B643-834FABBE96CA > > > > Device Start End Sectors Size Type > > /dev/sdb1 34 29296875 29296842 14G Linux filesystem > > > > > > 4. copy a file to the partition and record md5 value. > > # mkdir /mnt/test > > # mount /dev/sdb1 /mnt/test/ > > # cp test.log /mnt/test/ > > # md5sum /mnt/test/test.log > > e2a18ba3dc475065045db4a0b67c7ee4 /mnt/test/test.log > > > > 5. block_resize to 20G > > > > # telnet localhost 4444 > > {"execute":"qmp_capabilities"} > > {"execute":"block_resize","arguments":{"node-name":"disk1","size": > > 21474836480}} > > > > 6. check md5 of the file > > > > # md5sum /mnt/test/test.log > > e2a18ba3dc475065045db4a0b67c7ee4 /mnt/test/test.log > > > > > > 7. check the disk in guest. > > # lsblk > > NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT > > sda 8:0 0 20G 0 disk > > ├─sda1 8:1 0 1G 0 part /boot > > └─sda2 8:2 0 19G 0 part > > ├─rhel_vm--198--140-root 253:0 0 17G 0 lvm / > > └─rhel_vm--198--140-swap 253:1 0 2G 0 lvm [SWAP] > > sdb 8:16 0 20G 0 disk > > └─sdb1 8:17 0 14G 0 part /mnt/test > > sr0 11:0 1 2.2G 0 rom > > sr1 11:1 1 541M 0 rom > > > > # fdisk -l > > GPT PMBR size mismatch (31457279 != 41943039) will be corrected by write. > > The backup GPT table is not on the end of the device. This problem will be > > corrected by write. > > Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors > > Units: sectors of 1 * 512 = 512 bytes > > Sector size (logical/physical): 512 bytes / 512 bytes > > I/O size (minimum/optimal): 512 bytes / 512 bytes > > Disklabel type: gpt > > Disk identifier: 309DECD5-7180-473F-9E56-3E5F9ACBA826 > > > > Device Start End Sectors Size Type > > /dev/sdb1 34 29296875 29296842 14G Linux filesystem > > > > > > 8. reboot guest and then check disk again. > > > > # reboot > > > > # lsblk > > NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT > > sda 8:0 0 20G 0 disk > > ├─sda1 8:1 0 1G 0 part /boot > > └─sda2 8:2 0 19G 0 part > > ├─rhel_vm--198--140-root 253:0 0 17G 0 lvm / > > └─rhel_vm--198--140-swap 253:1 0 2G 0 lvm [SWAP] > > sdb 8:16 0 20G 0 disk > > └─sdb1 8:17 0 14G 0 part > > sr0 11:0 1 2.2G 0 rom > > sr1 11:1 1 541M 0 rom > > > > # fdisk -l > > GPT PMBR size mismatch (31457279 != 41943039) will be corrected by write. > > The backup GPT table is not on the end of the device. This problem will be > > corrected by write. > > Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors > > Units: sectors of 1 * 512 = 512 bytes > > Sector size (logical/physical): 512 bytes / 512 bytes > > I/O size (minimum/optimal): 512 bytes / 512 bytes > > Disklabel type: gpt > > Disk identifier: 52F81F6B-F026-4D9D-9AF9-D5111E6D3AF9 > > > > Device Start End Sectors Size Type > > /dev/sdb1 34 29296875 29296842 14G Linux filesystem > > > > > > 9. check md5 of the file > > > > # mount /dev/sdb1 /mnt/test/ > > # md5sum /mnt/test/test.log > > e2a18ba3dc475065045db4a0b67c7ee4 /mnt/test/test.log > > > > > > 10. block_resize to 10G > > > > {"execute":"block_resize","arguments":{"node-name":"disk1","size": > > 10737418240}} > > This step will corrupt the partition and the file-system in the guest, so > the test result is expected. > > Users are not supposed to shrink the underlying image (or phisical disk) if > there's a file-system or partition that uses the part of the disk that is > being "deleted". You need to use something like resize2fs inside the guest, > then recreate the partition before changing the image size via QEMU. > > For some documentation, please see https://access.redhat.com/articles/1196333 Thank you, I will update test case.
According to Comment 3, retested and also hit this issue. So reopen this bug. If I was wrong, please correct me. Thank you very much. Details: Host: kernel-4.18.0-50.el8.x86_64 qemu-kvm-3.1.0-2.module+el8+2606+2c716ad7 Guest: kernel-4.18.0-50.el8.x86_64 Note: partition works well after shrank with msdos and ext4 , but can not work with gpt and ext4. 1. create partition by parted tool # parted /dev/sdb GNU Parted 3.2 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) print Error: /dev/sdb: unrecognised disk label Model: QEMU QEMU HARDDISK (scsi) Disk /dev/sdb: 21.5GB Sector size (logical/physical): 512B/512B Partition Table: unknown Disk Flags: (parted) mklabel msdos (parted) mkpart primary 1.024M 21.5G (parted) print Model: QEMU QEMU HARDDISK (scsi) Disk /dev/sdb: 21.5GB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 1049kB 21.5GB 21.5GB primary lba (parted) quit # partprobe /dev/sdb # mkfs.ext4 /dev/sdb1 # mount /dev/sdb1 /mnt/test/ # cp test.log /mnt/test/ 2. check file-system # umount /dev/sdb1 run fsck on the unmounted file system. # e2fsck -f /dev/sdb1 e2fsck 1.44.3 (10-July-2018) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/sdb1: 12/1310720 files (0.0% non-contiguous), 126323/5242624 blocks 3. shrink the file system with the resize2fs # resize2fs /dev/sdb1 10G resize2fs 1.44.3 (10-July-2018) Resizing the filesystem on /dev/sdb1 to 2621440 (4k) blocks. The filesystem on /dev/sdb1 is now 2621440 (4k) blocks long. 4. delete and recreate the partition the file system is on to the required amount. # parted /dev/sdb GNU Parted 3.2 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) print Model: QEMU QEMU HARDDISK (scsi) Disk /dev/sdb: 21.5GB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 1049kB 21.5GB 21.5GB primary ext4 (parted) rm 1 (parted) mkpart primary 1.024M 10738.44224M (parted) print Model: QEMU QEMU HARDDISK (scsi) Disk /dev/sdb: 21.5GB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 1049kB 10.7GB 10.7GB primary lba (parted) quit Information: You may need to update /etc/fstab. # partprobe /dev/sdb # e2fsck -f /dev/sdb1 e2fsck 1.44.3 (10-July-2018) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/sdb1: 12/655360 files (0.0% non-contiguous), 83138/2621440 blocks # mount /dev/sdb1 /mnt/test/ # ls /mnt/test/ lost+found test.log # umount /dev/sdb1 5. shrink disk to 10G {"execute":"block_resize","arguments":{"node-name":"disk1","size":10742661120}} 6. check file system again. # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 60G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 54.9G 0 part ├─rhel_vm--198--140-root 253:0 0 17G 0 lvm / └─rhel_vm--198--140-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 10G 0 disk └─sdb1 8:17 0 10G 0 part sr0 11:0 1 2.2G 0 rom sr1 11:1 1 541M 0 rom # e2fsck -f /dev/sdb1 e2fsck 1.44.3 (10-July-2018) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/sdb1: 12/655360 files (0.0% non-contiguous), 83138/2621440 blocks 7. reboot guest and check partition works well # mount /dev/sdb1 /mnt/test/ # ls /mnt/test/ lost+found test.log If partition created with GPT and Ext4, after step 7: # mount /dev/sdb1 /mnt/test/ mount: /mnt/test: special device /dev/sdb1 does not exist. # parted /dev/sdb GNU Parted 3.2 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) print Error: Invalid argument during seek for read on /dev/sdb Retry/Ignore/Cancel? Retry Error: Invalid argument during seek for read on /dev/sdb Retry/Ignore/Cancel? Cancel Model: QEMU QEMU HARDDISK (scsi) Disk /dev/sdb: 10.7GB Sector size (logical/physical): 512B/512B Partition Table: unknown Disk Flags: (parted) quit # fdisk -l GPT PMBR size mismatch (41943039 != 20981759) will be corrected by write. Disk /dev/sdb: 10 GiB, 10742661120 bytes, 20981760 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x00000000 Device Boot Start End Sectors Size Id Type /dev/sdb1 1 20981759 20981759 10G ee GPT
(In reply to Xueqiang Wei from comment #5) > According to Comment 3, retested and also hit this issue. So reopen this > bug. If I was wrong, please correct me. Thank you very much. > > > Details: > > Host: > kernel-4.18.0-50.el8.x86_64 > qemu-kvm-3.1.0-2.module+el8+2606+2c716ad7 > > Guest: > kernel-4.18.0-50.el8.x86_64 > > > Note: partition works well after shrank with msdos and ext4 , but can not > work with gpt and ext4. Turns out that GPT partitions store something at the end of the disk, so you need one extra step. The idea remains the same: one can't shrink the underlying disk without making the guest fully aware of the change. For the extra step necessary and some explanation, please see this page: https://superuser.com/questions/660309/live-resize-of-a-gpt-partition-on-linux Closing it again, because one step is missing in the test and therefore it's invalid.