如何从 CentOS-7-x86_64-Minimal-1511.iso 挂载 /dev/sda 分区?

如何从 CentOS-7-x86_64-Minimal-1511.iso 挂载 /dev/sda 分区?

我需要一些帮助来弄清楚如何在 CentOS Linux 版本 7.2.1511(核心)VM 上从 CentOS-7-x86_64-Minimal-1511.iso 挂载 /dev/sda 设备的分区 1(xfs、boot)。图像中有多个设备。该分区位于第二个设备中。第一个设备是 ISO 映像本身。

一些系统信息

$ cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 
$ uname -a
Linux localhost.localdomain 3.10.0-327.3.1.el7.x86_64 #1 SMP Wed Dec 9 14:09:15 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
$ whoami
root

这就是我到目前为止所做的。

步骤 1. 下载并验证 ISO

$ wget http://ftp.riken.jp/Linux/centos/7.2.1511/isos/x86_64/CentOS-7-x86_64-Minimal-1511.iso
<output snipped>
$ ls -l CentOS-7-x86_64-Minimal-1511.iso 
-rw-rw-r--. 1 jlinoff jlinoff 632291328 Dec  9 15:03 CentOS-7-x86_64-Minimal-1511.iso
$ md5sum CentOS-7-x86_64-Minimal-1511.iso 
88c0437f0a14c6e2c94426df9d43cd67  CentOS-7-x86_64-Minimal-1511.iso
$ # matches 88c0437f0a14c6e2c94426df9d43cd67 from http://ftp.riken.jp/Linux/centos/7.2.1511/isos/x86_64/md5sum.txt

步骤2.使用parted查看可用设备

$ parted CentOS-7-x86_64-Minimal-1511.iso print devices
/home/jlinoff/work/iso/CentOS-7-x86_64-Minimal-1511.iso (632MB)
/dev/sda (21.5GB)
/dev/mapper/centos-swap (2147MB)
/dev/mapper/centos-root (18.8GB)
/dev/sr0 (59.0MB)

步骤 3. 查看分区

$ parted CentOS-7-x86_64-Minimal-1511.iso select /dev/sda unit B print
Using /dev/sda
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 21474836480B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start       End           Size          Type     File system  Flags
 1      1048576B    525336575B    524288000B    primary  xfs          boot
 2      525336576B  21474836479B  20949499904B  primary               lvm

步骤4.根据偏移量挂载分区1

$ mkdir -m 0777 /tmp/foo
$ mount -t xfs -o loop,ro,offset=1048576 CentOS-7-x86_64-Minimal-1511.iso /tmp/mnt
mount: wrong fs type, bad option, bad superblock on /dev/loop0,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.

步骤 5. 尝试找出正确的偏移量

很明显,偏移量是错误的,因此我尝试通过合并前一个设备的端点,根据前面的文件系统来找出它:

$ parted CentOS-7-x86_64-Minimal-1511.img select /home/jlinoff/work/iso/CentOS-7-x86_64-Minimal-1511.img unit B print
Using /home/jlinoff/work/iso/CentOS-7-x86_64-Minimal-1511.img
Model:  (file)
Disk /home/jlinoff/work/iso/CentOS-7-x86_64-Minimal-1511.img: 632291328B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start    End       Size      Type     File system  Flags
 2      196608B  6615039B  6418432B  primary

$ bc
1048576 + 6615039
7663615

我尝试了 offset=7663615 和 offset=6615039。同样的错误。

这是所有设备的完整列表。

$ parted CentOS-7-x86_64-Minimal-1511.iso unit B print all
Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0
has been opened read-only.
Error: /dev/sr0: unrecognised disk label
Model:  (file)
Disk /home/jlinoff/work/iso/CentOS-7-x86_64-Minimal-1511.iso: 632291328B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start    End       Size      Type     File system  Flags
 2      196608B  6615039B  6418432B  primary


Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 21474836480B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start       End           Size          Type     File system  Flags
 1      1048576B    525336575B    524288000B    primary  xfs          boot
 2      525336576B  21474836479B  20949499904B  primary               lvm


Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/centos-swap: 2147483648B
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags: 

Number  Start  End          Size         File system     Flags
 1      0B     2147483647B  2147483648B  linux-swap(v1)


Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/centos-root: 18756927488B
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags: 

Number  Start  End           Size          File system  Flags
 1      0B     18756927487B  18756927488B  xfs

我究竟做错了什么?

答案1

losetup(8)有一个选项(-P--partscan)可以扫描映像文件内的分区,然后将它们实际映射到虚拟块设备,这样就可以代替:

$ losetup -a
/dev/loop0: []: yourisoimage.iso

...您将能够看到引用分区的其他循环设备:

$ ls /dev/loop*
/dev/loop0
/dev/loop0p1
/dev/loop0p2
/dev/loop-control

使用以下命令自动分配新loopX设备并扫描其他分区:

$ losetup -f -P yourisoimage.iso

然后挂载对应的loop即可设备没有-o loop安装选项。


编辑: 阅读下面的评论后,我认为有必要进行一些澄清。


我认为这里发生的事情是你正在鸡舍里寻找一只兔子。

您在上面的第二步中看到的是以下列表全部系统中的设备,而不仅仅是 ISO 文件上的分区列表。您的命令包含一个虚假参数(ISO 文件的名称),并且parted只是列出它在任何设备上看到的每个分区。

您可能实际上想做的是/dev/sda2安装身体的/dev/sda与 CentOS ISO 文件完全无关的磁盘。

此外,由于该分区不是文件系统分区,而是物理体积(以 LVM 闻名),其上没有直接存在的文件系统。

为了能够访问其内容,您应该使用pvscan发现系统中的所有物理卷,vgchange -ay激活所有卷组,然后vgs查看lvs卷组和逻辑卷的列表。

内容是在一个特殊的名称下访问的,该名称为/dev/<vgname>/<lvname>,因此对于名为 的卷组foo和名为 的逻辑卷bar,名称将为/dev/foo/bar

你所安装的东西是因此/dev/foo/bar而不是/dev/sda2

相关内容