我想知道虚拟机如何在硬件上保存文件

我想知道虚拟机如何在硬件上保存文件

我最近使用虚拟机(Oracle vm virtualbox)在我的 Windows 笔记本电脑上使用 Ubuntu。我编写了 helloworld.c 来测试我的新操作系统,并保存了它。我想知道“我可以在 Windows 笔记本电脑上看到该文件的目录(helloworld.c)吗?”

所以我检查了我的 virtualbox 目录 (C:\Program Files\Oracle\VirtualBox),因为我认为 helloworld.c 保存在那里。但事实并非如此。我在哪里可以找到它?

我的笔记本电脑有 256GB 硬盘。当我设置虚拟机时,我分配了 30GB。如果保存了 helloworld.c,它会保存在分配的 30GB 硬盘的某个位置。那么我应该能够在 Windows 上找到该文件的目录。我真的很困惑。

是不是我想的太简单了?还是虚拟机的硬盘分配方法其实很复杂?

答案1

如果保存了 helloworld.c,则它会保存在分配的 30GB HDD 的某个位置。然后我应该能够在 Windows 上找到该文件的目录。

您可以在 Windows 笔记本电脑上查看数据,但不能将其作为单独的文件 - 只能将其作为整个磁盘。

虚拟机的工作方式与真实机器类似,因为虚拟机内部运行的操作系统仍然认为它已连接实际的硬盘。Ubuntu 不会告诉 VirtualBox 存储单个文件;它只会以扇区的形式与虚拟硬盘对话(虚拟磁盘有自己的 MBR、自己的分区等)——与真实硬盘非常相似,VirtualBox 不知道每个扇区的含义,它只是将它们全部存储在一个巨型文件中。

具体来说,使用 VirtualBox 时,虚拟机的数据存储在~\VirtualBox\Windows 帐户1中的目录中(例如C:\Users\sangyeob\VirtualBox\)。要找到它,您可以右键单击虚拟机并选择“在资源管理器中显示”。

打开该位置后,您应该会找到一个文件Ubuntu.vdi或类似文件 - 它包含虚拟机的整个“磁盘映像”(包括 MBR、分区表、文件系统和所有内容)。整个 30 GB 磁盘空间分配只是这个 .vdi 文件,VirtualBox 将其伪装成 30 GB 硬盘。

换句话说,.vdi 文件很像 .iso 映像,只是包含 HDD 而不是 CD。

(但有一个区别是 .vdi 文件会跟踪虚拟硬盘中哪些部分尚未写入,这就是为什么它们的起始大小比实际的“30 GB”分配小很多。)


不过,以上这些都有例外。如果你使用 VirtualBox 的“共享文件夹”功能,你允许虚拟机直接访问 Windows 上的文件。

“共享文件夹”并不模拟磁盘;相反,它们实际上模拟了网络共享,这按文件而不是扇区来工作。

为了使此功能正常运行,VM 可能需要安装 VirtualBox“Guest Additions”驱动程序,尽管最新的 Linux 版本可能已经内置支持 VirtualBox 共享文件夹。


1作为一般准则,程序会避免将用户数据存储在“Program Files”中。个人数据存储在用户帐户的某个位置,而共享数据则存储在隐藏目录中C:\ProgramData\(例如,Hyper-V 虚拟机默认存储在此处)。

答案2

如果您将文件保存在虚拟机内部,则您应该在虚拟机内部找到它。

您无法看到来自主机的客户文件,除非它们位于与虚拟机共享的主机文件夹中。

虚拟机使用与物理磁盘格式相同的虚拟磁盘,包括所有不能直接读取的二进制磁盘结构。

如果你在主机中挂载虚拟磁盘,这就相当于在主机中添加一个新的物理磁盘。

相关内容