1. Introduction
An ISO file is a disk image file that contains the entire contents of a CD, DVD, or even a Blu-ray disc. Various tools are available to access these contents under Linux.
In this tutorial, we’ll explore different methods for extracting ISO images in Linux. We’ll also examine their execution time to find out which one is the fastest.
2. Using mount
mount is a built-in tool in Linux that can be used to mount ISO files to access their contents.
Firstly, let’s make a directory:
$ mkdir /mnt/extract
Secondly, we’ll mount it as a loop device:
$ mount -o loop IsoFile.iso /mnt/extract/
Here, we use the -o flag of mount to specify the loop option. Now, the entire contents of our ISO file are accessible in the specified path.
3. Using 7z
7z is a file archiver that can extract contents from ISO files.
It’s part of the p7zip package. Let’s install it via yum:
$ yum install p7zip p7zip-plugins
Now, we can use the x option to extract a file. We’ll extract an ISO in the current directory:
$ 7z x IsoTest.iso
7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,2 CPUs Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz (906EA),ASM,AES-NI)
Scanning the drive for archives:
1 file, 4980736 bytes (4864 KiB)
Extracting archive: IsoTest.iso
--
Path = IsoTest.iso
Type = FAT
Physical Size = 4980736
File System = FAT16
Cluster Size = 1024
Free Space = 2783232
Headers Size = 61440
Sector Size = 512
ID = 3481680618
Everything is Ok
Folders: 24
Files: 29
Size: 2119946
Compressed: 4980736
Firstly, the 7z command scans the ISO file. Then, it shows the path, the used filesystem, and other details. Next, we can see the message Everything is Ok and the number of extracted files and folders with sizes.
4. Using bsdtar
bsdtar is a version of the tar command that supports additional archive formats. It’s included in a number of Linux distributions by default.
If required, we can still install it via our package manager:
$ yum install bsdtar
Then, we can extract an ISO file:
$ bsdtar -xf IsoFile.iso
As a result, we extracted the ISO file in the current directory. In this case, the x and f options were used. Among them, -x is for extracting to disk, while -f supplies the file we want to work with.
5. Using isoinfo
isoinfo can be used to extract all or specific files from ISO images. It just supports ISO-9660 (a filesystem for optical disc media).
It’s part of the genisoimage package. Let’s install it with yum:
$ yum install genisoimage
Once installed, we can list the content of an ISO file:
$ isoinfo -i myIsoFile.iso -l
Directory listing of /
d--------- 0 0 0 2048 Oct 28 2015 [ 29 02] .
d--------- 0 0 0 2048 Oct 28 2015 [ 29 02] ..
d--------- 0 0 0 2048 May 26 2013 [ 30 02] BOOT
---------- 0 0 0 96576 May 8 2022 [ 49 00] myFile.txt
Directory listing of /BOOT/
d--------- 0 0 0 2048 May 26 2013 [ 30 02] .
d--------- 0 0 0 2048 Oct 28 2015 [ 29 02] ..
---------- 0 0 0 11424857 May 8 2022 [ 49 00] CORE.GZ;1
d--------- 0 0 0 2048 Nov 30 2021 [ 31 02] ISOLINUX
---------- 0 0 0 5081088 May 8 2022 [ 5628 00] VMLINUZ.;1
...
We used the -i option to specify the ISO-9660 image. Moreover, the -l option runs the equivalent of ls -lR inside of an ISO file and produces the output.
We can see each directory listed separately. Then, we can extract files via -x and the file path:
$ isoinfo -i myIsoFile.iso -x myFile.txt > myExtractedFile.txt
In this example, we extracted myFile.txt to a new file named myExtractedFile.txt. We can only use this command to extract a file, not directories.
6. Using xorriso
xorriso is a utility that can be used to create, manipulate, and extract ISO files.
First, we’ll install it with our package manager:
$ yum install xorriso
Now, we can extract an ISO file:
$ xorriso -osirrox on -indev IsoFile.iso -extract / myExtractDirectory
xorriso 1.5.4 : RockRidge filesystem manipulator, libburnia project.
Copying of file objects from ISO image to disk filesystem is: Enabled
xorriso : NOTE : Loading ISO image tree from LBA 0
xorriso : UPDATE : 11 nodes read in 1 seconds
xorriso : NOTE : Detected El-Torito boot information which currently is set to be discarded
Drive current: -indev 'IsoFile.iso'
Media current: stdio file, overwriteable
Media status : is written , is appendable
Boot record : El Torito
Media summary: 1 session, 8264 data blocks, 16.1m data, 38.1g free
Volume id : 'Core'
xorriso : UPDATE : 9 files restored ( 16148k) in 1 seconds = 11.9xD
Extracted from ISO image: file '/'='/root/temp-01/myExtractDirectory'
To do so, we’ve used these options:
- osirrox on – enable the specific extension for the ISO filesystem
- indev – find the input file to extract
- extract iso_path disk_path – our actual command that extracts contents from iso_path to disk_path
As a result, we can see information about our media, the number of files, spent time, and others.
7. Measuring Times
In this section, we’re going to measure the total time taken by each command to find out which one is faster. We’ll use the time command for this. Moreover, we’ll skip the isoinfo command, as it can’t extract all ISO files.
Notably, the performance measurements in this section are based on a single run of each command. So, they may vary depending on various factors, including system configuration, hardware capabilities, and caching mechanisms. Hence, caching can play an important role in the results. Therefore, runs of the same commands may show different results if we don’t clear the cache and take other factors into account.
Let’s start with the mount command:
$ time (mount -o loop myIsoLive.iso /mnt/extract/ && cp -R /mnt/extract /home/newPath/)
...
real 0m9.260s
user 0m0.040s
sys 0m4.337s
The mount command only reads the filesystem’s header and doesn’t extract any data. Therefore, we combined the time taken for mounting with the time needed for copying the files from the mount point to another destination.
Afterward, we check the 7z command:
$ time 7z x myIsoLive.iso
...
real 0m4.897s
user 0m0.092s
sys 0m2.927s
Then, we can check bsdtar:
$ time bsdtar -xf myIsoLive.iso
...
real 0m5.653s
user 0m0.115s
sys 0m3.075s
Finally, we’ll measure the time of xorriso:
$ time xorriso -osirrox on -indev myIsoLive.iso -extract / myExtract
...
real 0m5.367s
user 0m0.549s
sys 0m2.866s
In the result, we can see the actual times after the real label. Therefore, by comparing these values, we can see that the 7z command seems quicker than the others.
8. Conclusion
In this article, we discussed various ways to extract an ISO file in Linux.
Sometimes we might prefer to use a built-in command instead of installing new tools, so we tested mount. In other cases, we just need to extract a single file from an ISO image, instead of extracting the entire image file, or just want to use another tool. For each case, we compared the performance by using the time command.