![如何从 CentOS-7-x86_64-Minimal-1511.iso 挂载 /dev/sda 分区?](https://linux22.com/image/80090/%E5%A6%82%E4%BD%95%E4%BB%8E%20CentOS-7-x86_64-Minimal-1511.iso%20%E6%8C%82%E8%BD%BD%20%2Fdev%2Fsda%20%E5%88%86%E5%8C%BA%EF%BC%9F.png)
我需要一些帮助来弄清楚如何在 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
。