使用 overlayfs

使用 overlayfs

我有一个非常大的服务器(Minecraft),使用了数十 GB 的文件。每两天我会进行一次备份,但由于服务器太大,我不得不将其关闭 45 分钟,直到备份完成。

如果我在服务器运行时备份,备份文件夹会损坏,因为并非所有文件都是同时备份的,并且存在重复数据、丢失数据和其他问题。将服务器文件夹递归地修改为 440(只读)会使服务器发送数千个错误,有时会导致服务器崩溃或损坏数据。

我想要做的是将服务器切换到只读模式,但允许它写入临时的“日志”文件,这些文件将在备份完成后写入真实文件。

这有可能吗?如果可以,我应该使用什么工具来做到这一点?我正在考虑将服务器文件夹切换为模拟这种情况的文件夹或分区的软链接。

答案1

使用 overlayfs

使用覆盖文件系统位于服务器的根目录(服务器文件夹)。

  1. 创建指向服务器文件夹的只读链接,这样可以在覆盖真实目录的同时从中备份数据

    mkdir -p /路径/到/ReadOnlyServerRoot sudo mount --bind /路径/到/serverRoot /路径/到/ReadOnlyServerRoot -o remount,ro

  2. 关闭服务器以便正确关闭文件和数据库

  3. 保护实际服务器根目录,/path/to/serverRoot以免被写入。

    sudo mount -t overlayfs overlayfs /path/to/serverRoot -o rw,uppderdir=/path/to/changes,lowerdir=/path/to/serverRoot
    

更改和新添加的数据存储在/path/to/changes。修改文件时,会在 上创建新副本/path/to/changes/path/to/file并更新此文件。

  1. 启动服务器

  2. 现在您可以从 /path/to/ReadOnlyServerRoot

  3. 备份完成后关闭服务器

  4. 取下盖子

    sudo umount /path/to/serverRoot
    
  5. 使用同步软件,例如同步,将变更数据合并到服务器文件中。

    rsync /path/to/changes /path/to/serverRoot
    rm -rf /path/to/changes
    
  6. 启动服务器

有关 overlayfs 选项的更多信息,请参阅回答。

步骤 2、4、6 和 9 是可选的,但强烈建议执行:在创建和删除服务器文件夹上的覆盖时,强烈建议关闭服务器(停机时间仅数秒)以确保成功备份,因为服务器可能会在其内存中缓存部分数据,并且只有部分数据会被更新。因此,备份包含无效/不可用的数据,进而导致数据丢失。

使用文件系统快照

切换到支持快照喜欢btrfs或者lvm

更新

如果 overlayfs 不可用,请使用aufsunionfs
联合文件系统

    mount -t unionfs -o dirs=/branch_rw=rw:/branch_ro=rounionfs/union

在目录中创建一个 /union具有分支目录 /branch_rw(可写)和 /branch_ro (只读)的联合。

奥夫斯

mkdir /tmp/dir1
mkdir /tmp/aufs-root
mount -t aufs -o br=/tmp/dir1:/tmp/dir2 none /tmp/aufs-root/

前两个命令创建了 2 个新目录。 是mount.aufs将文件系统挂载为联合挂载的命令。 mount 命令指定它将联合挂载和/tmp/dir1。目录将包含和的内容。/tmp/dir2/tmp/aufs-root/tmp/aufs-root/tmp/dir1/tmp/dir2

答案2

如果您在启用逻辑卷管理器 (LVM) 的情况下创建文件系统,那么您可以创建文件系统快照,然后在服务器从未关闭时备份该快照。

这里有三页的教程:http://www.howtoforge.com/linux_lvm_snapshots

尽管这可能意味着您必须重新创建文件系统。

相关内容