¿Hay alguna manera de cambiar una identificación de volumen de archivos .iso desde la línea de comandos?

8

Tengo un .isoarchivo en Linux y he estado tratando de encontrar una manera de cambiar la identificación del volumen sin tener que volver a crear el .isoarchivo. La mayoría de las herramientas de creación, como por ejemplo, mkisofsproporcionan un interruptor para configurar el volumen (-V). Sin embargo, no puedo entender cómo cambiarlo en un .isoarchivo preexistente .

Para aclarar, el bit que estoy tratando de cambiar es esta Volume id:cadena. Aquí hay un ejemplo de volcado del comando isoinfo.

% isoinfo -d -i /usr/share/virtualbox/VBoxGuestAdditions.iso 
CD-ROM is in ISO 9660 format
System id: Win32
Volume id: VBOXADDITIONS_4.1.8_75467
Volume set id: 
Publisher id: 
Data preparer id: 
Application id: MKISOFS ISO 9660/HFS FILESYSTEM BUILDER & CDRECORD CD-R/DVD CREATOR (C) 1993 E.YOUNGDALE (C) 1997 J.PEARSON/J.SCHILLING
Copyright File id: 
Abstract File id: 
Bibliographic File id: 
Volume set size is: 1
Volume set sequence number is: 1
Logical block size is: 2048
Volume size is: 22203
Joliet with UCS level 3 found
Rock Ridge signatures version 1 found
slm
fuente

Respuestas:

11

La ID de volumen siempre se almacena en el desplazamiento 0x8028 como una cadena ASCII de 32 bytes. Edítalo en su lugar.

#!/usr/bin/perl
use strict;
use warnings;

die "Use: $0 <iso_file> <new volume id>\n" unless @ARGV == 2;
open my $file, "+<", $ARGV[0] or die "Cannot open: $!";
seek $file, 0x8028,0;
printf $file "%-32.32s", uc($ARGV[1]);

Prueba - (isovolid.pl es un nombre del script anterior):

$ genisoimage -V A123456798012345678901234567890X -o aaa.iso *
$ isoinfo -d -i aaa.iso | grep 'Volume id:'
Volume id: A123456798012345678901234567890X
$ ./isovolid.pl aaa.iso NEWVOLUMEID
$ isoinfo -d -i aaa.iso | grep 'Volume id:'
Volume id: NEWVOLUMEID
Kupson
fuente
Me gustaría agregar que en caso de que el ISO contenga adicionalmente un sistema de archivos Joliet, la identificación del volumen se puede usar desde ese. En mi caso, se almacenó en el desplazamiento 0x8828 en UTF-16. Agregué las siguientes dos líneas para cambiar esa identificación también: seek $ file, 0x8828,0; binmode ($ archivo, ": codificación (utf-16be)"); printf $ archivo "% -16.16s", uc ($ ARGV [1]);
Elrohir
2

xorriso puede hacer esto:

$ xorriso -dev ./VBoxGuestAdditions.iso -volid 'YourLable' -commit
xorriso 1.4.6 : RockRidge filesystem manipulator, libburnia project.

xorriso : NOTE : Loading ISO image tree from LBA 0
xorriso : UPDATE : 32 nodes read in 1 seconds
Drive current: -dev './VBoxGuestAdditions.iso'
Media current: stdio file, overwriteable
Media status : is written , is appendable
Media summary: 1 session, 29111 data blocks, 56.9m data, 20.3g free
Volume id    : 'VBOXADDITIONS_5.1.34_121010'
xorriso : WARNING : -volid text does not comply to ISO 9660 / ECMA 119 rules
ISO image produced: 27 sectors
Written to medium : 192 sectors at LBA 29120
Writing to './VBoxGuestAdditions.iso' completed successfully.

xorriso : NOTE : Re-assessing -outdev './VBoxGuestAdditions.iso'
xorriso : NOTE : Loading ISO image tree from LBA 0
xorriso : UPDATE : 32 nodes read in 1 seconds
Drive current: -dev './VBoxGuestAdditions.iso'
Media current: stdio file, overwriteable
Media status : is written , is appendable
Media summary: 1 session, 29147 data blocks, 56.9m data, 20.3g free
Volume id    : 'YourLable'
$ 
analfabeto
fuente