Изменение 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 (противоположность этому).