Hi,

On 5/24/25 11:24 PM, Thomas Schmitt wrote:
Just to be sure: Was there any difference in the arguments of your
grub-mkrescue run in your initial post and the grub-mkrescue run
which produced /tmp/grub.hAhUTa, except the -o paths ?

no difference, the faulty iso with duplicates was the result of "grub-mkrescue -o 
grub.iso", while the temporary directory without duplicates was the result of 
"grub-mkrescue -o /does_not_exist/output.iso"


If there was no significant difference in the arguments then the
creation of the .mo~ files would have to happen while xorriso is
already running. Quite unlikely ... normally.

Back to source code studying.
I see that grub_install_copy_files() is called multiple times if more
than one of GRUB_INSTALL_PLATFORM_I386_PC,
GRUB_INSTALL_PLATFORM_I386_EFI, or GRUB_INSTALL_PLATFORM_X86_64_EFI
is configured.

So can it be that your /tmp filesystem has the habit to keep backup
copies when files are overwritten ?
(But why would that not have happened with the interrupted run ?)

Check this - tried stracing grub-mkrescue:

renergy ~ # strace -o gentoo-grub-mkrescue.strace grub-mkrescue -o grub.iso
xorriso 1.5.6 : RockRidge filesystem manipulator, libburnia project.

Drive current: -outdev 'stdio:grub.iso'
Media current: stdio file, overwriteable
Media status : is blank
Media summary: 0 sessions, 0 data blocks, 0 data,  129g free
Added to ISO image: directory '/'='/tmp/grub.Y1wajm'
xorriso : UPDATE :     982 files added in 1 seconds
xorriso : UPDATE :     982 files added in 1 seconds
xorriso : NOTE : Copying to System Area: 512 bytes from file 
'/usr/lib/grub/i386-pc/boot_hybrid.img'
ISO image produced: 13984 sectors
Written to medium : 13984 sectors at LBA 0
Writing to 'stdio:grub.iso' completed successfully.

renergy ~ # grep de.mo~ gentoo-grub-mkrescue.strace
rename("/tmp/grub.Y1wajm/boot/grub/locale/de.mo", 
"/tmp/grub.Y1wajm/boot/grub/locale/de.mo~") = 0
unlink("/tmp/grub.Y1wajm/boot/grub/locale/de.mo~") = 0
rename("/tmp/grub.Y1wajm/boot/grub/locale/de.mo", 
"/tmp/grub.Y1wajm/boot/grub/locale/de.mo~") = 0
newfstatat(AT_FDCWD, "/tmp/grub.Y1wajm/boot/grub/locale/de.mo~", 
{st_mode=S_IFREG|0644, st_size=150650, ...}, AT_SYMLINK_NOFOLLOW) = 0
newfstatat(AT_FDCWD, "/tmp/grub.Y1wajm/boot/grub/locale/de.mo~", 
{st_mode=S_IFREG|0644, st_size=150650, ...}, 0) = 0
unlink("/tmp/grub.Y1wajm/boot/grub/locale/de.mo~") = 0
renergy ~ #


So it is grub-mkrescue that is creating the .mo~ files, but then deletes them; this cycle 
(which I do not like, but should be ok) repeats twice, or rather should repeat twice - 
but the actual result is the file is there, despite last syscall regarding it being 
"unlink"

renergy ~ # mount grub.iso /mnt/iso -o ro
renergy ~ # ls -l /mnt/iso/boot/grub/locale/de.mo~
-r--r--r-- 1 root root 150650 May 25 05:55 /mnt/iso/boot/grub/locale/de.mo~
renergy ~ #



Best regards,
Adam

Reply via email to