我必须安装 .img 文件,但我不知道它是什么类型的 .img。我怎样才能知道它是什么类型的 .img 文件?
# mount -t auto -o ro,loop gmapsupp.img /mnt/iso/
mount: you must specify the filesystem type
# file -k gmapsupp.img
gmapsupp.img: x86 boot sector, code offset 0x0
#
答案1
尝试运行命令fdisk -l <img file>
。通常,如果.img
文件是来自 KVM 虚拟机的整个磁盘,那么它们在技术上就是虚拟磁盘。
例子
我有一个 CentOS KVM 虚拟机,使用以下命令显示如下file
:
$ file centostest.img
centostest.img: x86 boot sector; partition 1: ID=0x83, active, starthead 1, startsector 63, 208782 sectors; partition 2: ID=0x8e, starthead 0, startsector 208845, 20755980 sectors, code offset 0x48
用它运行fdisk
:
$ sudo /sbin/fdisk -lu /kvm/centostest.img
last_lba(): I don't know how to handle files with mode 81ed
You must set cylinders.
You can do this from the extra functions menu.
Disk /kvm/centostest.img: 0 MB, 0 bytes
255 heads, 63 sectors/track, 0 cylinders, total 0 sectors
Units = sectors of 1 * 512 = 512 bytes
Device Boot Start End Blocks Id System
/kvm/centostest.img1 * 63 208844 104391 83 Linux
/kvm/centostest.img2 208845 20964824 10377990 8e Linux LVM
Partition 2 has different physical/logical endings:
phys=(1023, 254, 63) logical=(1304, 254, 63)
如果您想安装这些分区之一,可以按以下步骤操作:
fdisk(柱面输出)- 块大小为 512 字节,起始块为 63。
- 偏移量为 512 * 63 = 32256。
- 块大小为 512 字节,起始块为 1。
- 偏移量为 512 * 1 = 512。
所以挂载命令是:
在气缸中$ mount -o loop,offset=32256 centostest.img /mnt/tmp
要挂载另一个分区 (512 * 208845 = 106928640):
$ mount -o loop,offset=106928640 centostest.img /mnt/tmp
在部门
$ mount -o loop,offset=512 centostest.img /mnt/tmp
要挂载另一个分区 (512 * 14 = 7168):
$ mount -o loop,offset=7168 centostest.img /mnt/tmp
笔记
仅当 mount 可以确定您尝试挂载的“分区”内的文件系统类型时,这才有效。您可能需要包含-t auto
,或者具体说明mount
就是这样-t ext4
。
参考
答案2
用于parted
识别偏移值。
root@mysystem:~/# parted myimage.img
GNU Parted 2.3
Using /root/myimage.img
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) u
Unit? [compact]? B
(parted) print
Model: (file)
Disk /root/myimage.img: 8589934592B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 32256B 254983679B 254951424B primary ext3 boot
2 254983680B 1274918399B 1019934720B primary linux-swap(v1)
3 1274918400B 3323013119B 2048094720B primary ext3
4 3323013120B 8587192319B 5264179200B primary ext3
(parted)
现在您有了偏移值,您可以使用它们来挂载文件系统。
# mount -o loop,offset=32256 myimage.img /mnt/disk1
# mount -o loop,offset=1274918400 myimage.img /mnt/disk2
# mount -o loop,offset=3323013120 myimage.img /mnt/disk3
答案3
挂载 img 文件的另一种非常简单的方法是使用kpartx
工具(来自kpartx
包)。解释来自kpartx 手册页(使用 sudo/root 运行):
要挂载原始磁盘映像中的所有分区:
kpartx -av disk.img
这将输出如下行:
loop3p1 : 0 20964762 /dev/loop3 63
Loop3p1 是 /dev/mapper 下的设备文件的名称,您可以使用它来访问分区,例如对其进行 fsck:
fsck /dev/mapper/loop3p1
将该设备安装在/mnt
:
mount /dev/mapper/loop3p1 /mnt
When you're done, you need to remove the devices: kpartx -d disk.img
答案4
该命令的现代版本file
以比 fdisk 或 pared 更方便的方式报告起始扇区:
file $img Armbian_jw.img: DOS/MBR boot sector; partition 1 : ID=0x83, start-CHS (0x40,0,1), end-CHS (0x3ff,3,32), startsector 8192, 2883584 sectors
这一单行输出可以编写如下脚本:
startsector=$(file $img | sed -n -e 's/.* startsector *\([0-9]*\),.*/\1/p')
offset=$(expr $startsector '*' 512)
echo $offset
4194304
sudo mount -o loop,offset=$offset $img /mnt