备份与还原

备份有一个自己的程序。它随系统一起提供,安装过程会把它配好,所以既不用买,也不用配置。这一块讲的是它保存什么、什么时候运行,以及关键时刻怎么把一切拿回来。这一整块都属于 Basic。

1

备份与还原程序

这个程序叫“Ticket System Backup & Restore”。它挨着工单系统,桌面上有自己的快捷方式。

有 Windows 版和 Linux 版。是同一个程序,只是分别为各自的操作系统构建。

它有六个标签页。“Restore”列出您已有的备份,“Create Backup”生成一个新的,“Schedule”管定时,“Encryption”显示恢复密钥,“Settings”显示各个路径,“Log”显示日志。

设置已经填好了。程序第一次启动时会自己找出工单系统装在哪里。

备份文件夹在“Backup directory”下面。您可以改它,比如改到另一块磁盘上。

在 Windows 上,程序启动时会请求管理员权限。它的设置对这台电脑的每一位管理员都有效,保存在“%ProgramData%\SMITEY\backup-app”里。

“Restore”标签页,五个备份,各带时间、大小、类型和加密状态。
红色边框落在“Encryption”列上。新备份以“.smbk”结尾,显示为“Encrypted”。ZIP 格式的旧备份显示“Not encrypted”。“Type”列写明一个备份是来自定时任务、手工做的,还是更新前做的。以原始尺寸打开图片
“Settings”标签页,带备份文件夹和数据库信息。
红色边框落在 PostgreSQL 容器的名称上。再往下是随之一起保存的那些卷。以原始尺寸打开图片
2

定时任务从安装那一刻起就在跑

开始之前: 在 Windows 上,程序总是以管理员权限启动,并用这些权限注册定时任务。如果 Windows 不允许任务在没有用户登录时运行,它就仍然绑定在登录上,程序会告诉您。

安装过程会自己配好每日备份。它按工单系统的时区在 23:00 运行。

定时任务放在操作系统里。Windows 上是任务计划程序,Linux 上是 cron 服务。所以不会有一个只为备份而常驻的额外服务。

备份不需要有人登录。在一台从来没人登录的服务器上,它照样运行。

按钮下面那一行告诉您这个任务在操作系统里是否真的存在。打了勾只说明保存过什么。

备份按五个层级保留:14 天、4 周、12 个月、4 个季度和 5 年。一个备份只要在某个层级里是它那一段时间里最新的,就会被保留下来。

算的是日历天,不是文件数。同一天的两个备份算一天。

您手工创建的备份永远不会被自动删除。“Keep manual”那里的 0 就是这个意思。

如果您改了定时任务,您的改动会挺过更新。只有在您从未设置过定时任务时,安装过程才会去设置它。如果您关掉了备份,它就保持关闭。“Remove all scheduled tasks”同样持久:之后的更新不会重新设置定时任务。

“Schedule”标签页,“Daily”已勾上,时间设为 23:00。
红色边框落在“Daily”和时间上。上面那句话点出两条路:任务计划程序和 cron。以原始尺寸打开图片
按钮下面那一行“Registered with the operating system: yes (Daily)”。
这一行每次启动都会重新检查。如果它写着“NO”,就没有任何东西会自己运行,这时请以管理员身份使用“Apply schedule”。以原始尺寸打开图片
六个保留字段:14、4、12、4、5 和 0。
红色边框落在这些层级上。“Keep manual (0 = keep all)”的意思是手工做的备份会一直留着。以原始尺寸打开图片
点击“Apply schedule”之后的“Schedule”标签页,下方显示“02:00 (America/New_York)”和“Registered with the operating system: yes (Daily)”。
红框圈出“Apply schedule”以及它下面的几行。括号里是工单系统的时区。这个时间按该时区计算,而不是按这台计算机的时区。以原始尺寸打开图片
3

一个备份里有什么

一个备份包含构成您系统状态的一切。也就是数据库、文件附件、归档和密钥。只有 SMITEY 之外的数据库不在其中。

密钥是最容易被漏掉的那一部分。它们用来解密保存下来的凭据,比如您邮箱账号的凭据。没有它们,还原回来的就是一堆失效的凭据。

每个新备份是一个以“.smbk”结尾的加密文件。里面是每个卷一个文件、一份内容清单,以及作为文本文件的数据库(如果包含数据库)。

这期间系统照常运行。您的客服人员根本察觉不到有备份在做。

“Estimate size”会事先告诉您数据库有多大。带附件的卷还要另外加上。备份不会被压缩。

什么都不会被覆盖。每个备份都是一个单独的文件,只有清理才会删掉旧的。

只有管理员才能读取备份。安装文件夹中的配置文件和存有首次登录信息的文件也是如此。安装程序和每次更新都会自行设置这些权限。

如果您的数据库运行在自己的服务器上,而不在 SMITEY 容器中,程序就无法备份它。这时请用您自己的工具备份它。在这种情况下,备份只包含附件、归档和密钥,照常加密。更新会自己发现这样的数据库,并切换程序。在那之前,这样的安装上每天的备份会失败,除非您先手动切换。在命令行中,您也可以用“config --database external”手动完成。用“config --database bundled”切换回来。

更多内容见这张卡片: 加密与恢复密钥

“Create Backup”标签页,带“Estimate size”和“Create backup now”两个按钮。
红色边框落在这两个按钮上。上面那句话列出包含哪些内容。以原始尺寸打开图片
底部的消息,带新建文件的完整路径。
做好之后,文件名会出现在窗口底部。时间是文件名的一部分。以原始尺寸打开图片
4

加密与恢复密钥

开始之前: 请把恢复密钥保存在服务器之外。没有它,服务器丢失后任何备份都无法打开。没有人能替您找回它。

每个新备份都会加密。这适用于定时任务的备份、手工做的备份和更新前的备份。您不需要打开任何开关。

备份用 AES-256 加密。安装时会自动创建密钥。在已有的安装上,密钥在第一次更新到带加密的版本时创建。它受保护地存放在服务器上。只有管理员可以读取它。

这保护的是服务器之外的副本。谁在网络驱动器、U 盘或在线存储上找到一份备份,没有密钥就读不了它。谁控制了服务器本身,谁也就拥有密钥。

恢复密钥就是同一个密钥,只是形式便于您抄写下来。它以“SMBK-”开头。您可以在“Encryption”标签页和安装文件夹中的文件“SMITEY-credentials.txt”里找到它。如果您删除了该文件,仍然可以在“Encryption”标签页找到密钥。

“Copy”把密钥放到剪贴板。“Save to file...”把它连同密钥 ID 和日期保存为文本文件。请把它放在例如密码管理器里,或者写在纸上存进保险柜。

在您确认密钥已保存之前,程序会在顶部显示一条黄色提示栏。要确认,请点击“I stored the key outside this server”,并对问题回答“Yes”。提示栏随即消失。标签页之后会显示您确认的时间。

密钥 ID 告诉您一份备份属于哪台服务器。如果一份备份不属于这台服务器,程序会指出它的密钥 ID。然后它会要求提供与之匹配的恢复密钥。

如果程序读不了密钥,它就不做备份。它也不会做未加密的备份。这时“Encryption”标签页会说明密钥无法读取。如果密钥文件完全丢失,下一次备份会创建新密钥。黄色提示栏随后会再次出现,因为新密钥同样需要保存。旧备份仍然只能用旧的恢复密钥打开。

ZIP 格式的旧备份没有加密。您仍然可以还原它们。标签页会显示有多少份。清理时按与其他备份相同的规则删除它们。

在没有桌面的服务器上,“key --show”在命令行中显示同样的内容。

更多内容见这张卡片: 把一切找回来, 在没有桌面的服务器上

“Encryption”标签页,显示恢复密钥、密钥 ID 和三个按钮。黄色提示栏位于顶部。
红色边框落在提示栏、密钥和密钥 ID,以及“I stored the key outside this server”上。图中的密钥来自测试环境。以原始尺寸打开图片
确认之后的同一个标签页,没有提示栏。
上方的边框落在确认的时间上。下方的显示还有多少备份没有加密。以原始尺寸打开图片
5

把一切拿回来

开始之前: 还原会覆盖今天的状态。所选备份之后产生的一切,之后就没有了。

在“Restore”标签页里选出您想要回来的那个备份。然后点“Restore”。

程序会先问一句。它说明会发生什么:今天的状态被覆盖,程序会重启各个容器。如果今天的状态中有已被匿名化的人,会接着出现第二个问题。它会说明人数,并询问还原之后是否重新匿名化这些人。“Yes”是预先选中的。选择“No”时,备份会在没有这一步的情况下还原。如果改为直接关闭窗口,则什么都不会还原。

“Wipe target volumes before restore”这个勾会先把卷清空。这样就不会留下备份当时并不存在的文件。

各个步骤显示在“Log”标签页里。您可以在那里逐条看到程序做了什么。如果您对第二个问题回答了“Yes”,末尾的一行会说明工单系统将在下一次夜间执行中重新应用多少项匿名化。如果无法转交,日志会改为显示一条警告。如果出现了警告,窗口底部的状态行会显示警告数量。

如果备份包含数据库,完整的状态会回来。工单、评论、历史、文件附件、记录的工时和知识库,都和备份当时一模一样。

之后系统又可以用了。在一套小规模的安装上,这用不了一分钟。

如果备份包含数据库,数据库要么完整回来,要么根本不回来。各个卷在它之后跟上。如果某个卷失败,数据库已经回来了,但可能缺少文件;“Log”标签页会显示哪一步失败了。无论哪种情况,程序之后都会重新启动各个容器,即使还原失败了也一样。

旧版本的备份可以还原到新版本里。系统下次启动时,会把数据库升到自己的版本。

满意度调查的同意和退订会不经询问就被带过去。即使您对第二个问题回答“No”,也是如此。应用程序在恢复之前,从正在运行的安装中读取它们。之后,“Log”标签页中的一行会给出数量,例如“12 consent and unsubscribe record(s) were carried over.”工单系统在首次启动时接手它们。因此,在备份之后做出的同意或退订仍然有效。如果转移失败,日志中会显示一条警告。恢复仍然算作成功。

程序先完整检查加密的备份。其间状态栏显示“Checking the encrypted backup before anything is changed...”。之后它才停止各个容器。如果文件已损坏或被改动过,它会停下并报告“The backup file is damaged. Nothing was changed.”

如果备份来自另一台服务器,程序会要求提供那台服务器的恢复密钥。这发生在各个问题之后。窗口“Recovery key needed”会指出备份的密钥 ID。如果缺少这台服务器的密钥,也会出现同一个窗口。

输入错误会在任何改动之前被发现。状态栏随后报告“The recovery key has a typing error. Check each character.”之后窗口会再次询问。如果密钥属于另一个备份,状态栏报告“This recovery key does not belong to this backup.”点击“Cancel”,程序会停下并报告“Restore cancelled. Nothing was changed.”

程序不会采用您输入的密钥。它保留自己的密钥。新备份仍然用这台服务器的密钥制作。如果您在新服务器上还原,请同样保存那台服务器的恢复密钥。

不含数据库的备份只还原附件、归档和密钥。现有的密钥会保留。数据库保持原样。程序会在还原前说明这一点并询问。选择“No”则不改动任何东西。

如果安装设置为使用自己的数据库,即使备份中含有数据库,程序也会跳过数据库部分。例如较旧的备份就是这种情况。程序会先询问。选择“No”则不改动任何东西。

列表里选中的一个备份,下面是勾选项和“Restore”按钮。
红色边框落在勾选项和“Restore”上。没有选中行时,这个按钮是关着的。以原始尺寸打开图片
还原前的确认,带“Yes”和“No”两个按钮。
这个提问点出两个后果:今天的状态被覆盖,各个容器会被重启。以原始尺寸打开图片
还原之后的日志,底部是消息“Restore complete.”。
每一步都带着时间写在里面。最后程序报告“Restore complete.”以原始尺寸打开图片
第二个提问“6 person(s) were anonymized in the current system.”,带有“Yes”和“No”两个按钮。
红框圈出提问和“Yes”。“Yes”是预先选中的。这个数字是今天的状态中已被匿名化的人数。以原始尺寸打开图片
恢复之后的状态行:“1 warning(s) while carrying over anonymizations and survey consents. See the Log tab.”
红框圈出状态行。它只显示警告的数量。具体发生了什么,请看“Log”标签页。以原始尺寸打开图片
恢复密钥的请求窗口,带有备份的密钥 ID、一个输入框以及“OK”和“Cancel”按钮。
红色边框落在带密钥 ID 的问题和输入框上。输入密钥时,连字符、空格以及大小写都无关紧要。图中的密钥来自测试环境。以原始尺寸打开图片
6

在没有桌面的服务器上

服务器常常没有桌面。所以同一个程序也能当命令用。

日常需要的是五个命令:“backup”做备份,“list”显示已有的备份,“restore”把某个拿回来,“schedule”设定时,“config”显示设置。关于密钥,还有“key”和“decrypt”。

它们背后是和窗口里一样的那个程序。不存在第二条做别的事情的路。

程序在“/opt/smitey/Backup”里。您用“sudo”调用它,后面加上命令。容器是以“root”运行的,所以备份也需要这些权限。

下面六个方框可以直接复制。它们覆盖了日常真正用得上的内容。

还原在这里同样会问一句。只有加上“--yes”它才会真的执行。这时它也会把今天的状态中的匿名化一并转交,和窗口中的“Yes”一样。加上“--no-reapply”时,它会在没有这一步的情况下执行。

服务器上有一个文件可以把这些看个明白。它叫“BACKUP-RESTORE.txt”,放在“/opt/smitey”里。它把定时任务、每个命令和还原的路子按您自己的节奏再讲一遍。它有德文版和英文版:您在安装时选了德语,拿到的就是德文版,否则是英文版。两个版本也都放在“/opt/smitey/docs”下面。

“key --show”显示恢复密钥、密钥 ID 和未加密备份的数量。密钥保存到服务器之外后,您用“key --confirm-stored”确认这一点。

用“--key-file”还原来自另一台服务器的备份。您指定的文件包含恢复密钥。由“Save to file...”生成的文件同样可用。也可以不用文件,而用环境变量“SMITEY_BACKUP_KEY”。使用“sudo”时,把它直接写在程序之前,即“sudo SMITEY_BACKUP_KEY=<密钥> /opt/smitey/Backup/TicketSystemBackup restore …”。这样密钥会进入 shell 历史记录。如果密钥不匹配,不会改动任何东西。

“decrypt”把备份的内容以未加密文件的形式写入一个空文件夹。这些文件没有加密。它们包含密码和个人数据。用完后请立即删除。

显示已有的备份

sudo /opt/smitey/Backup/TicketSystemBackup list

每一行都带时间、原因、大小和文件名。和窗口里是同一份列表。

显示定时任务

sudo /opt/smitey/Backup/TicketSystemBackup schedule --show

第一行写着设定的时间及其时区。最后一行说明这个任务在操作系统里是否真的存在。如果写着“NO”,就没有任何东西会自己运行。

更改定时任务

sudo /opt/smitey/Backup/TicketSystemBackup schedule --daily 23:00 --keep 14

时间按工单系统的时区计算。“--keep”说明保留多少个每日备份。“schedule --off”把每日备份关掉。

立刻做一个备份

sudo /opt/smitey/Backup/TicketSystemBackup backup

这个备份算作“Manual”。手工做的备份永远不会被自动删除。

显示恢复密钥

sudo /opt/smitey/Backup/TicketSystemBackup key --show

最后一行说明您是否已经确认密钥已保存。该命令不会创建密钥。

还原来自另一台服务器的备份

sudo /opt/smitey/Backup/TicketSystemBackup restore <file>.smbk --yes --key-file /root/recovery-key.txt

把 <file> 替换为备份的名称或路径。您事先创建文件“/root/recovery-key.txt”。其中包含恢复密钥。由“Save to file...”生成的文件同样可用。

一台 Linux 服务器上的命令行,上面是“list”给出的列表,下面是“key --show”的输出。
上面“list”显示各个备份。ZIP 格式的旧备份带有注释“(Not encrypted)”。下面“key --show”给出恢复密钥、密钥 ID 和未加密备份的数量。图中的密钥来自测试环境。以原始尺寸打开图片
7

备份就放在同一台机器上

开始之前: 放在系统旁边的备份挡不住磁盘损坏。请定期把这些文件复制到别的地方。

备份是您设定的那个文件夹里的文件。那个文件夹和工单系统在同一台机器上。

对常见的情况来说这没问题。误删的数据、失败的更新或者数据里的错误,都能覆盖到。

它挡不住磁盘坏掉。磁盘没了,备份也跟着没了。

所以请把文件复制到别处。一个网络驱动器、第二台服务器或者网络里的存储就够了。

复制出去的文件可以在任何服务器上加载回来。在另一台服务器上,这需要恢复密钥。用“Import backup file…”把文件重新放进列表。

这些副本是加密的。没有恢复密钥,没有人能读取它们。所以不要把密钥放在副本旁边。以“.zip”结尾的旧备份没有加密。

“Settings”标签页,带“Backup directory”字段。
“Backup directory”字段写明文件在哪儿。这就是您应该定期复制到别处的那个文件夹。以原始尺寸打开图片
8

每次更新之前系统会自己做备份

更新会事先做一个自己的备份。这和您的定时任务无关,也不用您勾任何东西。

它保存的和平常一样:数据库、附件、各个归档和密钥。如果数据库运行在 SMITEY 之外,更新只备份附件、归档和密钥。

这个备份由程序“Ticket System Backup & Restore”制作。它和其他备份一样是加密的,放在同一个文件夹里。在列表中,它的类型是“Update”。这类备份最新的三份会保留。程序会自己删除更早的。

更新前的提示会告诉您这一点。您不用自己记着先做备份。

如果这次备份失败,更新会在任何东西被替换之前停下。SMITEY 之外的数据库不会拖住更新。此时更新会切换程序,使每天的备份同样不包含该数据库。请用您自己的工具备份这个数据库。

更多内容见这张卡片: 一键更新

更新前的确认,带关于备份的提示。
“A full backup is taken automatically beforehand”这句话是提问的一部分。备份在任何东西被替换之前就已经跑完。以原始尺寸打开图片

截图来自 1.3.1 版本。图中所示的界面到 1.13.3 版本为止没有变化。唯一看起来不同的是侧边栏底部的版本号。