目录后端

存储池类型:`dir

{pve} 可以使用本地目录或本地挂载的共享作为存储。目录是一种文件级存储,因此您可以存储任何类型的内容,如虚拟磁盘映像、容器、模板、ISO映像或备份文件。

Note
您可以通过标准的Linux /etc/fstab 挂载额外的存储设备,然后为该挂载点定义一个目录存储。通过这种方式,您可以使用Linux支持的任何文件系统。

这个后端假设底层目录与POSIX兼容,但没有其他假设。这意味着你不能在存储级别创建快照。但是,对于使用`qcow2`文件格式的VM镜像存在一种变通方法,因为该格式内部支持快照。

Tip
有些存储类型不支持`O_DIRECT`,因此你不能在这些存储上使用缓存模式`none`。只需改为使用缓存模式`writeback`即可。

我们使用预定义的目录布局将不同类型的内容存储到不同的子目录中。这种布局被所有文件级存储后端所使用。

Table 1. 目录布局
Content type Subdir

VM images

images/<VMID>/

ISO images

template/iso/

Container templates

template/cache/

Backup files

dump/

Snippets

`snippets/

配置

这个后端支持所有常见的存储属性,并增加了两个额外的属性。`path`属性用于指定目录。这需要是一个绝对的文件系统路径。

可选的 content-dirs 属性允许更改默认布局。它由以下格式的标识符组成的逗号分隔列表构成:

路径类型

在这里,vtype 是存储允许的内容类型之一,而 path 是相对于存储的挂载点的路径。

配置示例(/etc/pve/storage.cfg
dir: backup
path /mnt/backup
content backup
prune-backups keep-last=7
max-protected-backups 3
content-dirs backup=custom/backup/dir

上述配置定义了一个名为 backup 的存储池。该存储池可用于存储最多7个常规备份(keep-last=7)以及每个虚拟机3个受保护的备份。备份文件的实际路径是 /mnt/backup/custom/backup/dir/…​

文件命名规范

这个后端使用了一个定义良好的命名方案来命名虚拟机镜像:

vm-<VMID>-<NAME>.<FORMAT>

<VMID>

这指定了所有者虚拟机。

<NAME>

这可以是一个任意的名字(ascii),不包含空格。后端默认使用`disk-作为名称,其中[N]`会被替换为一个整数,以确保名字的唯一性。

<FORMAT>

指定图像格式(raw|qcow2|vmdk)。

当您创建一个虚拟机模板时,所有虚拟机镜像都会被重新命名,以表明它们现在是只读的,并且可以作为克隆的基础镜像使用:

base-<VMID>-<NAME>.<FORMAT>

Note
这些基础镜像被用来生成克隆镜像。因此,这些文件是只读的,并且永远不会被修改是非常重要的。如果存储支持的话,后端会将访问模式更改为`0444`,并设置不可变标志(chattr +i)。

存储特性

正如上面提到的,大多数文件系统并不支持开箱即用的快照功能。为了解决这个问题,这个后端能够利用`qcow2`内部的快照功能。

克隆也是如此。后端使用`qcow2`基础映像功能来创建克隆。

Table 2. 后端`dir`的存储特性
Content types Image formats Shared Snapshots Clones

images rootdir vztmpl iso backup snippets

raw qcow2 vmdk subvol

no

qcow2

qcow2

示例

请使用以下命令在`local`存储上分配一个4GB的镜像:

pvesm alloc local 100 vm-100-disk10.raw 4G

Formatting '/var/lib/vz/images/100/vm-100-disk10.raw', fmt=raw size=4294967296
successfully created 'local:100/vm-100-disk10.raw'
Note
图片名称必须符合上述命名规范。

实际的文件系统路径显示为:

pvesm path local:100/vm-100-disk10.raw

/var/lib/vz/images/100/vm-100-disk10.raw

你可以通过以下方式删除图片:

# pvesm free local:100/vm-100-disk10.raw