1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
qemu-img rebase error message mentions wrong file name
While doing 'qemu-img rebase' for linking to a different backing file, if the old backing file does not exist, the command fails. During this failure, the error message shown is misleading.
e.g. qemu-img rebase -b <backing_file> <filename> throws error saying "Could not open <filename>"
Ideally it should "Could not open <old_backing_file>"
snippet -
[root@oxy-dev ~]# qemu-img info /opt/stack/data/nova/instances/94864a64-ebf8-45e6-a777-615921216a0a/disk
image: /opt/stack/data/nova/instances/94864a64-ebf8-45e6-a777-615921216a0a/disk
file format: qcow2
virtual size: 20G (21474836480 bytes)
disk size: 174M
cluster_size: 65536
backing file: /tmp/3559241a79b79ae663ec6e3d9b75d469967b383b
Format specific information:
compat: 1.1
lazy refcounts: false
[root@oxy-dev ~]# mv /tmp/3559241a79b79ae663ec6e3d9b75d469967b383b /tmp/3559241a79b79ae663ec6e3d9b75d469967b383a
[root@oxy-dev ~]# file !$
file /tmp/3559241a79b79ae663ec6e3d9b75d469967b383a
/tmp/3559241a79b79ae663ec6e3d9b75d469967b383a: x86 boot sector; partition 1: ID=0x83, active, starthead 32, startsector 2048, 409600 sectors; partition 2: ID=0x8e, starthead 159, startsector 411648, 16365568 sectors, code offset 0xc0
[root@oxy-dev ~]# file /tmp/3559241a79b79ae663ec6e3d9b75d469967b383b
/tmp/3559241a79b79ae663ec6e3d9b75d469967b383b: cannot open (No such file or directory)
[root@oxy-dev ~]# qemu-img rebase -b /tmp/3559241a79b79ae663ec6e3d9b75d469967b383a /opt/stack/data/nova/instances/94864a64-ebf8-45e6-a777-615921216a0a/disk
qemu-img: Could not open '/opt/stack/data/nova/instances/94864a64-ebf8-45e6-a777-615921216a0a/disk': Could not open file: No such file or directory
[root@oxy-dev ~]#
qemu-img version 1.5.3
OS: RHEL7 - 3.10.0-229
libvirtd (libvirt) 1.2.8
I'm pretty sure this is working as intended.
If you observe the code, qemu-img first opens filename. When qemu opens a file, it needs full access to it's chain of backing files - Hence, if the old backing file does not exist, opening filename fails.
(Not an active qemu dev, just passing through)
The full story is that in 2015, qemu probably did not note that it failed to open the overlay (<filename>) because it failed to open the backing file. It does that, now, though:
$ qemu-img rebase -b new.qcow2 top.qcow2
qemu-img: Could not open 'top.qcow2': Could not open backing file: Could not open 'base.qcow2': No such file or directory
So that should be a fix.
Max
What to do if the old file has been moved?
Say the backing file was /path/to/os.qcow2 and it was moved to /new/path/to/os.qcow2.
How can we tell snapshot.qcow2 to update the backing file from /path/to/os.qcow2 to /new/path/to/os.qcow2?
|