Windows系统中如何标识一个卷(Volume)

【问题】
   从事数据存储底层工作的小伙伴们应该会关心以下两个问题:
   1. 如何标识一个卷?
   2. 新建了一个卷,以挂载文件夹的方式同时挂载到E:\abc和F:\def,此时这两个挂载点如何区分?


【解决方案 – 问题1】
  Windows系统提供两种方式来标识一个卷:用户自定义标签和系统指定GUID。
  用户自定义方式充分体现了Windows系统的友好性,但是以下几种情况我们无法通过卷符和卷标签来轻松识别一个卷:

  1. 卷不需要卷符和标签,比如新加卷以挂载文件的方式被挂在到已有卷的某一空文件路径下;
  2. 不同的卷可以有相同的标签;
  3. 卷符会随着当前系统中卷的添加与删除而改变。

  为了解决这个问题,操作系统使用GUID路径来唯一标识一个卷,其格式如下:"\?\Volume{GUID}",该路径也被称为一个卷的卷名。需要注意的是一个卷可以拥有多个卷GUID路径。

一个新加卷可以有三种挂在模式:

  1. 驱动器字母,例如,“C:\”。
  2. 卷GUID路径,例如,“\?\ volume {26a21bda-a627-11d7-9931-806e6f6e6963}\”。
  3. 挂载文件夹,例如,“D:\MountedVolume\”。

  操作系统在第一次安装卷和格式化卷时为卷分配卷GUID路径。卷和挂载的文件夹函数使用卷GUID路径访问卷。要获取卷的卷GUID路径,可以使用GetVolumeNameForVolumeMountPoint函数。


【解决方案 – 问题2】
  在问题1的基础上,相信大家已经i有所了解,既然是一个卷被格式化后并同时挂载到E:\abc和F:\def,那么通过这两个挂载点都可以访问该卷,这两个挂载点将具有相同的GUID。


【疑问】
  或许你会反问:为什么不试用磁盘序列号来区分?
  据我所知,磁盘序列号在某些场景下是无法区分的,比如现有一个磁盘F的备份BACKUP_F,将其数据恢复至磁盘H,最终极有可能出现的情况是磁盘H的标签变为F,序列号也和F一样。但是可以确定的是两个磁盘的voume GUID path是不会发生变化的。


【参考资料】
https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-volume
https://docs.microsoft.com/en-us/windows/desktop/fileio/volume-mount-point-examples

你可能感兴趣的:(云存储,后端开发,卷GUID路径,挂载文件)