我正在尝试为我的 ubuntu 服务器操作系统实施一个良好的备份策略。我的服务器上有多个硬盘。所以我的计划是每天使用 rsync 将除用户数据之外的所有内容复制到另一个驱动器,并保留一周的副本。因此,如果出现任何问题,我只需运行 rsync 将文件复制回安装操作系统的“/”驱动器。安装操作系统的驱动器上有两个分区:nvme1p1,用于保存启动 efi;nvme1p2,用于保存所有常用操作系统文件夹(bin、dev 等、lib...)
因此我每天都会运行下面的 bash 脚本:
#!/bin/bash
DATE=$(date '+%F')
sudo rsync --exclude={/mnt,/home} -avz / /mnt/data/storage1_1tb/backup_server_os/$DATE
我的服务器最近出现了“busybox”和只读文件系统问题。所以我运行了
sudo rsync -av /mnt/data/storage1_1tb/backup_server_os/2023-11-09 /
我收到一条消息,说无法复制某些文件,重新启动后问题仍然没有解决。最后我不得不fsck -y /
从 root 运行,并且还运行fsck -y /dev/nvme1p2
并fsck -y /dev/nvme1p1
使用实时媒体。当使用实时媒体运行时,它提到了一些脏文件/dev/nvme1p1
。我还没有备份启动 efi /dev/nvme1p1
,我是否也需要这样做,以便在出现问题时将其复制回来。
我的最终目标是,如果我的操作系统出现问题(例如,硬关机导致启动时出现只读文件系统错误),我只需将前几天备份的文件复制回来,重新启动,希望一切都能像前一天一样正常运行。我概述的策略是否合理,如果合理,那么我在 rsync 方面做错了什么(因为在运行 rsync 后,我仍然必须运行 fsck -y 来复制文件)?
答案1
我的服务器最近出现了“busybox”和只读文件系统问题。所以我运行了
sudo rsync -av /mnt/data/storage1_1tb/backup_server_os/2023-11-09 /
当您所在的文件系统/
以只读方式安装时,那么rsync
在这种情况下就无法执行任何操作,即复制,因此,无论您基于在该状态下运行该命令而产生的任何期望都很可能不会实现,并且目标文件系统上的任何内容都不应该发生任何改变...除非您在系统处于不稳定状态时强制以读写模式安装该系统,这也许可以解释:
我收到一条消息,说无法复制某些文件,重新启动后仍然无法解决问题。最后我不得不
fsck -y /
从 root 身份运行,并且运行fsck -y /dev/nvme1p2
并fsck -y /dev/nvme1p1
使用实时媒体。当使用实时媒体运行时,它提到了一些脏文件/dev/nvme1p1
。
...更不用说fsck -y /
这表明您对已经安装的文件系统进行了检查(馊主意),但rsync
似乎已尽力在如此不一致的文件系统状态下复制回其所能复制的内容,您不能将遇到的错误归咎于它,因为这些错误是由您所处的情况造成的......毕竟,它rsync
最适合复制数据,例如由已挂载的文件系统提供/接收的文件......然而,文件系统完整性是使用比在这些操作中可以处理(甚至看到)的级别更低的特殊 inode/文件来维护的rsync
,甚至可能受到超级块或分区表等更低级别元素的影响。
我还没有备份启动 efi
/dev/nvme1p1
,我是否也需要这样做,以便在出现问题时可以将其复制回来。
...这应该是一个相当小的特殊分区,它的状态很少改变,因此可以使用分区克隆实用程序完全克隆/备份该分区,如partclone
在我看来,这是可行的方法...这又引出了你的最后一个问题:
我的最终目标是,如果我的操作系统出现问题(例如,硬关机导致启动时出现只读文件系统错误),我只需将前几天备份的文件复制回来,重新启动,希望一切都能像前一天一样正常运行。我概述的策略是否合理,如果合理,我做错了什么
rsync
,(因为我仍然需要fsck -y
一次又一次地运行rsync
才能将文件复制回来)?
fsck
是一个文件系统/数据结构层工具,比喻地更深一层是rsync
可以看到或处理的,也就是数据本身。因此,rsync
不是备份和恢复/将文件系统状态恢复到过去的一个功能/干净点的工具……为此,您需要一个文件系统、分区或磁盘备份/映像工具……请参阅更深入的相关讨论这里,这里和这里。