更改qcow2 st_ctime

时间:2017-11-22 17:23:36

标签: qemu guest-executable

有没有办法修改qcow2图像的st_ctime_sec属性?

我正在尝试使用可重现的qcow2构建,最终目标是我可以重新创建qcow2文件,并且仍然具有字节相同内容的字节。

我觉得ctime在原版和我的复制版本之间存在差异。

使用 virt-diff -a orig.qcow2 -A rebuild.qcow2 --atime --dir-times --times 我只会得到如下差异:

已更改:st_ctime_sec

  • d 0755 4096 2017-11-21 22:35:00 2017-11-21 22:35:00 2017-11-22 02:34:36 / boot / efi / EFI
  • d 0755 4096 2017-11-21 22:35:00 2017-11-21 22:35:00 2017-11-22 11:10:48 / boot / efi / EFI

我找到了一个以root身份运行的解决方案,但我正在寻找可以作为普通用户运行的东西。

来自mount qcow as device

 modprobe nbd max_part=8
 qemu-nbd -c /dev/nbd0 guest.img
 mount /dev/nbd0p1 /mnt/guest

然后从change ctime

debugfs -w  /dev/sda1 < changes

其中更改包含

之类的行
set_inode_field /grub2/locale/ast.mo ctime 201001010101
set_inode_field /grub2/locale/ca.mo ctime 201001010101
set_inode_field /grub2/locale/da.mo ctime 201001010101
set_inode_field /grub2/locale/de.mo ctime 201001010101

1 个答案:

答案 0 :(得分:0)

您可以使用libguestfs API guestfs_utimens执行atime和mtime。但是,libtimestfs无法设置ctime,主要是因为it appears there is not a "good" way to do it in Linux。您可以将debugfs方法编码为新的libguestfs API(或使用调试后门)。或者,如果您的映像是原始文件系统(而不是qcow2),您可以直接在其上运行debugfs,然后使用guestfs上传API(与this相反)将原始文件系统复制到最终映像中