![580bc0a4d19581c5eabc803eec872fc3.png](https://i-blog.csdnimg.cn/blog_migrate/ff4a27bc45cf285f2f84e1de82162a16.jpeg)
VFS的主要操作对象与结构包括:file,inode,superblock,dentry。
superblock表示被挂载的文件系统实例,包含存储设备、inode指针、块大小、superblock操作、文件系统类型、文件系统信息等。一般它是存储于硬盘中的文件系统控制块。
inode具体文件的相关信息,包含它在具体文件系统内的inode编号,在用户控件用命令'ls -i'查看。
dentry是文件系统中目录与文件的映射关系。
块设备
通用块设备层会处理所有与块设备相关的请求,如将数据拷贝到内存、管理逻辑卷LVM、I/O请求调度等。Linux内核中与块设备相关的元素有sector(扇区)、block(块)、segment(段)、page(页),它们一起被用于描述内核通用块设备层。其中sector代表存储控制器每次能读写的最小数据单位(512B),I/O调度器和具体设备驱动也能以sector为单位进行数据操作。block是文件系统存储文件数据块的最小单位,通常由多个sector组成。segment是一个内存页,它包含多个block。page是存储cache中由多个segment组成的最小数据单位。
块设备驱动Linux存储栈中,实际物理设备之上就是真正的块设备驱动了,它从上层调度器获得I/O请求后开始向存储设备读写数据。SCSI设备驱动由上中下3层实现,上层驱动用于和通用块设备层交互,下层控制具体的存储设备,中间层类似网络路由功能,它将受到的请求按照一定规则传递到不同的设备节点实现诸如容错等额外功能。
虚拟机硬盘存储
*虚拟机存储*指的是模拟器本身可以加载的各种形式的存储。比如:NAS,SAN,iSCSI,SCSI,多路径(/dev/mapper中的所有卷)、rbd(ceph块存储Rados Block Device,需QEMU支持)、sheepdog、Glusterfs卷、zfs卷等。可以看出,libvirt/QEMU本身支持很多种类型的外部存储,它们最终映射到QEMU后就是各种格式的虚拟硬盘,比如常见的qcow2、raw。
虚拟硬盘镜像是模拟器直接用作虚拟机硬盘的文件,它将内容按照一定格式进行存储。
镜像格式:raw、qcow、qcow2、vmdk、vhdx等。