我的目标是创建一个常规文件,并在其中创建一个分区和文件系统(实际上是一个虚拟硬盘驱动器),最后挂载它,所以我这样做了:
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
非必要时不要使用。
创建一个归零文件,这里不需要
sudo
:dd if=/dev/zero of=image-zero.dd count=20480000 status=progress
根据需要对归零图像进行分区,此处
cfdisk
不需要:sudo
cfdisk image-zero.dd
使用以下命令在分区上创建文件系统,无需
sudo
:mkfs.ext4 image-zero.dd -E offset=$(( 512 * 2048 ))
创建一些挂载点目录:
mkdir mnttest
安装图像,注意这里需要
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