使用 Debian 10
我有一个目录,里面有很多我很少(但确实)访问的小文件。我想将其转换为磁盘映像文件,以便我可以随时挂载、访问,然后卸载。有时我还需要向其中添加文件。
我现在的选择是:
- ZIP——必须进行压缩/解压缩,非常不方便且速度慢。我想避免使用 zip。
- ISO——问题是它实际上不支持原生 Linux 文件系统,对吧?我想保留 ext4 的所有功能。而且添加文件也不容易。
还有其他选择吗?
答案1
您可以使用物理或虚拟分区。
物理分区笨重且不易调整大小。
例如,可以使用 Veracrypt 创建虚拟分区作为加密,如下所述 如何在 Ubuntu 20.04 上安装和使用 Veracrypt。
最好的解决方案可能是使用文件作为虚拟磁盘。您可以在文章中找到详细说明 如何在 Linux 中使用文件创建虚拟硬盘卷下面通过例子来总结一下这个方法。
示例:创建大小为 1GB 的 VHD 卷映像
sudo dd if=/dev/zero of=VHD.img bs=1M count=1200
sudo mkfs -t ext4 /media/VHD.img
sudo mkdir /mnt/VHD/
sudo mount -t auto -o loop /media/VHD.img /mnt/VHD/
要在系统启动时挂载,请将其添加到/etc/fstab
:
/media/VHD.img /mnt/VHD/ ext4 defaults 0 0
答案2
ZIP——必须进行压缩/解压缩,非常不方便且速度慢。我想避免使用 zip。
您可以使用归档文件FUSE 文件系统可以将 ZIP 档案显示为可挂载的,但它们仍保持只读状态。
ISO——问题是它实际上不支持原生 Linux 文件系统,对吧?我想保留 ext4 的所有功能。而且添加文件也不容易。
您可以使用任何可以放在磁盘上的文件系统创建磁盘映像。(因此,“磁盘映像”是磁盘的精确副本。)因此,如果您想要一个使用 ext4 的映像文件,您确实可以使用 ext4。只要文件系统支持写入,它就是可写的;.iso 映像只是只读的,因为它们包含特定的文件系统,这不适用于 ext4。
(这并不是说 ISO 文件只能包含 ISO 9660 文件系统,而是它们称为“ISO 文件”是因为他们有一个 ISO9660 文件系统。0 .iso文件没有特定的文件格式,除了它是来自 /dev/cdrom 的 CD 数据轨道的 1:1 副本之外 - 对 ext4 分区执行相同操作将生成 ext4 映像。
下一个问题是操作系统是否能够使用无论文件系统是什么,该映像都会被挂载,至少在 Linux 上,ISO9660 没有什么特别之处——挂载的磁盘映像将作为通用块设备连接,然后内核会像扫描任何其他块设备一样扫描所有支持的文件系统。1 )
因此,为了创建包含 ext4 文件系统等的可挂载磁盘映像,您只需创建一个所需大小2的空白文件并mkfs.ext4
在其上运行。然后,您可以像挂载 .iso 文件一样挂载它 - 直接使用mount foo.img /mnt
,或通过手动losetup
挂载,或双击 .img 文件并让 GNOME Disks 进行设置。
(GNOME Disks 还支持附加 LUKS 加密图像,可以以大致相同的方式创建,例如使用cryptsetup luksFormat
。)
0(或者至少曾经是。尽管 DVD 和 DVD 映像使用 UDF 文件系统,但 .iso 名称仍然存在。)
1(对于其他操作系统来说,情况不一定如此;例如,Windows 对 CD/DVD 有特殊处理,并且 .iso 映像的连接方式类似于 CD,因此只有 UDF 或 ISO9660 可以在其中工作。另一方面,Windows 10 上的 .vhd 映像的工作方式与磁盘完全相同,尽管它们确实需要采用与 Linux 不兼容的 VHD 格式。)
2(图像文件不会自动增大以适应其内容。但是,扩展图像相对容易——向文件附加一些空字节并运行resize2fs
。
此外,fstrim
在已挂载的文件系统上运行将导致该映像变为疏并且仅占用与内部内容相同的空间,因此您可以拥有大于必要大小的图像而无需实际牺牲磁盘空间。)