Linux

有沒有辦法從命令行更改 .iso 文件卷 ID?

  • September 1, 2018

.iso在 linux 下有一個文件,並且一直在嘗試找到一種無需重新創建.iso文件即可更改卷 ID 的方法。例如,大多數創作工具mkisofs都提供了用於設置音量的開關(-V)。但是我不知道如何在預先存在的.iso文件上更改它。

為澄清起見,我試圖改變的是這個Volume id:字元串。這是 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

卷 ID 始終以 32 字節 ASCII 字元串形式儲存在偏移量 0x8028 處。就地編輯它。

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

測試 - (isovolid.pl 是上述腳本的名稱):

$ 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

引用自:https://serverfault.com/questions/361474