Apakah ada cara untuk mengubah id volume file .iso dari baris perintah?

8

Saya memiliki .isofile di linux dan telah berusaha menemukan cara untuk mengubah volume id tanpa harus membuat ulang .isofile. Sebagian besar alat pembuat seperti mkisofsmenyediakan saklar untuk mengatur volume (-V)misalnya. Namun saya tidak tahu bagaimana cara mengubahnya pada .isofile yang sudah ada sebelumnya .

Untuk klarifikasi, bit yang saya coba ubah adalah Volume id:string ini . Berikut ini contoh dump dari perintah 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
sumber

Jawaban:

11

ID Volume selalu disimpan pada offset 0x8028 sebagai string ASCII 32 byte. Edit di tempatnya.

#!/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]);

Tes - (isovolid.pl adalah nama skrip di atas):

$ 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
sumber
Saya ingin menambahkan bahwa jika ISO juga mengandung sistem file Joliet id volume dapat digunakan dari yang itu. Dalam kasus saya itu disimpan di offset 0x8828 di UTF-16. Saya menambahkan dua baris berikut untuk mengubah id itu juga: mencari $ file, 0x8828,0; binmode ($ file, ": encoding (utf-16be)"); printf $ file "% -16.16s", uc ($ ARGV [1]);
Elrohir
2

xorriso dapat melakukan ini:

$ 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'
$ 
buta huruf
sumber