Изменение qcow2 st_ctime

Есть ли способ изменить атрибуты st_ctime_sec для изображения qcow2?

Я пытаюсь создать воспроизводимую сборку 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

1 ответ

Вы можете сделать atime и mtime с помощью libguestfs API guestfs_utimens. Однако ctime не устанавливается с помощью libguestfs, в основном потому, что кажется, что в Linux нет "хорошего" способа сделать это. Вы могли бы закодировать debugfs подход в качестве нового API libguestfs (или использовать бэкдор отладки). Или, если ваш образ является необработанной файловой системой (не qcow2), вы можете просто запустить debugfs непосредственно на него, а затем скопируйте необработанную файловую систему в конечное изображение с помощью API загрузки guestfs (противоположность этому).

Другие вопросы по тегам