dre*_*lax 5 linux hard-drive filesystems partitioning disk-image
在 Linux 系统上,是否可以仅使用用户空间工具来创建和操作分区映像(其中可能只有 ext2 文件系统),然后使用这些分区映像来创建磁盘映像?
我可以用来genext2fs
在用户空间中生成 ext2 文件系统的映像,但是我找不到任何无需 root 访问即可操作磁盘映像的工具(例如,创建分区表或从现有分区映像创建磁盘映像等) . 目前,我正在使用kpartx
将分区挂载到磁盘映像中,但是因为这需要 root,所以它并不真正适合编写脚本,并且如果构建脚本中存在未捕获的错误,映射器设备继续使用。
基本上,我有三个目录,我希望每个目录都成为磁盘映像上的一个分区,但是我想编写脚本,而且我真的不想使用任何需要 root 访问权限的工具(这似乎没有任何内容)绝对需要具有 root 访问权限的进程)。
要制作分区表,您可以直接在文件而不是设备上使用常用工具。大多数标准工具应该支持这种用法,例如fdisk
和parted
。parted
集成到脚本中非常好,因为它可以将命令作为参数。
parted -s testing.img mklabel gpt
parted -s -a none testing.img mkpart ESP fat32 0 4M
parted -s -a none testing.img mkpart linux ext4 4M 10M
Run Code Online (Sandbox Code Playgroud)
我没有一个干净的解决方案来在虚拟分区中安装或创建文件系统。正确的做法可能是fuse
为分区表提供一个(用户空间中的文件系统)驱动程序。但我暂时还没有找到。
但是,mke2fs
可以选择在文件内的任意偏移处-E offset=1234
构建ext2
,ext3
或文件系统。ext4
您可以为其指定分区的偏移量。但是,请务必为其指定文件系统的大小,因为默认行为似乎有问题,并且默认情况下会使用虚拟磁盘的大小写入文件系统,并在需要时扩展文件。
mke2fs -E offset=4000256 testing.img 6316k
Run Code Online (Sandbox Code Playgroud)
不幸的是,并非所有人都有mkfs
这样的选择。mkfs.vfat
没有。因此,另一种解决方案可以是创建一个与分区大小相同的单独文件,使用mkfs
它,然后dd
将内容复制到完整的虚拟磁盘中。
dd if=testing.img of=testing.fat32.img bs=512 skip=34 count=7779
mkfs -t vfat testing.fat32.img
dd if=testing.fat32.img of=testing.img bs=512 seek=34 count=7779 conv=notrunc
Run Code Online (Sandbox Code Playgroud)
这不是最干净或最快的解决方案,但它有效,它非常通用,并且不需要 root 权限。转换选项sparse
还可以通过不写入长的零序列来加快速度。
您可以在分区中安装文件系统,前提是fuse
它支持您的文件系统。有一个ext
针对 名称下的文件系统的标准支持fuse-ext2
,以及一个针对FAT
名称下的文件系统的标准支持fusefat
。offset
不幸的是,他们目前没有选择。所以我猜你一定会使用或与之前mount
相同的技巧。dd
partx
带或 的标准方法kpartx
(或-o offset
的选项mount
)需要 root 权限。该dd
解决方案速度慢、复杂且容易出错。
归档时间: |
|
查看次数: |
1767 次 |
最近记录: |