13.4. 使用快照进行备份

继前面的示例之后,我们现在想要使用“ops”卷组中的额外空间,以便每天晚上进行数据库备份。为了确保写入磁带的数据是一致的,我们使用 LVM 快照逻辑卷。

快照卷是一种特殊类型的卷,它呈现快照创建时卷中的所有数据。有关更详细的描述,请参阅第 3.8 节,快照。这意味着我们可以备份该卷,而无需担心备份进行时数据被更改,并且我们不必在备份进行时使数据库卷脱机。

Note

在 LVM1 中,这种类型的卷是只读的,但 LVM2 默认创建读/写快照。

13.4.1. 创建快照卷

“ops”卷组中有 500 多兆字节的可用空间,因此我们将使用所有这些空间来为快照逻辑卷分配空间。快照卷可以根据需要设置大小,但它必须足够大,以容纳快照生命周期内原始卷可能发生的所有更改。因此,这里允许数据库卷发生 500 兆字节的更改应该足够了。

# lvcreate -L592M -s -n dbbackup /dev/ops/databases 
lvcreate -- WARNING: the snapshot must be disabled if it gets full
lvcreate -- INFO: using default snapshot chunk size of 64 KB for "/dev/ops/dbbackup"
lvcreate -- doing automatic backup of "ops"
lvcreate -- logical volume "/dev/ops/dbbackup" successfully created

          

Warning完整快照已自动禁用
 

如果快照逻辑卷已满,它将被删除(变得不可用),因此分配足够的空间至关重要。所需的空间量取决于快照的使用情况,因此没有固定的方案可循。如果快照大小等于原始大小,则永远不会溢出。

13.4.2. 挂载快照卷

我们现在可以创建一个挂载点并挂载该卷

# mkdir /mnt/ops/dbbackup
# mount /dev/ops/dbbackup /mnt/ops/dbbackup
mount: block device /dev/ops/dbbackup is write-protected, mounting read-only
          

如果您使用 XFS 作为文件系统,则需要添加nouuid选项到 mount 命令

# mount /dev/ops/dbbackup /mnt/ops/dbbackup -onouuid,ro
          

13.4.3. 进行备份

我假设您将拥有比这更复杂的备份策略!

# tar -cf /dev/rmt0 /mnt/ops/dbbackup
tar: Removing leading `/' from member names
          

13.4.4. 删除快照

备份完成后,您现在可以卸载该卷并将其从系统中删除。您应该在使用完快照卷后将其删除,因为它们会复制写入原始卷的所有数据,这可能会损害性能。

# umount /mnt/ops/dbbackup
# lvremove /dev/ops/dbbackup 
lvremove -- do you really want to remove "/dev/ops/dbbackup"? [y/n]: y
lvremove -- doing automatic backup of volume group "ops"
              lvremove -- logical volume "/dev/ops/dbbackup" successfully removed