尝试挂载 DD 文件时出现“无法读取最后一个扇区”

尝试挂载 DD 文件时出现“无法读取最后一个扇区”

我有一个 .dd 文件,想检查里面的内容。许多教程建议使用 Disk Image Mounter,但这个选项不存在。

所以我尝试了经典的方法:

mkdir /mnt/image

sudo mount -o loop /home/name/Downloads/usb_content.dd

但得到这个

Failed to read last sector (129022): Invalid argument
HINTS: Either the volume is a RAID/LDM but it wasn't setup yet,
   or it was not setup correctly (e.g. by not using mdadm --build ...),
   or a wrong device is tried to be mounted,
   or the partition table is corrupt (partition is smaller than NTFS),
   or the NTFS boot sector is corrupt (NTFS size is not valid).
Failed to mount '/dev/loop42': Invalid argument
The device '/dev/loop42' doesn't seem to have a valid NTFS.
Maybe the wrong device is used? Or the whole disk instead of a
partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?

我怎样才能正确挂载 dd 映像?

编辑:

sudo fdisk --list /home/name/Downloads/usb_content.dd

给出:

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: 0x73736572

Device                                     Boot      Start        End    Sectors   Size Id Type
/home/name/Downloads/usb_content.dd1      1920221984 3736432267 1816210284   866G 72 unknown
/home/name/Downloads/usb_content.dd2      1936028192 3889681299 1953653108 931,6G 6c unknown
/home/name/Downloads/usb_content.dd3               0          0          0     0B  0 Empty
/home/name/Downloads/usb_content.dd4        27722122   27722568        447 223,5K  0 Empty

Partition table entries are not in disk order.

答案1

您的镜像文件中似乎有四个分区。如果至少一个分区具有 Ubuntu 可以管理的文件系统,您可以尝试按照以下步骤挂载分区。

  • 安装kpartx

    sudo apt install kpartx
    
  • 用于kpartx将图像文件的内容映射到循环设备

    sudo kpartx -av /home/name/Downloads/usb_content.dd
    
  • 您应该使用以下方法找到映射的循环设备

    ls /dev/mapper/loop*
    
  • 用于lsblk查看映射内容

    lsblk -o name,size,fstype,label,mountpoint /dev/loopN
    

    其中N是一个数字(如果之前没有循环设备,则为 0,否则为第一个未占用的数字,例如 7,取决于已映射的循环设备数量)。 在我的情况下(没有任何快照),N = 0所以/dev/loop0

  • 现在,lsblk应该告诉您是否有某个文件系统,如果是的话,您可以创建挂载点并使用以下方式挂载[文件系统]

    sudo mkdir /mnt/lp1  # create mountpoint only once
    sudo mkdir /mnt/lp2  # create mountpoint only once
    ...
    
    sudo mount /dev/mapper/loopNp1 /mnt/lp1
    sudo mount /dev/mapper/loopNp2 /mnt/lp2
    ...
    

    N您之前确定的数字在哪里(就我的情况而言0)。

  • 现在,您可以读取已挂载文件系统的内容 /mnt/lp1 /mnt/lp2 ...

  • 最后,您可能需要卸载文件系统并删除映射,

    sudo umount /mnt/lp*
    
    sudo kpartx -d /home/name/Downloads/usb_content.dd
    

相关内容