我需要从零开始创建只有一个分区的文件系统 ( /dev/zero
)。我尝试了以下命令序列:
dd if=/dev/zero of=mountedImage.img bs=512 count=131072
fdisk mountedImage.img
n
p
2048
131072
基本上,我需要创建 64MB 的映像文件,其中填充了零。然后我使用fdisk
为新文件系统创建新分区,从扇区开始2048
并使用所有剩余扇区。但现在我遇到了问题。如果我设置一个循环设备并使用 对其进行格式化mkfs -t vfat
,分区表将被覆盖,文件系统将放置在磁盘上。我不需要用 FAT32 格式化整个磁盘,我只需要我的主分区如此。
有人知道我怎样才能格式化原始磁盘映像的一个分区,而不是整个映像吗?请帮忙。
答案1
一种不需要 root 权限的解决方案是创建一个具有分区大小的文件,调用mkfs
该文件,然后将该文件复制到位。
truncate -s 64512k part1.vfat
/sbin/mkfs.vfat part1.vfat
dd if=part1.vfat of=mountedImage.img bs=1k skip=2048
或者,使用 root 权限,你可以设置循环设备这样您就可以以设备身份访问图像。由于您只想访问图像的一部分,因此您必须明确指出这一点。
sudo losetup -o 2048k --sizelimit 64512k đev/loop0 mountedImage.img
sudo mkfs.vfat /dev/loop0
sudo losetup -d /dev/loop0
要使用更舒适的工具,您需要 root 权限并重新启动。 loop 模块可以提供对分区的访问,但默认情况下禁用此功能。要启用此访问,请编辑/etc/default/grub
并将行更改GRUB_CMDLINE_LINUX=""
为
GRUB_CMDLINE_LINUX="loop.max_part=15"
如果那里已经有其他选项,当然保留它们;它们需要用空格分隔,并且整个选项字符串必须放在双引号内,例如GRUB_CMDLINE_LINUX="option=value anotheroption loop.max_part=15"
。
现在,对磁盘映像进行分区后,运行
sudo losetup /dev/loop0 mountedImage.img
sudo mkfs.vfat /dev/loop0p1
losetup -d /dev/loop0
处理完该图像后运行。
答案2
文件系统映像文件通常不进行分区,除非它们是整个磁盘备份或用于虚拟机(QEMU 等)。出于您的目的,您可能只想直接在映像文件上创建文件系统。然后您可以挂载它:
sudo mkdosfs mountedImage.img
sudo mount -o loop mountedImage.img /mnt
如果您随后想将此映像写入 USB 闪存驱动器或类似设备,则可以将其写入分区:
sudo dd if=mountedImage.img of=/dev/sdc1
答案3
陣容
sudo apt-get install kpartx
losetup -fs my.raw
sudo kpartx -a my.img
ls /dev/mapper
输出:
/dev/mapper/loop0
/dev/mapper/loop0p1
loop0p1
第一个分区在哪里,因此我们可以这样做:
mkdir -p d
sudo mount /dev/mapper/loop0p1 d
此方法的优点:无需重新启动即可在 Ubuntu 14.04 上运行。
losetup 2.21 -P 选项
losetup -P -f --show my.img
/dev/loopXpY
每个分区创建一个。
优点:许多发行版中预安装有可执行文件(util-linux 包)。
缺点:相当新的选项,在 Ubuntu 14.04 中不存在。