mkfs.ext4:设备 device.img 上的无效块偏移=X

mkfs.ext4:设备 device.img 上的无效块偏移=X

我的目标是创建一个常规文件,并在其中创建一个分区和文件系统(实际上是一个虚拟硬盘驱动器),最后挂载它,所以我这样做了:

sudo dd if=/dev/zero of=imagem-zero.img count=20480000

创建大约 20Gb 的文件。然后我用 分区cfdisk,之后文件的状态是:

$ gdisk -l imagem-zero.img

GPT fdisk (gdisk) version 1.0.1

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk imagem-zero.img: 40960000 sectors, 19.5 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 544A9633-7FA3-4BE8-BEE7-612C151A4504
Partition table holds up to 128 entries
First usable sector is 2048, last usable sector is 40959966
Partitions will be aligned on 2048-sector boundaries
Total free space is 0 sectors (0 bytes)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        16779263   8.0 GiB     8304  
   2        16779264        40959966   11.5 GiB    8302  

现在,我想在这两个分区中创建文件系统ext4,但我失败了,问题标题中出现错误消息:

$ sudo mkfs.ext4 imagem-zero.img offset=$((2048*512))
mke2fs 1.43.4 (31-Jan-2017)
mkfs.ext4: invalid blocks 'offset=1048576' on device 'imagem-zero.img'

$ sudo mkfs.ext4 imagem-zero.img offset=$((2048))
mke2fs 1.43.4 (31-Jan-2017)
mkfs.ext4: invalid blocks 'offset=2048' on device 'imagem-zero.img'

我的问题是,如何找到正确的偏移量来在两个分区上创建文件系统?

答案1

您只是忘记使用-E开关!

另外,我建议sudo非必要时不要使用。

  1. 创建一个归零文件,这里不需要sudo

    dd if=/dev/zero of=image-zero.dd count=20480000 status=progress
    
  2. 根据需要对归零图像进行分区,此处cfdisk不需要:sudo

    cfdisk image-zero.dd
    
  3. 使用以下命令在分区上创建文件系统,无需sudo

    mkfs.ext4 image-zero.dd -E offset=$(( 512 * 2048 ))
    
  4. 创建一些挂载点目录:

    mkdir mnttest
    
  5. 安装图像,注意这里需要sudo

    sudo mount -t ext4 -o offset=$(( 512 * 2048 )) image-zero.dd ./mnttest
    

在 Linux Mint 19 上测试。


如何找到合适的偏移量

您的图像有:

  • 逻辑扇区大小:512字节

  • 第一个分区的起始扇区:2048

  • 第二分区起始扇区:16779264

计算:

将逻辑扇区大小乘以分区的起始扇区,然后让我们用 shell 进行计算。

结果:

  • 第一个分区:offset=$(( 512 * 2048 ))

  • 第二分区:offset=$(( 512 * 16779264 ))

答案2

假设您可以使用该offset=选项创建文件系统,您将如何使用它?

手册页说

-E 扩展选项

设置文件系统的扩展选项。扩展选项以逗号分隔,并且可以使用等号(“=”)作为参数。

偏移量=偏移量

在距离设备或文件开头的偏移处创建文件系统。这在为虚拟机创建磁盘映像时非常有用。

所以正确的语法是

sudo mkfs.ext4 imagem-zero.img -E offset=$((2048))

这将允许您创建文件系统,但您可能还想写入一些文件。所以最好使用循环设备。

losetup -P -f imagem-zero.img

这将为您提供/dev/loopX和 分区/dev/loopXp0, /dev/loopXp1。您可以mkfs在这些分区上使用、挂载它们并将文件写入这些分区。卸载分区后,执行以下操作

losetup -d /dev/loopX

相关内容