2017-11-22 3 views
0

Gibt es eine Möglichkeit, die Attribute st_ctime_sec für ein Bild qcow2 zu ändern?Ändern von qcow2 st_ctime

Ich versuche, eine reproduzierbare qcow2 Build zu haben, mit dem Ziel, dass ich qcow2 Dateien neu erstellen kann und immer noch Byte für Byte identische Inhalte haben.

Ich bin unten, um die Ctime zu haben, die zwischen meinem ursprünglichen und meinem Reproduktionsaufbau unterschiedlich ist.

Mit virt-diff -a orig.qcow2 -A rebuild.qcow2 --atime --dir-mal --times ich nur bekommen Unterschiede wie:

geändert: 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

Ich habe eine Lösung gefunden, die als root funktioniert, aber ich suche nach etwas, das als normaler Benutzer ausgeführt werden kann.

Von mount qcow as device

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

Dann von change ctime

debugfs -w /dev/sda1 < changes 

wo Änderungen enthält Zeilen wie

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 

Antwort

0

Sie können mit dem libguestfs API guestfs_utimens atime und mtime tun. Ctime ist jedoch nicht mit libguestfs einstellbar, hauptsächlich weil it appears there is not a "good" way to do it in Linux. Sie können den Ansatz debugfs als neue libguestfs-API kodieren (oder die Debug-Backdoor verwenden). Oder wenn Ihr Image ein Raw-Dateisystem ist (nicht qcow2), können Sie einfach debugfs direkt darauf ausführen und dann das RAW-Dateisystem mit Hilfe der guestfs-Upload-API (das Gegenteil von this) in das endgültige Image kopieren.