0

有没有办法修改 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 身份运行的解决方案,但我正在寻找可以作为普通用户运行的东西。

挂载 qcow 作为设备

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

然后从更改 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
4

1 回答 1

0

您可以使用 libguestfs API guestfs_utimens执行 atime 和 mtime 。但是 ctime 不能用 libguestfs 设置,主要是因为在 Linux 中似乎没有“好”的方法来做到这一点。您可以将该debugfs方法编码为新的 libguestfs API(或使用调试后门)。或者,如果您的图像是原始文件系统(不是 qcow2),您可以debugfs直接在其上运行,然后使用 guestfs 上传 API(与相反)将原始文件系统复制到最终图像中。

于 2017-11-22T22:17:18.717 回答