精华内容
下载资源
问答
  • java访问磁盘文件

    千次阅读 2018-05-10 19:24:09
    文件讲解java访问磁盘文件过程 fileReader.read() 图解java访问磁盘文件过程 文件 数据在磁盘中的唯一最小描述就是 文件 ,也就是说应用程序只能通过操控 文件 来操作磁盘上的数据; File 对象 VS ...

    转载,务必写上原文链接 !(尊重与你分享知识的人)


    目录


    文件

    数据在磁盘中的唯一最小描述就是 文件 ,也就是说应用程序只能通过操控 文件 来操作磁盘上的数据;


    File 对象 VS FileDescriptor 对象

    初学 java IO 流的时候,基本都被告诉 java 里面用 File 来表示一个文件对象;

    其实 File 并不代表一个真实存在的文件对象,当我们给定路径字符串的时候,返回的 File 对象仅仅是代表这个路径下的 虚拟对象,至于这个路径是一个文件还是一个文件夹,或者文件存在不存在,File 根本不关心 ;

    只要当真正要读取这个文件的时候,才会检查给定路径的文件存在不存在(这个判断发生在读取流的构造器里面) ;

    那么 java 里面,用什么来描述磁盘的文件 —— FileDescriptor 对象,它代表一个磁盘上的真实文件对象;


    文件讲解java访问磁盘文件过程

    // 创建一个字符读取流
    FileReader fileReader = new FileReader("xxxxxx");

    0、这一行代码后面都发生了什么事情;

    我们要看下,这个 FileReader 到底是怎么工作的,跟进去看下源代码 ;


    下面开始源码跟进分析


    public FileReader(String fileName) throws FileNotFoundException {
        // 调用父类构造器,传进去的参数是 FileInputStream
            super(new FileInputStream(fileName));
        }
    ----------------------------------------
    // FileReader 的父类是 字节转换流
    public class FileReader extends InputStreamReader

    1、发现 FileReader 构造器中,是调用其父类 InputStreamReader 的构造器;

    分析父类构造器参数发现,给父类构造器传递的参数是一个 FileInputStream 对象;我们同样需要看下这个类的构造器源代码;

    public FileInputStream(String name) throws FileNotFoundException {
        // 跟进传进来的字符串,创建对应的 虚拟对象 File
            this(name != null ? new File(name) : null);
        }

    2、可以看见 FileInputStream 根据传进来的字符串,创建了 File 对象,然后将这个 File 对象,传给了同类的其他构造器

    public FileInputStream(File file) throws FileNotFoundException {
        // 获取文件的路径
            String name = (file != null ? file.getPath() : null);
            SecurityManager security = System.getSecurityManager();
            if (security != null) {
                security.checkRead(name);
            }
            // 如果name为null,说明传进来的file就是null。抛出空指针异常
            if (name == null) {
                throw new NullPointerException();
            }
            // 判断文件是否有效,也就是判断给File对象的路径下面的文件是否真的存在的;
            if (file.isInvalid()) {
                throw new FileNotFoundException("Invalid file path");
            }
            // 创建一个代表真实文件的对象
            fd = new FileDescriptor();
            fd.incrementAndGetUseCount();
            this.path = name;
            // 打开路径下面的文件,是一个本地方法
            open(name);
        }

    3、经过上面的代码分析,我们可以发现 FileInputStream 创建对象的时候,会对 File 构造器的路径参数进行检查,判断路径对应的文件到底存在与否;并且还会创建一个代表真实文件的 FileDescriptor 对象 ;

    创建完 FileInputStream 对象以后,继续回到 FileReader 构造器上面 ;我们在上面的代码,知道 FileReader 是调用了父类 InputStreamReader 的构造器,现在我们关注一下它的父类构造器;

    public FileReader(String fileName) throws FileNotFoundException {
        // 调用父类构造器,传进去的参数是 FileInputStream
            super(new FileInputStream(fileName));
        }
    
    ----------------------------------------
    public InputStreamReader(InputStream in) {
        // 调用了父类构造器,里面没啥好看的,就加了锁
        // 加锁的原因是因为,同一时刻一个文件只允许一个人来读取
            super(in);
            try {
            // 创建一个 StreamDecoder 解码对象,将字节解码为字符
                sd = StreamDecoder.forInputStreamReader(in, this, (String)null); // ## check lock object
            } catch (UnsupportedEncodingException e) {
                // The default encoding should always be available
                throw new Error(e);
            }
        }

    4、查看源码,知道创建 InputStreamReader 对象,会同时创建 StreamDecoder 对象,因为我们是用字节流,最后需要的字符,所有需要它来解码

    其中关于 StreamDecoder 笔者之前分析过—— StreamDecoder 对象分析(可点击)


    fileReader.read()

    分析完 上面,我们再看下 read()方法;看看到底是谁实现了read()接口 ;

     FileReader fileReader = new FileReader("xxxxxx");
     // 跟进去看看 read()方法到底是谁实现的;
     fileReader.read();
     ---------------------------------
     // 跟进去发现是调用了 一个 sd变量的read方法;
     public int read() throws IOException {
         return sd.read();
     }
    -------------------------------------
    // sd的read()方法实现
     private int read0() throws IOException {
            Object var1 = this.lock;
            synchronized(this.lock) {
                if (this.haveLeftoverChar) {
                    this.haveLeftoverChar = false;
                    return this.leftoverChar;
                } else {
                    char[] var2 = new char[2];
                    int var3 = this.read(var2, 0, 2);
                    switch(var3) {
                    case -1:
                        return -1;
                    case 0:
                    default:
                        assert false : var3;
    
                        return -1;
                    case 2:
                        this.leftoverChar = var2[1];
                        this.haveLeftoverChar = true;
                    case 1:
                        return var2[0];
                    }
                }
            }
        }
    
     ---------------------------------
     // 跟进发现 这个sd 是StreamDecoder 对象
    private final StreamDecoder sd;

    至此,我们发现底层工作都是 StreamDecoder 完成的,这个在背后默默工作的低调者,我们应该记住它;


    图解java访问磁盘文件过程

    吃饭去,饿死了


    展开全文
  • 文件上传的功能很常见,但是很多人并不清楚文件上传后预览的具体原理,也就是把上传至服务器指定物理磁盘相关目录(绝对路径)的文件通过浏览器直接访问预览。这种具体实现其实是要配置一个映射关系的,即配置一个虚拟...

    文件上传的功能很常见,但是很多人并不清楚文件上传后预览的具体原理,也就是把上传至服务器指定物理磁盘相关目录(绝对路径)的文件通过浏览器直接访问预览。这种具体实现其实是要配置一个映射关系的,即配置一个虚拟路径来映射文件的真实绝对路径(完美的隐藏了文件的真实物理路径,可以说不但很安全,而且外网可以直接访问)。

    配置虚拟路径映射物理路径常规二种方式

    方式一:在tomcat的tomcat-7.0.39/conf/Catalina/localhost/目录配置一个xml文件,该xml文件里配置物理路径和虚拟路径的映射关系,同时该xml文件的名字须定义为要映射的虚拟路径即可。该种方式很简单,此处不再赘述。

    方式二:在项目中增加适配器配置类,在该配置类中定义虚拟路径和真实的物理路径的映射关系即可。该种方式因不同的框架实现不一样,本案例通过主流的springboot讲解该配置以及具体应用。

    具体实现:首先在本地磁盘目录放置一个图片文件,目录如下

    D:\uploadBaseDir\productPic\20190215\100×100\8e67898584e140c9b39a203a167f58fe.png

    接下来在项目里定义一个适配器配置类ResourceConfigAdapter继承WebMvcConfigurerAdapter,注意这里要动态的获取操作系统,根据不同的操作系统适配不同的映射关系,也很好理解,windows系统有C/D盘这个概念(真实的物理磁盘路径),linux和mac系统没有这个概念,都是相对路径。

    package com.demo.serverProvider.config;
    
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
    
    /**
     * 创建时间:2019年2月15日 下午1:52:49
     * 项目名称:server-provider
     * 类说明:将物理磁盘文件存放的绝对路径映射为一个虚拟路径,就可以通过SpringBoot服务来访问文件了
     * @author guobinhui
     * @since JDK 1.8.0_51
     */
    @Configuration
    public class ResourceConfigAdapter extends WebMvcConfigurerAdapter{
    
      @Override
      public void addResourceHandlers(ResourceHandlerRegistry registry) {
         String os = System.getProperty("os.name");
         if (os.toLowerCase().startsWith("win")) {  //如果是Windows系统
            registry.addResourceHandler("/productPic/**").
              addResourceLocations("file:D:/uploadBaseDir/productPic/");
         }else{//linux和mac系统
            registry.addResourceHandler("/productPic/**").
              addResourceLocations("file:/uploadBaseDir/productPic/");
         }
         super.addResourceHandlers(registry);
       }
    }

    最终图片上传结束在数据库里保存存储的相对路径即可,本图片保存的路径如为:/uploadBaseDir/productPic/20190215/100×100/8e67898584e140c9b39a203a167f58fe.png

    最终测试刚才这个图片的预览(可以看到真实物理路径D:/uploadBaseDir/productPic/映射为指定的虚拟路径/productPic/了)

    欢迎各位开发者朋友一起交流。笔者电话(微信):18629374628 

    展开全文
  • VMware多文件和单文件相互转换 使用vmware-vdiskmanager.exe命令行工具即可 设置环境变量 set PATH=%PATH%;D:\Program Files (x86)\VMware\VMware Workstation echo %PATH% C:\Users\Administrator>vmware-...
    VMware多文件和单文件相互转换
    使用vmware-vdiskmanager.exe命令行工具即可


    设置环境变量
    set PATH=%PATH%;D:\Program Files (x86)\VMware\VMware Workstation
    echo %PATH%

    C:\Users\Administrator>vmware-vdiskmanager.exe
    VMware Virtual Disk Manager - build 6661328.
    Usage: vmware-vdiskmanager.exe OPTIONS <disk-name> | <mount-point>
    Offline disk manipulation utility
      Operations, only one may be specified at a time:
         -c                   : create disk.  Additional creation options must
                                be specified.  Only local virtual disks can be
                                created.
         -d                   : defragment the specified virtual disk. Only
                                local virtual disks may be defragmented.
         -k                   : shrink the specified virtual disk. Only local
                                virtual disks may be shrunk.
         -n <source-disk>     : rename the specified virtual disk; need to
                                specify destination disk-name. Only local virtual
                                disks may be renamed.
         -p                   : prepare the mounted virtual disk specified by
                                the mount point for shrinking.
         -r <source-disk>     : convert the specified disk; need to specify
                                destination disk-type.  For local destination disks
                                the disk type must be specified.
         -x <new-capacity>    : expand the disk to the specified capacity. Only
                                local virtual disks may be expanded.
         -R                   : check a sparse virtual disk for consistency and attempt
                                to repair any errors.
         -e                   : check for disk chain consistency.
         -D                   : make disk deletable.  This should only be used on disks
                                that have been copied from another product.
    
    
      Other Options:
         -q                   : do not log messages
    
    
      Additional options for create and convert:
         -a <adapter>         : (for use with -c only) adapter type
                                (ide, buslogic, lsilogic). Pass lsilogic for other a
    dapter types.
         -s <size>            : capacity of the virtual disk
         -t <disk-type>       : disk type id
    
    
      Disk types:
          0                   : single growable virtual disk
          1                   : growable virtual disk split in 2GB files
          2                   : preallocated virtual disk
          3                   : preallocated virtual disk split in 2GB files
          4                   : preallocated ESX-type virtual disk
          5                   : compressed disk optimized for streaming
          6                   : thin provisioned virtual disk - ESX 3.x and above
    
    
         The capacity can be specified in sectors, KB, MB or GB.
         The acceptable ranges:
                               ide/scsi adapter : [1MB, 8192.0GB]
                               buslogic adapter : [1MB, 2040.0GB]
            ex 1: vmware-vdiskmanager.exe -c -s 850MB -a ide -t 0 myIdeDisk.vmdk
            ex 2: vmware-vdiskmanager.exe -d myDisk.vmdk
            ex 3: vmware-vdiskmanager.exe -r sourceDisk.vmdk -t 0 destinationDisk.vmdk
            ex 4: vmware-vdiskmanager.exe -x 36GB myDisk.vmdk
            ex 5: vmware-vdiskmanager.exe -n sourceName.vmdk destinationName.vmdk
            ex 6: vmware-vdiskmanager.exe -k myDisk.vmdk
            ex 7: vmware-vdiskmanager.exe -p <mount-point>
                  (A virtual disk first needs to be mounted at <mount-point>)
    
    
    
    
    C:\Users\Administrator>



    机器翻译+修改
    C:\Users\Administrator>vmware-vdiskmanager.exe
    VMware虚拟磁盘管理器 - build 6661328版。
    用法:vmware-vdiskmanager.exe 选项 <磁盘名称> | <挂载点>
    脱机磁盘操作工具
      操作时,一次只能指定一个:
         -c:创建磁盘。其他创建选项必须
                                被指定。只有本地虚拟磁盘可以
                                创建。
         -d:对指定的虚拟磁盘进行碎片整理。只要
                                可能会对本地虚拟磁盘进行碎片整理。
         -k:缩小指定的虚拟磁盘。只有本地
                                虚拟磁盘可能会收缩。
         -n <源磁盘>:重命名指定的虚拟磁盘;需要
                                指定目标磁盘名。只有本地虚拟
                                磁盘可能被重命名。
         -p:准备挂载的虚拟磁盘
                                装载点缩小。
         -r <源磁盘>:转换指定的磁盘;需要指定
                                目的磁盘类型。对于本地目标磁盘
                                必须指定磁盘类型。
         -x <新容量>:将磁盘扩展到指定的容量。只要可以扩展本地虚拟磁盘。
         -R:检查稀疏虚拟磁盘的一致性和尝试修复任何错误。
         -e:检查磁盘链的一致性。
         -D:使磁盘无效。这只能在磁盘上使用已经从另一个产品复制了。
    
    
      其他选项:
         -q:不记录消息
    
    
      创建和转换的附加选项:
         -a <adapter>:(仅适用于-c)适配器类型
                                (ide,buslogic,lsilogic)。通过lsilogic为其他adapter类型。
         -s <size>:虚拟磁盘的容量
         -t <disk-type>:磁盘类型标识
    
    
      磁盘类型:
          0:单可生长虚拟磁盘
          1:可扩展的虚拟磁盘分为2GB文件
          2:预先分配的虚拟磁盘
          3:预先分配的虚拟磁盘分为2GB文件
          4:预先分配的ESX型虚拟磁盘
          5:压缩磁盘优化流式传输
          6:精简配置的虚拟磁盘 - ESX 3.x及更高版本
    
    
         容量可以以扇区,KB,MB或GB指定。
         可接受的范围:
                               ide/scsi适配器:[1MB,8192.0GB]
                               buslogic适配器:[1MB,2040.0GB]
            例 1:vmware-vdiskmanager.exe -c -s 850MB -a ide -t 0 myIdeDisk.vmdk
            例 2:vmware-vdiskmanager.exe -d myDisk.vmdk
            例 3:vmware-vdiskmanager.exe -r sourceDisk.vmdk -t 0 destinationDisk.vmdk
            例 4:vmware-vdiskmanager.exe -x 36GB myDisk.vmdk
            例 5:vmware-vdiskmanager.exe -n sourceName.vmdk destinationName.vmdk
            例 6:vmware-vdiskmanager.exe -k myDisk.vmdk
            例 7:vmware-vdiskmanager.exe -p <mount-point>
                  (首先需要在<mount-point>上安装虚拟磁盘)


    多文件转单文件
    vmware-vdiskmanager.exe -r "D:\windows.vmdk" -t 0 "D:\windowssingle.vmdk"

    单文件转多文件
    vmware-vdiskmanager.exe -r "D:\windowssingle.vmdk" -t 1 "D:\windowsmultiple.vmdk"
    转多文件会预分配6个如windowsmultiple-s001.vmdk~windowsmultiple-s006.vmdk的vmdk文件,每个文件小于2G,后续磁盘增长会自动增加s-007的文件


    例子相关解读
    例 1:vmware-vdiskmanager.exe -c -s 850MB -a ide -t 0 myIdeDisk.vmdk
    创建1个单文件磁盘,名称myIdeDisk.vmdk,容量850M,磁盘类型IDE
    例 2:vmware-vdiskmanager.exe -d myDisk.vmdk
    对名为myDisk.vmdk进行磁盘碎片整理
    例 3:vmware-vdiskmanager.exe -r sourceDisk.vmdk -t 0 destinationDisk.vmdk
    磁盘类型转换,单文件多文件等类型的转换
    例 4:vmware-vdiskmanager.exe -x 36GB myDisk.vmdk
    扩展磁盘容量,将myDisk.vmdk扩展到36GB
    例 5:vmware-vdiskmanager.exe -n sourceName.vmdk destinationName.vmdk
    文件改名sourceName.vmdk改为destinationName.vmdk
    例 6:vmware-vdiskmanager.exe -k myDisk.vmdk
    压缩名为myDisk.vmdk的虚拟磁盘
    例 7:vmware-vdiskmanager.exe -p <mount-point>
    预挂载需要收缩的虚拟磁盘-p指定挂载点







    展开全文
  • 虚拟机文件类型前文列表VMware 虚拟化编程(1) — VMDK/VDDK/VixDiskLib/VADP 概念简析虚拟磁盘文件 VMDK虚拟磁盘文件(VMDK File) 后缀为 .vmdk,是虚拟机的存储卷,Guest OS File System 储存在 VMDK File,

    目录

    前文列表

    VMware 虚拟化编程(1) — VMDK/VDDK/VixDiskLib/VADP 概念简析

    #虚拟磁盘文件 VMDK
    虚拟磁盘文件(VMDK File) 后缀为 .vmdk,是虚拟机的存储卷,Guest OS File System 储存在 VMDK File,而 VMDK File 又会以文件的形式储存在物理磁盘设备上。VMDK File 支持两种物理磁盘类型:

    • 托管磁盘(Managed Disk):托管磁盘通常指的是 File System Format 为 VMFS 的物理存储设备,能够支持使用光纤、iSCSI 或 SAS 来连接到 ESX/ESXi Host 的存储网络(SAN),也能够支持网络挂载存储(NAS),甚至能够直接挂载到 ESX/ESXi Host 上。在 vCenter 体系中,VMDK File 会被储存于共享的 Datastore 之上,再由 vCenter 管理着这些存储簇(Storage Clusters),这令 vCenter 能够支持在 ESX/ESXi Host 之间迁移虚拟机而不需要移动 VMDK 文件;在 ESX/ESXi Host 体系中,VMDK File 通常存放在物理存储设备的某个 /vmfs/volumes 目录中。
      这里写图片描述

    • 寄宿磁盘(Hosted Disk):寄宿磁盘没有特定的 File System Format 要求,所谓寄宿,即适应 Host 原生的磁盘类型。在 Worksation 体系中,寄宿磁盘会适应 Host File System,而将 VMDK File 储存于本地磁盘之上。

    NOTE:需要注意的是 VDDK 对两种不同类型的磁盘设备的操作函数也是有所区别的,对于托管磁盘,VDDK 应用程序可以利用高级传输接口函数通过 SAN 而不是 LAN 来执行大多数 I/O 操作,以此来提高程序性能,并保护网络带宽。

    用户可以创建的虚拟磁盘类型

    在创建一个虚拟磁盘时,会进行两个操作:分配空间、置零。

    • 厚置备延迟置零(Lazy Zeroed Thick):默认的磁盘创建格式,创建磁盘时会直接从磁盘分配所需空间,但不会即时擦除磁盘上保留的数据,而是在虚拟机执行 I/O 操作时按需要将其置零。简单来说,就是立即完全分配指定的磁盘空间给虚拟机,但延迟对该磁盘空间进行清零操作.

    • **特性:**磁盘性能较好,创建时间短,适合于做池模式的虚拟桌面。

    • 厚置备置零(Eager Zeroed Thick):创建支持群集功能(E.G. FaultTolerance)的厚磁盘格式,创建磁盘时,直接从磁盘分配空间并立即对物理设备上保留的数据置零。所以当虚拟机有 I/O 操作时,就能够直接执行。简单来说,就是立即完全分配指定的磁盘空间给虚拟机, 并立即清零磁盘空间, 所需时间较长。

    • **特性:**磁盘性能最好,创建时间长,适合于做跑运行繁重应用业务的虚拟机。

    • 精简置备(Thin):创建磁盘时,占用磁盘的空间大小根据实际使用量计算,即用多少分多少,提前不分配空间,对磁盘保留数据不置零,且最大不超过划分磁盘的大小。简单来说,就是按实际磁盘使用量动态增长分配磁盘空间,但最大不能超过指定的最大磁盘分配空间。

    • 特性:当有 I/O 操作时,需要先分配空间,再将空间置零,最后才能执行 I/O 操作。当有频繁 I/O 操作时,磁盘性能会有所下降,I/O 不频繁时,磁盘性能较好;创建时间短,适合于对磁盘 I/O 不频繁的业务应用虚拟机。

    VixDiskLib 中支持的虚拟磁盘类型

    :VixDiskLib,即虚拟磁盘库,提供了管理虚拟磁盘的系统调用接口。

    虽然用户能够创建的虚拟磁盘类型只有 3 种,但在底层程序接口中会根据不同的应用场景(E.G. vCenter、ESX/ESXi) 提供多种磁盘类型参数,开发者可能按照实际情况选择相应的虚拟磁盘类型参数。

    • 寄宿磁盘(Hosted Disk)

    • 单片稀疏型 VIXDISKLIB_DISK_MONOLITHIC_SPARSE:只包含一个虚拟磁盘文件并能够动态扩展的虚拟磁盘。

    • 单片平面型 VIXDISKLIB_DISK_MONOLITHIC_FLAT:只包含一个虚拟磁盘文件,提前分配存储空间的虚拟磁盘。创建这种磁盘需要较多的时间,并占用大量空间,但是可能会提供比稀疏型磁盘更好的性能。

    • 分片稀疏型 VIXDISKLIB_DISK_SPLIT_SPARSE:可扩展的虚拟磁盘,整个磁盘被分为多个2GB大小的关联文件。这些文件可以增大到2GB,然后在新的文件中继续扩展。这种类型可以在较老的文件系统上使用。

    • 分片平面型 VIXDISKLIB_DISK_SPLIT_FLAT:提前分配空间的虚拟磁盘,并被分为多个大小为 2GB 的虚拟磁盘文件。这些从 2GB 开始,所以创建它们需要较长的时间,但是能够以 2GB 持续增长。

    • 托管磁盘(Managed Disk)

    • VMFS 平面型 VIXDISKLIB_DISK_VMFS_FLAT:提前分配空间的虚拟磁盘,在 ESX3 或更新的平台上可用,也叫做厚置备磁盘(Thick Disk)。

    • VMFS 稀疏型 VIXDISKLIB_DISK_VMFS_SPARSE:使用一种写时复制(Copy-on-Write, COW)机制来节省存储空间,这是虚拟机常用的快照磁盘类型。

    • VMFS 精简型 VIXDISKLIB_DISK_VMFS_THIN:这种类型假设需要尽可能多的空间,然后以此来扩展虚拟磁盘的大小。能够在 ESX3 以及更新的平台上使用,也叫做精简置备磁盘(Thin Disk)。。

    • 单片流优化 VIXDISKLIB_DISK_STREAM_OPTIMIZED:单片、稀疏格式对数据流进行压缩。这种格式不支持随机读写。

    虚拟机文件类型

    一台 VMware 虚拟机除了包含上述提到的 VMDK File 之外,还包含了各式各样、针对各种场景的配置文件或描述文件,以及特殊文件在 API 中的参数项。

    后缀 描述 API 参数
    [vmname].vmx 虚拟机配置文件
    [vmname].vmdk 如果选择「动态分配磁盘」设置,会创建一个可根据需要空间大小动态增长的 VMDK File。此时该文件是实际的磁盘数据文件。[vmname] 表示虚拟机的名称。在 VMFS 分区上,这是磁盘描述文件的名称。除此之外,该文件还可能保存的是该虚拟机磁盘文件的元数据。 MONOLITHIC_SPARSE
    [vmname]-flat.vmdk Extent description 文件,如果勾选了「立即分配磁盘空间」,虚拟磁盘文件将会提前分配所有空间,不会动态增长。第一个 VMDK File 很小(即上述的元数据文件),并指向一个大的 -flat.vmdk VMDK 文件,此时该文件保存的是虚拟机实际的虚拟磁盘数据。 MONOLITHIC_FLAT、VMFS_FLAT、VMFS_THIN
    [vmname]-ctk.vmdk Change Tracking File 改变追踪文件,保存自上次快照以来的所发生改变的虚拟机数据块的信息。
    [vmname].vmem 虚拟机的内存页面文件,存放虚拟机运行时的内存数据,在虚拟机运行或者崩溃时被创建
    .vmss 虚拟机挂起时的状态信息文件
    .vmsd 虚拟机快照的元数据文件,保存了如快照名、UID(Unique Identifier)、磁盘文件名等信息。在创建快照前,其 size 为 0byte
    .vmtx 虚拟机模板文件
    .nvram 虚拟机 bios 文件
    .vswp 虚拟机交换文件
    .log 虚拟机日志文件
    [vmname]-s<###>.vmdk 如果只勾选「分割成 2GB 大小的文件」,虚拟磁盘文件将会在需要更多空间时才被扩展。第一个 VMDK File 很小,为元数据文件,并指向一系列的其他 VMDK 文件,它们在序号数字前都有一个 S 标志,表明是稀疏类型的(sparse)。VMDK 文件的数字依赖于所需要的磁盘大小。随着数据增长,将会在这个序列中新增更多的 VMDK File。 SPLIT_SPARSE
    [vmname]-f<###>.vmdk 如果勾选「立即分配磁盘空间」和「将磁盘分成 2GB 大小的文件」两个选项,那么虚拟磁盘空间将会提前分配,不会动态扩展。第一个 VMDK File 是一个元数据文件,指向一系列的其他文件,这些文件在数字序号之前都有一个 f(flat) 前缀。数字由磁盘大小决定。 SPLIT_FLAT
    [diskname]-<###>.vmdk 当给虚拟机创建快照时,会生成 redo-log 文件,也叫做子磁盘(child disk)或者差异链接(delta link)。快照文件中有序号数字,但是没有 f/s 前缀。针对原来的父磁盘或者更早的回写日志(即更早的快照)的数据修改,将会写进这些带编号的的 VMDK File 中。 MONOLITHIC_SPARSE、SPLIT_SPARSE
    [vnname]Snapshot.vmsn 虚拟机快照的状态信息文件,用于保存创建快照时虚拟机的状态,包含了指向所有 VMDK File 的信息。这个文件的大小取决于创建快照时是否选择保存内存的状态。如果保存的话,那么这个文件会比分配给这个虚拟机的内存大小还要大几兆 n/a

    VMware 虚拟机的磁盘置备类型

    VMWare ESX/ESXi 有两种硬盘置备方式,厚置备(thick)和精简置备(Thin):

    1、厚置备延迟置零(zeroed thick)
    以默认的厚格式创建虚拟磁盘。创建过程中为虚拟磁盘分配所需空间。创建时不会擦除物理设备上保留的任何数据,但是以后从虚拟机首次执行写操作时会按需要将其置零。
    即: 立即完全分配指定的磁盘空间给虚拟机, 但延迟对该磁盘空间进行清零操作.
    2、厚置备置零(eager zeroed thick)
    创建支持群集功能(如 FaultTolerance)的厚磁盘。在创建时为虚拟磁盘分配所需的空间。与平面格式相反,在创建过程中会将物理设备上保留的数据置零。创建这种格式的磁盘所需的时间可能会比创建其他类型的磁盘长。
    即: 立即完全分配指定的磁盘空间给虚拟机, 并立即清零磁盘空间, 所需时间较长.
    3、精简置备(thin)
    使用精简置备格式。最初,精简置备的磁盘只使用该磁盘最初所需要的数据存储空间。如果以后精简磁盘需要更多空间,则它可以增长到为其分配的最大容量。
    即: 按实际磁盘使用量动态增长分配磁盘空间,但最大不能超过指定的最大磁盘分配空间.

    创建磁盘时,会进行两个操作:分配空间、置零

    1、厚置备延迟置零:
    默认的创建格式,创建磁盘时,直接从磁盘分配空间,但对磁盘保留数据不置零。所以当有I/O操作时,只需要做置零的操作。
    磁盘性能较好,时间短,适合于做池模式的虚拟桌面
    2、厚置备置零(thick):
    创建群集功能的磁盘。创建磁盘时,直接从磁盘分配空间,并对磁盘保留数据置零。所以当有I/O操作时,不需要等待直接执行。
    磁盘性能最好,时间长,适合于做跑运行繁重应用业务的虚拟机
    3、精简置备(thin):
    创建磁盘时,占用磁盘的空间大小根据实际使用量计算,即用多少分多少,提前不分配空间,对磁盘保留数据不置零,且最大不超过划分磁盘的大小。
    所以当有I/O操作时,需要先分配空间,在将空间置零,才能执行I/O操作。当有频繁I/O操作时,磁盘性能会有所下降
    I/O不频繁时,磁盘性能较好;I/O频繁时,磁盘性能较差。时间短,适合于对磁盘I/O不频繁的业务应用虚拟机

    展开全文
  • 首先,如果没有特殊需求,不推荐把基本磁盘转换为动态磁盘。动态磁盘的好处在于磁盘间相互扩容方便,然而现在的电脑硬盘越来越大,一般用不到这个功能。微软最坑的一点是自带的磁盘管理软件可以把基本磁盘转换为动态...
  • 建立两个磁盘文件f1.dat和f2.dat,编写程序实现以下工作: (1)从键盘输入20个整数,分别存放在两个磁盘文件中(每个文件中放10个整数); (2)从f1.dat读入10个数,然后存放到f2.dat文件原有数据的后面。 (3)从...
  • 指定某个目录下的所有子文件夹及里面的内容的遍历我会,但我不知道该怎样遍历所有磁盘,请问刚打开我的电脑显示所有磁盘的那个路径是什么?又或者是有其他方法遍历所有磁盘文件
  • 建立两个磁盘文件f1.dat和f2.dat,编程序实现一下工作 (1)从键盘输入20个整数,分别存放在两个磁盘文件中(每个文件中放10个整数); (2)从f1.dat中读入10个数,然后存放到f2.dat文件原有数据的后面 #...
  • Ubuntu系统打不开windows磁盘文件

    千次阅读 2017-08-24 15:07:26
    Ubuntu系统打不开windows磁盘文件的解决方法
  • 操作系统课程设计 模拟磁盘文件系统实现

    千次阅读 多人点赞 2019-08-26 11:36:53
    模拟磁盘文件系统实现前言实现代码 前言 操作系统的课程设计,设计一个简单的文件系统,要求: (1) 支持多级目录结构,支持文件的绝对读路径; (2) 文件的逻辑结构采用流式结构,物理结构采用链接结构中的显式...
  • 1)从键盘输入20个整数,分别存放在两个磁盘文件中,每个文件中放10个整数 2)从f1.dat读入10个数,然后存放在f2.dat文件原有数据后面 3)从f2.dat中读入20个整数,对它们进行从小到大的顺序存放在f2.dat中(不...
  • 虚拟机虚拟磁盘文件格式转换

    千次阅读 2016-10-13 21:50:39
    虚拟机磁盘文件格式转换 vdi是VirtualBox出的文件格式,vmdk是VMWare出的文件格式,有个需求是将vdi文件转为vmdk文件,以至于VMWare能加载虚拟磁盘 cmd命令:D:\Oracle\VirtualBox\VBoxManage clonehd F:\...
  • 常见磁盘文件系统格式

    千次阅读 2016-07-05 17:50:49
    NTFS(win)最大分区2TB,支持大文件读写目前多用于电脑、移动硬盘等各种大中型空间容量的磁盘。 FAT16:最大分区2GB,我们以前用的DOS、Windows 95都使用FAT16文件系统 FAT32(win)最大分区2TB,兼容性好些,适合移动...
  • Linux: 磁盘文件系统管理

    万次阅读 2014-09-28 23:56:23
    du:评估文件系统的磁盘使用量(常用在推估目录所占容量)# df [-ahikHTm] [目录或文件名] 选项与参数: -a :列出所有的文件系统,包括系统特有的 /proc 等文件系统; -k :以 KBytes
  • LINUX下新增的磁盘建立分区,直接建立文件系统并挂载:  不是都要先使用FDISK进行分区的么?怎么直接跳过了这步,直接建立文件系统,并挂载了呢? 解决方法: 假设新硬盘是 /dev/sdc fdisk操作的是/dev/sdc ,...
  • 1、从键盘输入若干个字符,逐个存到磁盘文件data.txt中,直到输入’\n’为止,并将建立的文本文件的内容在存入文件的同时,在屏幕上显示出来:
  • Linux磁盘文件系统管理

    千次阅读 2016-06-26 22:26:51
    系统管理的重要任务之一就是管理好自己的磁盘文件系统,每个分区不可太大也不能太小,太大会造成磁盘容量的浪费,太小则会产生文件无法存储的困扰。 认识EXT2文件系统 Linux最传统的磁盘文件系统使用的是EXT2。 ...
  • 虚拟磁盘文件占用的空间会越来越大,就算从客户机里面删除了很多文件,但这些空间并未释放出来,qcow2文件仍然占用大量的主机存储空间。 虽然qcow2有一个特点,客户机需要时才分配存储空间,这工作的一直很好。但是当...
  • 这是我前段时间做了一个操作系统课程设计作业,使用java实现了命令行输入对虚拟文件进行管理。 下面是课程设计要求: ... 题目五 模拟磁盘文件系统实现  一、课程设计目的  ... 选择题目“模拟磁盘文件系统实
  • 认识VMware vSphere的虚拟磁盘文件

    千次阅读 2015-05-18 13:33:30
    大家都知道在我们的VMware vSphere虚拟化环境中虚拟磁盘文件是一个.vmdk的文件。但是实际上是否就是这样一个vmdk文件这么简单呢?下面我就以一个实例来验证一下: 1、首先在ESXi主机上创建一台虚拟机VM01(如下图)...
  • 4-4 磁盘文件最优存储问题 问题描述 设磁盘上有n 个文件 f1,f2,...,fnf1,f2,...,fnf_1, f_2 ,..., f_n ,每个文件占磁盘上 1 个磁道。这n 个文件的检索概 n率分别是 p1,p2,...,pnp1,p2,...,pnp_1 , p_2 ,..., p_...
  • 最近用到了VirtualBox虚拟机,系统安装好并且配置好之后,检查发现虚拟机硬盘文件巨大。看了看客户机资源管理器中并没有占用这么多磁盘空间,这么多虚高的空间应该可以进行压缩的。于是查了查资料,发现这个想法是...
  • 一般来说,PageOfficeCtrl控件的WebOpen方法的第一个参数是待打开文档的URL,此URL可以...现在为了更加方便开发者编程,WebOpen支持打开服务器磁盘文件。也就是说,第一个参数可以写成服务器文件的绝对磁盘路径。例如:
  • #include &lt;stdio.h&gt;#include &lt;stdlib.h&... //定义指向FILE类型文件的指针变量 char ch, filename1[100], filename2[100]; //定义两个字符数组,分别存放两个数据文件名 printf(...
  • Virtualbox .vdi虚拟磁盘文件瘦身方法

    万次阅读 2016-09-08 19:50:57
    最近磁盘空间不够多了,检查发现虚拟机硬盘文件巨大。看了看客户机并没有占用这么多磁盘空间。于是准备给虚拟磁盘瘦个身。 查了查资料,发现这个想法是可行的。vdi是Virtualbox在建立虚拟空间时的动态磁盘格式,相...
  • Ubuntu虚拟机与物理机磁盘文件共享的设置: 要在虚拟机里看到物理主机的磁盘文件,必须设置【共享】。首先要在物理主机上建立一文件夹,目的是专供虚拟机使用,并且把这个文件夹设置成网络共享(右键共享与安全)。...
  • 贪心算法-磁盘文件最优存储问题

    千次阅读 2018-06-02 19:34:41
    题意:设磁盘上有n个文件,f1,f2,…,fn,,每个文件磁盘上1个磁道。这n个文件的检索概率分别是p1,p2,…,pn,且p1+p2+…+pn =1。磁头从当前磁道移到被检信息磁道所需的时间可用这2个磁道之间的径向距离来度量。如果...
  • 【java】读写磁盘文件

    千次阅读 2018-04-23 13:08:32
    一、读txt文件public static String readFile(File file, String charset){ //设置默认编码 if(charset == null){ charset = "UTF-8"; } if(file.isFile() &amp;&amp; f...
  • 创建虚拟机时,WMware对虚拟磁盘默认选取的是 “将虚拟磁盘拆分成多个文件”,同时也提示:拆分磁盘后,可以更轻松地在计算机之间移动虚拟机,但可能会降低大容量磁盘的性能。 如何将其转回单个文件呢?VMware自带...
  • 5.用记事本打开虚拟机配置文件(.vmx) 6.将vmdk路径改为vhd磁盘路径(起先你的vhd虚拟磁盘必须是有系统的,才能跳过VMware的转换步骤!) 7.打开VMware虚拟机 8.如果问是否转换选保留原格式 这样就完成啦!!! .....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,062,641
精华内容 425,056
关键字:

怎么建立磁盘文件