Bài viết này giới thiệu các bạn về cách mount tập tin ISO trong Linux trên hệ điều hành Linux.
1. Giới thiệu tập tin ISO
ISO(International Organization for Standardization) còn được gọi là hình ảnh ISO. Các tệp ISO thường được sử dụng để phân phối hệ điều hành. Hầu hết hệ điều hành linux mà khi chúng ta tải xuống sẽ có định dạng ISO. File ISO là một bản sao chính xác của dữ liệu sẽ được đặt vào một đĩa CD hay DVD.
Khi bạn tải tệp ISO của Linux, bạn sẽ thường ghi nó vào đĩa CD hoặc DVD dưới dạng hình ảnh ISO. Khi bạn đã ghi hình ảnh ISO trong CD hoặc DVD, bạn có thể khởi động hệ thống để cài đặt HĐH Linux.
2. Mount ISO image trên Linux
Khi chúng ta tải tệp *.iso từ một trang web (ví dụ:bản phân phối CentOS), chúng ta có thể xem nội dung của tệp iso mà không cần ghi dưới dạng iso vào CD hoặc DVD được thực hiện như bên dưới bằng cách sử dụng option loop:
mount -o loop
Ví dụ: Xem nội dung của tệp CentOS-7-x86_64-Minimal-1611.iso bằng cách sử dụng cú pháp mount -o loop
:
[root@test1 ~]# mkdir /tmp/mount
[root@test1 ~]# mount -o loop /root/CentOS-7-x86_64-Minimal-1611.iso /tmp/mount/
mount: /dev/loop0 is write-protected, mounting read-only
[root@test1 ~]# cd /tmp/mount
[root@test1 mount]# ls -l
total 94
-rw-r--r-- 1 root root 14 Dec 5 2016 CentOS_BuildTag
drwxr-xr-x 3 root root 2048 Dec 5 2016 EFI
-rw-r--r-- 1 root root 215 Dec 10 2015 EULA
-rw-r--r-- 1 root root 18009 Dec 10 2015 GPL
drwxr-xr-x 3 root root 2048 Dec 5 2016 images
drwxr-xr-x 2 root root 2048 Dec 5 2016 isolinux
drwxr-xr-x 2 root root 2048 Dec 5 2016 LiveOS
drwxrwxr-x 2 root root 57344 Dec 5 2016 Packages
drwxr-xr-x 2 root root 4096 Dec 6 2016 repodata
-rw-r--r-- 1 root root 1690 Dec 10 2015 RPM-GPG-KEY-CentOS-7
-rw-r--r-- 1 root root 1690 Dec 10 2015 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r-- 1 root root 2883 Dec 6 2016 TRANS.TBL
Lưu ý: Loop device là một thiết bị giả sẽ làm cho tệp iso có thể truy cập được. Nó cho phép chúng ta mount CD/DVD/ISO image và truy cập như một block device.
Sau khi đã mount để xem nội dung của tệp iso rồi, chúng ta có thể unmount ISO image. Để umount chúng ta thực hiện lệnh với cú pháp sau:
umount [Thư mục được mount]
Ví dụ: Umount ISO image trong thư mục được mount /tmp/mount
chúng ta thực hiện như sau:
umount /tmp/mount/
3. Mount ISO Image khi không là người dùng root
Nếu không phải là người dùng root chúng ta cũng có thể mount một tệp iso, ngay khi không có quyền sudo. Chúng ta sử dụng Udisk để mount.
Thực hiện cú pháp sau để có thể xem nội dung của tệp iso:
udisksctl loop-setup -f *.iso
Ví dụ: Mount file iso tại /home/CentOS-7-x86_64-Minimal-1611.iso
bằng lệnh udisksctl
như bên dưới:
[dang@test1 ~]$ udisksctl loop-setup -f /home/CentOS-7-x86_64-Minimal-1611.iso
Mapped file /home/CentOS-7-x86_64-Minimal-1611.iso as /dev/loop0.
[dang@test1 ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 32G 0 disk
├─sda1 8:1 0 512M 0 part [SWAP]
└─sda2 8:2 0 31.5G 0 part /
sr0 11:0 1 458K 0 rom
loop0 7:0 0 680M 0 loop /tmp/mnt
[dang@test1 ~]$ ls -l /tmp/mnt
total 94
-rw-r--r-- 1 root root 14 Dec 5 2016 CentOS_BuildTag
drwxr-xr-x 3 root root 2048 Dec 5 2016 EFI
-rw-r--r-- 1 root root 215 Dec 10 2015 EULA
-rw-r--r-- 1 root root 18009 Dec 10 2015 GPL
drwxr-xr-x 3 root root 2048 Dec 5 2016 images
drwxr-xr-x 2 root root 2048 Dec 5 2016 isolinux
drwxr-xr-x 2 root root 2048 Dec 5 2016 LiveOS
drwxrwxr-x 2 root root 57344 Dec 5 2016 Packages
drwxr-xr-x 2 root root 4096 Dec 6 2016 repodata
-rw-r--r-- 1 root root 1690 Dec 10 2015 RPM-GPG-KEY-CentOS-7
-rw-r--r-- 1 root root 1690 Dec 10 2015 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r-- 1 root root 2883 Dec 6 2016 TRANS.TBL
Sau khi đã xem nội dung của tệp iso rồi, chúng ta có thể unmount ISO image. Để umount chúng ta thực hiện lệnh với cú pháp sau:
udisksctl unmount -b [disk]
Ví dụ: Umount ISO image trong đĩa /dev/loop0
chúng ta thực hiện như sau:
[dang@test1 ~]$ udisksctl unmount -b /dev/loop0
Unmounted /dev/loop0.
4. Fix lỗi “iso is not a block device error”
Trong khi mount file iso, bạn có thể gặp lỗi sau:
mount: file.iso is not a block device (maybe try `-o loop'?)
Vấn đề:
[root@test1 ~]# mount /root/CentOS-7-x86_64-Minimal-1611.iso /tmp/mount/
mount: /root/CentOS-7-x86_64-Minimal-1611.iso is not a block device (maybe try `-o loop'?)
Chúng ta sẽ fix như sau:
Theo yêu cầu của lệnh mount, hãy sử dụng -o loop
làm tùy chọn.
[root@test1 ~]# mount /root/CentOS-7-x86_64-Minimal-1611.iso /tmp/mount/ -o loop
mount: /dev/loop1 is write-protected, mounting read-only
5. Cập nhật nội dung của ISO image
Nội dung của tệp ISO sẽ không thể được cập nhật sau khi tệp ISO được tạo. Cách duy nhất có thể thực hiện cập nhật chúng ta thực hiện các bước sau:
- Giải nén tất cả các tập tin từ iso.
- Cập nhật nội dung. Thêm hoặc xóa bất kỳ tệp riêng lẻ nào trong tệp iso.
- Tạo một iso khác với các tập tin cập nhật.
Ví dụ: Cách add file vào ISO image chúng ta thực hiện như sau:
[root@test1 ~]# mkdir /tmp/mount/
[root@test1 ~]# mount -o loop /location/of/ISO/file.iso /tmp/mount/
[root@test1 ~]# ls -l /tmp/mount/
total 94
-rw-r--r-- 1 root root 14 Dec 5 2016 CentOS_BuildTag
drwxr-xr-x 3 root root 2048 Dec 5 2016 EFI
-rw-r--r-- 1 root root 215 Dec 10 2015 EULA
-rw-r--r-- 1 root root 18009 Dec 10 2015 GPL
drwxr-xr-x 3 root root 2048 Dec 5 2016 images
drwxr-xr-x 2 root root 2048 Dec 5 2016 isolinux
drwxr-xr-x 2 root root 2048 Dec 5 2016 LiveOS
drwxrwxr-x 2 root root 57344 Dec 5 2016 Packages
drwxr-xr-x 2 root root 4096 Dec 6 2016 repodata
-rw-r--r-- 1 root root 1690 Dec 10 2015 RPM-GPG-KEY-CentOS-7
-rw-r--r-- 1 root root 1690 Dec 10 2015 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r-- 1 root root 2883 Dec 6 2016 TRANS.TBL
[root@test1 ~]# cp /home/efiboot1.img /tmp/mount/images/
[root@test1 ~]# mkdir /home/linux
[root@test1 ~]# mkisofs -o /home/linux/example.iso /tmp/mount/