标签: disk-image

如何从命令行挂载磁盘映像?

我知道如何挂载在 /dev 中具有相应设备文件的驱动器,但我不知道如何为不代表物理设备且在 /dev 中没有类似物的磁盘映像执行此操作(例如ISO 文件或软盘映像)。我知道我可以在 Mac OS X 中通过双击 Finder 中的磁盘映像图标来执行此操作,这将自动安装驱动器,但我希望能够从终端执行此操作。我不确定是否有通用的 Unix 方式来执行此操作,或者这是否是特定于平台的。

mount disk-image

58
推荐指数
4
解决办法
16万
查看次数

使用 cat、dd、pv 或其他程序复制 CD/DVD 是否更好?

背景

我正在将一些数据 CD/DVD 复制到 ISO 文件中,以便以后在驱动器中不需要它们的情况下使用它们。

我在网上寻找程序,我发现了很多:

我不知道是不是所有的人都应该是等价的,虽然我测试了其中的一些(使用md5sum工具)和,至少,dd并且pv等价的。以下是md5sum使用每个过程的驱动器和生成的文件:

dd程序的md5: 71b676875b0194495060b38f35237c3c

光伏程序的md5: f3524d81fdeeef962b01e1d86e6acc04

编辑: …

linux dd cat disk-image pv

49
推荐指数
3
解决办法
4万
查看次数

在 QEMU 中启动原始磁盘映像

我有一个来自这里的磁盘映像文件;该页面说我可以使用 QEMU 和以下命令启动此映像:

$ qemu-system-x86_64  -m 4096  -ctrl-grab  -no-reboot  x86-64.img
Run Code Online (Sandbox Code Playgroud)

这给出了一个信息:

WARNING: Image format was not specified for 'x86-64.img' and probing guessed raw.
     Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted.
     Specify the 'raw' format explicitly to remove the restrictions.
Run Code Online (Sandbox Code Playgroud)

模拟器加载,但 PilOS 崩溃,这意味着我做错了什么:

(可能是因为 PilOS 想写入块 0 但不能)

raw命令行参数,据我所知,这意味着这样传递:

$ qemu-system-x86_64 -drive format=raw file=x86-64.img 
qemu-system-x86_64: -drive format=raw: drive with bus=0, unit=0 (index=0) exists
Run Code Online (Sandbox Code Playgroud)

这失败了(我认为),因为我的引导设备在/dev/sda总线 0 …

virtual-machine qemu disk-image

33
推荐指数
1
解决办法
14万
查看次数

压缩的硬盘驱动器图像非常大

我刚刚使用这个命令制作了一个新安装的双启动(Ubuntu 和 Windows)的图像(我已经使用了一段时间来制作较小的图像):

dd if=/dev/sda | gzip > /mnt/drive.img.gz
Run Code Online (Sandbox Code Playgroud)

在这个驱动器上,使用了 500G 中少于 60G 的数据。不过那个图像文件现在是 409G 大。

那个怎么样?gzip 不应该设法压缩所有这些零吗?正如我所说,这是一个全新安装的系统。不能这么乱。

现在我没想到文件是 60G,但 400G 对我来说似乎非常大。

compression disk-image

20
推荐指数
2
解决办法
3268
查看次数

为什么将 `tar` 输送到 `dd` 直到磁盘已满才停止?

我有一个单个磁盘映像的 tar 存档。此 tar 文件中的图像大小约为 4GB。我通过管道输入tar xfinto的输出dd将磁盘映像写入 SD 卡。在卡已满之前,diskdump 永远不会停止。这是我的 shell 会话:

$ ls -l disk.img.tgz
-rw-r--r-- 1 confus confus 192M Okt  5 00:53

$ tar -tvf disk.img.tgz
-rw-r--r-- root/root 4294968320 2018-10-05 00:52 disk.img

$ lsblk -lb /dev/sdc
NAME MAJ:MIN RM        SIZE RO TYPE MOUNTPOINT
sdc    8:32   1 16022241280  0 disk

$ tar zxf disk.img.tgz -O | sudo dd status=progress conv=sync bs=1M of=/dev/sdc
[sudo] password for user: 
15992881152 bytes (16 GB, 15 GiB) copied, 212 s, …
Run Code Online (Sandbox Code Playgroud)

tar pipe dd disk-image

18
推荐指数
1
解决办法
4608
查看次数

如何将包含大量零的文件解压缩为稀疏文件?

我有一个使用创建的非常大的硬盘的压缩原始图像cat /dev/sdx | xz > image.xz。但是,在此操作之前,驱动器中的可用空间已清零,并且图像大部分由零字节组成。将此图像提取为稀疏文件的最简单方法是什么,以使零块不占用任何空间?

compression sparse-files files disk-image

18
推荐指数
2
解决办法
2634
查看次数

如何格式化 img 文件内的分区?

img通过以下命令创建了一个文件:

dd if=/dev/zero bs=2M count=200 > binary.img
Run Code Online (Sandbox Code Playgroud)

它只是一个带零的文件,但我可以使用它fdisk并创建一个分区表:

# fdisk binary.img

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x51707f21.

Command (m for help): p
Disk binary.img: 400 MiB, 419430400 bytes, 819200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x51707f21
Run Code Online (Sandbox Code Playgroud)

并且,让我们说,一个分区:

Command (m for …
Run Code Online (Sandbox Code Playgroud)

filesystems partition disk-image

17
推荐指数
2
解决办法
3万
查看次数

如何在不需要 root 权限的情况下将 syslinux/extlinux 安装到磁盘映像文件

我已经构建了一个本土的 Linux 发行版,我可以以非 root 用户的身份制作完整的磁盘映像文件,但有一个例外——安装引导加载程序。我正在使用 syslinux(实际上是 extlinux),要安装它,我必须环回挂载引导分区,这需要 root/sudo 权限。这些命令是从一个 makefile 运行的,变量名应该清楚地表明用什么来替换它们。

sudo losetup -o $(BOOT_FS_PARTITION_OFFSET) $(LOOP_DEVICE) $(IMAGE_FILE_NAME)
sudo mount $(LOOP_DEVICE) $(LOOP_MOUNT_POINT)
sudo $(EXTLINUX) -S $(DISK_SECTORS) -H $(DISK_HEADS) -i $(LOOP_MOUNT_POINT)
sudo umount $(LOOP_MOUNT_POINT)
sudo losetup -d $(LOOP_DEVICE)
Run Code Online (Sandbox Code Playgroud)

有没有办法在不需要root权限的情况下将syslinux或extlinux写入磁盘映像文件?

not-root-user system-installation syslinux disk-image

13
推荐指数
2
解决办法
2005
查看次数

如何说服 tar(等)归档块设备内容?

我有六个 Linux 逻辑卷,它们一起支持一个虚拟机。VM 当前已关闭,因此很容易为它们拍摄一致的图像。

我想将所有六个图像打包到一个存档中。简单地说,我可以做这样的事情:

cp /dev/Zia/vm_lvraid_* /tmp/somedir
tar c /tmp/somedir | whatever
Run Code Online (Sandbox Code Playgroud)

但这当然会创建一个额外的副本。我想避免额外的副本。

显而易见的方法:

tar c /dev/Zia/vm_lvraid_* | whatever
Run Code Online (Sandbox Code Playgroud)

不起作用,因为 tar 将文件识别为特殊文件(在这种情况下为符号链接),并且基本上将其存储ln -s在存档中。或者,使用--dereference或 直接指向/dev/dm-X,它会将它们识别为特殊(设备文件)并基本上存储mknod在存档中。

我搜索了 tar 的命令行选项来覆盖此行为,但找不到任何选项。我也试过cpio,同样的问题,也找不到任何覆盖它的选项。我也试过7z(同上)。与pax. 我什至尝试过zip,这只是让自己感到困惑。

编辑:查看 GNU tar 和 GNU cpio 的源代码,它们似乎都无法做到这一点。至少,并非没有严重的技巧(无法禁用对设备文件的特殊处理)。因此,将不胜感激或替代实用程序的严重诡计的建议。

TLDR:是否有一些存档器可以将多个磁盘映像打包在一起(从原始设备获取)并流式传输输出,而无需制作额外的磁盘副本?我的偏好是以通用格式输出,例如 POSIX 或 GNU tar。

tar cpio disk-image

13
推荐指数
1
解决办法
4027
查看次数

如何找到哪些图像属于哪个 /dev/loop?

我经常使用映像驱动器,这意味着对有问题的驱动器进行 dd 复制,然后处理映像而不是驱动器本身。

对于大多数工作,我使用 kpartx 将驱动器的分区映射到 /dev/mapper/ 下的设备。我在这里想知道是否有办法找到哪个映射属于哪个图像。

考虑一下:

root@vyvyan:/tmp# kpartx -a -v Image1 
add map loop1p1 (254:4): 0 10240 linear /dev/loop1 2048
add map loop1p2 (254:5): 0 10240 linear /dev/loop1 12288
add map loop1p3 (254:6): 0 52848 linear /dev/loop1 22528
root@vyvyan:/tmp# kpartx -a -v Image2
add map loop2p1 (254:7): 0 33508 linear /dev/loop2 2048
add map loop2p2 (254:8): 0 39820 linear /dev/loop2 35556
Run Code Online (Sandbox Code Playgroud)

现在,假设我忘记了哪个图像去了哪个映射。有没有办法让 kpartx - 或内核,或其他任何东西 - 告诉我哪个图像去哪里?

编辑另外,如果我在 kpartx 添加映射时不小心 rm 图像文件,你如何删除映射?kpartx 希望显示实际图像。

loop-device disk-image

12
推荐指数
1
解决办法
1万
查看次数