Virtualbox 访问内部驱动器

Virtualbox 访问内部驱动器

如何从我的客户系统访问内部驱动器?我的主机是 Windows 7。我试过手册但是当我将新的 vmdk 附加到 Windows 7 客户机时,它显示为未格式化且磁盘空间为零。创建 vmdk 的命令是:

VBoxManage.exe internalcommands createrawvmdk -filename C:\Users\me\.Virtualbox\VDI\mydrive.vmdk -rawdisk \\.\PhysicalDrive0

PhysicalDrive 后面的数字是 Computermanagement->Diskmanagement 中的磁盘编号。如果我正确理解了这个问题,手册似乎更倾向于使用硬盘作为启动设备而不是存储。我只是想向我的虚拟客户机添加另一个磁盘,因为我有额外的存储空间,可以在没有虚拟化开销的情况下访问。共享数据不是问题。磁盘本身不存储重要的数据,但如果可以删除它,我不想删除它。我现在要使用共享文件夹,但据我所知,它们相比之下速度很慢。

[编辑] 抱歉造成混淆,我使用的虚拟机映像是 Windows XP,而不是 Windows 7。我按照评论中的建议创建了具有管理员权限的新 vmdk。但行为没有改变。接下来,我尝试访问 Ubuntu 虚拟机中的磁盘。第一次启动时,我收到错误 VERR_ACCESS_DENIED,请确保有足够的可用空间。强制重新启动虚拟机后,我可以通过文件管理器访问磁盘。我还尝试从 Windows 7 虚拟机访问磁盘(是的,这次真的是 Windows 7)。那里发生了相同的 VERR_ACCESS_DENIED 错误。与 Ubuntu 虚拟机相反,每次我重新启动时它都会重新出现(三次)。

[EDIT2] 实现似乎存在缺陷。我编写了一个脚本来写入 10GB 的 1MB 文件、10GB 的 2GB 文件,依此类推。首先,我在第 6200 个 1MB 文件上遇到了错误。在下一次运行中,第一个 3MB 文件也出现了同样的错误:

/bin/dd: opening `/media/Ultra_/samplefiles/3MB_1': Input/output error

此后,当我尝试以任何方式访问 samplefiles 目录时,都会出现 IO 错误。

[EDIT3] 这是一个重现错误的测试脚本。如果我通过主机系统访问磁盘,则无法看到通过客户机写入的文件/文件夹。在客户机上,文件是可见的,原始文件系统的文件系统大小可以通过DF-H写入文件时,磁盘空间会减少。发生错误后,我仍然可以访问磁盘上的其他文件。

    #!/usr/bin/python
"""Generate directory of files for testing."""
import sys, os
import argparse
try:
    import sh
    from sh import dd
except:
    print 'Please install the python sh module first : pip install sh'
    exit(1)

class MyParser(argparse.ArgumentParser):
    def error(self, message):
        print_help()
        sys.exit(1)

def print_help():
   print
   print '  Not enough arguments.\n'
   print '      Example: '
   print '          %s directory_for_generated_files' %  sys.argv[0]
   print '          Generate 10GB worth of 1MB, 2MB, 3MB, 4MB, 5MB, and 6MB files to the directory *directory_for_generated_files*.'
   print

def main():
    parser = MyParser()
    parser.add_argument('directory')
    args = parser.parse_args()
    directory = args.directory
    if not os.path.exists(directory):
        os.makedirs(directory)
    filesize_arr = [1,2,3,4,5,6]
    filequantity_arr = [10000,5000,3333,2500,2000,1667]

    idx = 0 
    for size in filesize_arr:
        for nr in range(1,filequantity_arr[idx]+1):  # from 1 to file quantity
            filename =  directory+'/'+str(size)+'MB_'+str(nr)
            print "writing "+directory+'/'+str(size)+'MB_'+str(nr)
            dd('if=/dev/zero', 'of='+filename, 'bs=1MB', 'count='+str(size))
        idx += 1

if __name__ == '__main__':
    main()

[EDIT4] 重新启动虚拟机后,对文件系统所做的更改不可见。

答案1

只有未安装在主机操作系统中的驱动器和分区才可从虚拟机访问。我猜\\.\PhysicalDrive0是您从其启动主机的驱动器,因此您将无法使用它。这种情况在未来不太可能改变,因为在两个操作系统之间共享驱动器会导致许多问题,可能会导致数据损坏。

如果您想在主机操作系统和客户机操作系统之间共享文件,您应该在客户机中安装 VirtualBox Addons - 虚拟机设置中会出现一个共享选项,允许您在客户机中设置一个指向某些主机文件夹的共享网络文件夹。

相关内容