dd if=/dev/sda of=/media/external_media/sda.img
制作了整个磁盘的映像,现在的问题是我想挂载该磁盘上的ext4文件系统,但
<
mount -t ext4 -o loop /media/external_media/sda.img /media/sda_image
显然会出现超级块错误,因为映像包含整个磁盘(MBR,其他分区),而不仅仅是我需要的分区。所以我想我应该找到一种使磁盘映像显示在
/dev/
文件夹中的方法... 有人知道怎么做吗?总是
dd
将映像返回到原始磁盘,但这会非常不方便(我更新了操作系统,并希望保持原样)#1 楼
获取图像的分区布局$ sudo fdisk -lu sda.img
...
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
...
Device Boot Start End Blocks Id System
sda.img1 * 56 6400000 3199972+ c W95 FAT32 (LBA)
计算从图像开始到分区开始的偏移量
扇区大小*开始= (在这种情况下)512 * 56 = 28672
使用偏移量将其安装在/ dev / loop0上/ dev / loop0。您可以将其固定,安装等
sudo losetup -o 28672 /dev/loop0 sda.img
卸载
sudo fsck -fv /dev/loop0
sudo mount /dev/loop0 /mnt
#2 楼
Ubuntu 16.04的更新:使用新的losetup
,现在更容易了: 一个简单的解决方案是使用kpartx:它将找出分区布局并将每个映射到块设备。之后,您要做的就是安装所需的磁盘。
打开终端,找到磁盘映像,然后输入以下命令:
sudo losetup -Pf disk_image.raw
这在
loop0p1
下创建了loop0p2
和/dev/mapper
。从输出中,您可以看到分区的大小,这有助于您识别它们。您可以通过以下方式安装所需的组件: br /> 完成后,卸下已安装的内容并删除设备映射:
$ sudo kpartx -av disk_image.raw
add map loop0p1 (252:2): 0 3082240 linear /dev/loop0 2048
add map loop0p2 (252:3): 0 17887232 linear /dev/loop0 3084288
评论
出色的答案,快速又轻松,避免乘法步骤很不错
–古怪的长老
2014年5月13日19:11
sudo apt-get install kpartx-获取对kpartx的访问。我认为帖子开头的kpartx链接是一个“陷阱”。暗示安装软件的链接是禁止的。
– Hannu
2014年7月31日在18:26
@Hannu,与Software Center集成的链接是askubuntu的一种常见做法,尽管在这种特殊情况下,可以添加典型图标并应更新URL。
–乔尼
14年8月8日在8:46
仅供参考,Lostup -Pf ..命令将创建仍需要挂载的设备,例如/ dev / loopXpY。您可以通过查看Lostup命令的输出找到X。 Y是分区号。
–枪类
18/12/21在23:42
还要将--show添加到Lostup命令,如@Ludovic Ronsin在此处所说(askubuntu.com/a/496576/327339),这样您就可以看到正在创建哪个循环设备号。
–加百利·斯台普斯
19年7月29日在6:59
#3 楼
编辑:与util-linux> = 2.21一起使用。在撰写本文时,ubuntu仅附带2.20版本从man losttup:
-P, --partscan
force kernel to scan partition table on newly created loop device
所以只需运行
$ sudo losetup -f --show -P /path/to/image.img
在第一个未使用的循环设备上为磁盘映像的每个分区创建设备节点,并将其打印到stdout。
如果使用
/dev/loop0
设备,它将至少创建/dev/loop0p1
能够照常安装。评论
在哪里可以找到此版本的Lostup?我在Ubuntu 14.04中拥有的那个有一个自2003年7月以来的联机帮助页(util-linux),没有用于扫描分区的-P选项(或其他任何选项)。
– Hannu
2014年7月31日在18:26
抱歉,我犯了一个错误,我在Arch Linux上一直使用此选项,该选项随附了较新版本的util-linux软件包。似乎Ubuntu不幸地停留在2012年1月发布的2.20.1版本上! --partscan选项已在util-linux 2.21中引入
–路多维奇·朗森(Ludovic Ronsin)
2014年8月4日15:09
好吧,gnome-disks可以选择安装磁盘映像及其分区。 (<-用于安装和bash /终端使用,短划线磁盘也找到它)。
– Hannu
2014年8月4日15:35
这应该是公认的答案...
–matthid
15年4月23日在12:54
@matthid甚至可以更改已接受的答案吗?这很好(而且kpartx答案实际上取决于该版本的Lostup),但比接受的答案快了近三年,当时是这样做的方法。
–澳大利亚
15/12/26在23:10
#4 楼
尝试gnome-disk-image-mounter
:gnome-disk-image-mounter sda.img
不需要
sudo
。它将像USB驱动器一样安装在/media/your_user_name/partition_name
上。评论
在16.04上运行良好。我刚刚安装了新的18.04,并且该工具要求输入sudo密码才能访问/ dev / loopXX虚拟设备:(
–洛朗
18年6月28日在23:36
#5 楼
losetup -P
自动化losetup -P
是从Ubuntu 16.04开始的最佳方法,如https://askubuntu.com/a/496576/52975所述,以下是实现进一步自动化的功能。用法:$ los my.img
/dev/loop0
/mnt/loop0p1
/mnt/loop0p2
$ ls /mnt/loop0p1
/whatever
/files
/youhave
/there
$ sudo losetup -l
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO
/dev/loop1 0 0 0 0 /full/path/to/my.img
$ # Cleanup.
$ losd 0
$ ls /mnt/loop0p1
$ ls /dev | grep loop0
loop0
来源:
los() (
img=""
dev="$(sudo losetup --show -f -P "$img")"
echo "$dev"
for part in "$dev"?*; do
if [ "$part" = "${dev}p*" ]; then
part="${dev}"
fi
dst="/mnt/$(basename "$part")"
echo "$dst"
sudo mkdir -p "$dst"
sudo mount "$part" "$dst"
done
)
losd() (
dev="/dev/loop"
for part in "$dev"?*; do
if [ "$part" = "${dev}p*" ]; then
part="${dev}"
fi
dst="/mnt/$(basename "$part")"
sudo umount "$dst"
done
sudo losetup -d "$dev"
)
循环模块max_part config
在16.04之前,这是一种不错的方法。
loop
是内核模块,内置于Ubuntu 14.04的内核中。如果配置正确,Linux会自动拆分设备
cat /sys/module/loop/parameters/max_part
说明了
loop
设备可以生成多少个分区。在Ubuntu 14.04上默认为
0
,这就是为什么不自动发生拆分。要更改它,我们可以添加:
options loop max_part=31
到
/etc/modprobe
中的文件,或:GRUB_CMDLINE_LINUX="loop.max_part=31"
到
/etc/default/grub
,然后sudo update-grub
。如何设置模块参数的内容也涉及:如何添加内核模块参数?
重新启动后,当您执行以下操作:
所以我如果您愿意重启,这是最方便的方法。
另请参阅
https://unix.stackexchange.com/questions/9099/reading-来自整个磁盘映像的文件系统
https://superuser.com/questions/117136/how-can-i-mount-a-partition-from-dd-created-image-of -a-block-device-eg-hdd-u
从整个磁盘(设备)的映像中安装单个分区
https://stackoverflow.com/questions/1419489/loopback-mounting-individual-partitions从包含一个组成部分的文件中
#6 楼
使用Lostup附加整个磁盘映像。# sudo losetup /dev/loop2 sda.img
,然后使用mdadm创建md设备,并将为所有分区创建块设备。
# sudo mdadm --build --level=0 --force --raid-devices=1 /dev/md2 /dev/loop2
mdadm: array /dev/md2 built and started.
现在您应该看到分区设备。
nile-172-b0fef38-76:/mnt/sdb1 # ls -l /dev/md2*
brw-rw---- 1 root disk 9, 2 Oct 10 12:37 /dev/md2
brw-rw---- 1 root disk 259, 0 Oct 10 12:37 /dev/md2p1
评论
这是一个有趣的把戏:)
– JohanBoulé
17/12/16在2:10
最简单的方法谢谢
–巴哈·奥德(Bahaa Odeh)
20年6月15日在13:29
#7 楼
我认为,最简单的方法是使用此答案在StackOverflow上提到的mount -o loop,offset=...
。这个想法如下:fdisk -l $IMAGE
# calculate the offset in bytes
mount -o loop,offset=$OFFSET $IMAGE $MOUNTPOINT
该方法最好,因为在卸载已安装的分区后不需要删除循环设备。
//为了进一步简化任务(如果经常执行此任务),可以使用我的脚本
mountimg
为您做所有事情。只需从https://github.com/AlexanderAmelkin/mountimg 获取并像这样使用:
mountimg /media/external_media/sda.img 2 /media/sda_image
您也可以指定文件系统类型以及如果需要,还可以使用其他附加的安装选项:
mountimg /media/external_media/sda.img 2 /media/sda_image -t vfat -o codepage=866,iocharset=utf-8
完成分区后,只需
umount
即可:umount /media/sda_image
评论
非常感谢!像魅力一样工作!您成就了我的一天(并挽救了一个纯洁的豹猫,使其免受残酷地删除; P)
–尼古拉·费特林(Nicola Feltrin)
2011年10月21日在17:10
至少在bash上,shell甚至可以为您做数学:sudo losttup -o $(((56 * 512))/ dev / loop0 sda.img
– EnnoGröper
13年1月13日在11:55
这不仅有用,而且绝对很棒。
– andho
13年2月18日在13:38
如果有.img1和.img2怎么办? “ win8.raw1 * 2048 718847 358400 7”和“ win8.raw2 718848 52426751 25853952 7”
– Enkouyami
13-10-4在1:16
甚至更简单:mount -o loop,offset = $(((56 * 512))sda.img / mnt。资料来源:madduck.net/blog/…
– ostrokach
2015年9月10日在19:33