Bug 1796073

Summary: libguestfs cannot inspect disks using Windows 10 NTFS compression, error "unsupported reparse point"
Product: Red Hat Enterprise Linux Advanced Virtualization Reporter: Richard W.M. Jones <rjones>
Component: libguestfs-winsupportAssignee: Richard W.M. Jones <rjones>
Status: CLOSED ERRATA QA Contact: YongkuiGuo <yoguo>
Severity: high Docs Contact:
Priority: unspecified    
Version: 8.2CC: ptoscano, shengzhao.li, yoguo
Target Milestone: rc   
Target Release: 8.0   
Hardware: x86_64   
OS: Linux   
Whiteboard: V2V
Fixed In Version: libguestfs-winsupport-8.2-1.el8 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: 1703463 Environment:
Last Closed: 2020-05-05 09:55:54 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 1703463, 1705234    
Bug Blocks:    

Description Richard W.M. Jones 2020-01-29 14:40:19 UTC
+++ This bug was initially created as a clone of Bug #1703463 +++

The way to reproduce this bug is:

(1) Install Windows 10 as a guest.  (I used Windows 2016 Server)

(2) In the guest run the following command:

  compact /compactos:always

This will take several minutes to complete, and at the end print something like:

  27527 files within 10759 directories were compressed.
  4,104,020,580 total bytes of data are stored in 2,753,420,944 bytes.
  The compression ratio is 1.5 to 1.

(3) Shut down the Windows guest.

(4) Attempt to convert the Windows guest, eg:

$ virt-v2v -i disk windows-10.0-server-compact.img -o null
[   0.0] Opening the source -i disk windows-10.0-server-compact.img
[   0.0] Creating an overlay to protect the source from being modified
[   0.1] Opening the overlay
[   8.6] Inspecting the overlay
virt-v2v: error: libguestfs error: inspect_os: lstat: 
/Windows/System32/cmd.exe: Input/output error

With patched libguestfs, the conversion step succeeds:

$ ~/d/libguestfs/run ~/d/virt-v2v/run virt-v2v -i disk windows-10.0-server-compact.img -o null
[   0.0] Opening the source -i disk windows-10.0-server-compact.img
[   0.0] Creating an overlay to protect the source from being modified
[   0.1] Opening the overlay
[   7.3] Inspecting the overlay
[   9.0] Checking for sufficient free disk space in the guest
[   9.0] Estimating space required on target for each disk
[   9.0] Converting Windows Server 2016 Standard to run on KVM
virt-v2v: warning: /usr/share/virt-tools/pnp_wait.exe is missing.  
Firstboot scripts may conflict with PnP.
virt-v2v: warning: QEMU Guest Agent MSI not found on tools ISO/directory. 
You may want to install the guest agent manually after conversion.
virt-v2v: warning: there are no virtio drivers available for this version 
of Windows (10.0 x86_64 Server Core).  virt-v2v looks for drivers in 
/usr/share/virtio-win

The guest will be configured to use slower emulated devices.
virt-v2v: This guest does not have virtio drivers installed.
[   9.9] Mapping filesystem data to avoid copying unused and blank areas
[  11.5] Closing the overlay
[  11.8] Assigning disks to buses
[  11.8] Checking if the guest needs BIOS or UEFI to boot
[  11.8] Initializing the target -o null
[  11.8] Copying disk 1/1 to qemu URI json:{ "file.driver": "null-co", "file.size": "1E" } (raw)
    (100.00/100%)
[  13.6] Creating output metadata
[  13.6] Finishing off

Upstream patch:

https://www.redhat.com/archives/libguestfs/2020-January/msg00223.html

However in RHEL 8 we can solve this by adding the system-compression
code to libguestfs-winsupport.

Comment 2 YongkuiGuo 2020-02-04 04:03:13 UTC
Verified with package:
libguestfs-winsupport-8.2-1.module+el8.2.0+5590+82cd80df.x86_64

Steps:

1. Install Windows 2019 as a guest.
2. In the guest run the following command:

   compact /compactos:always

After several minutes, print something like:

  35583 files within 15137 directories were compressed.
  6,389,945,947 total bytes of data are stored in 3,827,813,566 bytes.
  The compression ratio is 1.7 to 1.

3. Shut down the Windows guest.
4. Attempt to convert the Windows guest, eg:
$ virt-v2v -i disk win2019-x86_64.img -o null
[   0.0] Opening the source -i disk win2019-x86_64.img
[   0.0] Creating an overlay to protect the source from being modified
[   0.1] Initializing the target -o null
[   0.1] Opening the overlay
[  11.7] Inspecting the overlay
[  13.7] Checking for sufficient free disk space in the guest
[  13.7] Estimating space required on target for each disk
[  13.7] Converting Windows Server 2019 Standard to run on KVM
virt-v2v: warning: /usr/share/virt-tools/pnp_wait.exe is missing.  
Firstboot scripts may conflict with PnP.
virt-v2v: warning: there are no virtio drivers available for this version 
of Windows (10.0 x86_64 Server).  virt-v2v looks for drivers in 
/usr/share/virtio-win

The guest will be configured to use slower emulated devices.
virt-v2v: This guest does not have virtio drivers installed.
[  14.9] Mapping filesystem data to avoid copying unused and blank areas
[  15.8] Closing the overlay
[  16.0] Checking if the guest needs BIOS or UEFI to boot
[  16.0] Assigning disks to buses
[  16.0] Copying disk 1/1 to qemu URI json:{ "file.driver": "null-co", "file.size": "1E" } (raw)
    (100.00/100%)
[  18.2] Creating output metadata
[  18.2] Finishing off

Comment 4 errata-xmlrpc 2020-05-05 09:55:54 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHBA-2020:2017