[ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 下一页 ]


Debian GNU/Linux 系统管理员手册 (过时文档)
第 12 章 - 备份与恢复


作者 = Tapio Lehtonen

主题 = 为什么要备份, 备份什么, 如何备份, 备份设备与介质


12.1 为什么要备份?

需要备份以防文件或文件组丢失。文件丢失的原因包括

备份在上述所有情况下都有帮助。此外,访问文件的旧版本也可能很有用,例如,一个配置文件在一周前工作正常,但自那以后它被更改了,没有人记得如何改的,现在就是无法工作了。

还有其他解决方案,如果您负担得起,最好也拥有它们。这些包括

这些都有帮助,但如果您有任何不想在电脑上丢失的东西,请确保有备份并且可以恢复。

本章比其他章节更具通用性,其他章节都是特定于 Debian GNU/Linux 的。备份设备和备份软件种类繁多,如果不假设例如 SCSI 磁带驱动器和用于写入备份的 GNU tar,就很难深入细节。第 软盘,12.3.1 节 给出了三个详细的示例,在对其他类型的介质进行备份时,请将它们作为指南。


12.2 备份什么?

如果备份介质上有空间,并且时间限制允许备份运行足够长的时间,那么备份所有内容可能是最明智的。您可以跳过 /tmp 或其他已知只有临时文件且无人想要备份的地方。

如果空间或时间限制造成约束,请考虑不备份以下内容


12.3 备份设备和介质

您需要一些介质来存储备份。最好使用可移动介质,将备份存储在远离计算机的地方,并获得“无限”的备份存储空间。

如果备份是在线的,它们可能会被错误地擦除。如果备份与原始数据在同一磁盘上,那么如果磁盘发生故障且不再可读,它们根本没有帮助。如果备份介质很便宜,则可以每天进行备份并无限期地存储它们。

以下小节讨论了不同类型的备份介质。作为一个实践示例,软盘用于以不同的方式备份目录树。在使用其他介质时,请将这些示例作为指南。


12.3.1 软盘

软盘很便宜,并且在 PC 电脑上通常都有软盘驱动器。另一方面,写入软盘速度不是很慢,并且 1.4MBytes 的容量不是很大。如果备份无法放入一个介质,那么进行备份就变成了一项艰巨的任务,因为不得不站在旁边不时更换介质。

但是,如果要备份的数据可以放入一张软盘中,它们是一个合理的选择。压缩数据通常意味着它使用大约原始大小的 50%。因此,您可以期望通过压缩在一张 1.4M 软盘上获得近 3MBytes 的空间。

示例使用 tar,因为它几乎在所有 Unix 版本以及某些其他操作系统上都可用,它可以保留文件所有权和日期戳,并直接写入设备或文件。

有不同的方法可以将软盘与 tar 一起使用

  1. 在软盘上创建一个 Linux 文件系统,挂载,像写入任何 Linux 磁盘一样写入,然后卸载软盘,

  1. 直接写入设备 /dev/fd0

  1. 将软盘与 DOS 文件系统一起使用,并使用 mcopy 将 tar 文件复制到那里(请参阅命令 info mtools 的信息文件 mtools)。

这三种方法对应于三类不同的介质

  1. 随机访问或直接访问,主要是磁盘。该介质就像任何磁盘或目录树,可以执行 lscp 和其他访问文件的命令。通过简单地复制回来,很容易从备份介质中恢复一个文件。

  1. 串行访问,例如磁带驱动器。读取或写入介质从开头开始,到结尾结束。不可能直接从中间开始。

  1. 作为 DOS 文件系统的介质。这在所有类型的操作系统上都是可读的,如果您需要在其他类型的计算机上读取备份,这将非常有用。


12.3.1.1 备份示例 1,适用于磁盘介质

这是一个将 ~/Work/Debian-doc 目录树备份到软盘的示例。首先检查目录树有多大

     $ cd ~/Work
     tale@dilbert ~/Work
     $ du -sk Debian-doc
     1005    Debian-doc
     tale@dilbert ~/Work
     $

这显示 1.005MBytes,因此应该可以放入一张软盘。

此示例使用带有 Linux 文件系统的软盘作为可移动介质。

现在在软盘上创建了一个 minix 文件系统。这是 Linux 用于软盘和其他小型介质的文件系统。请注意,格式化时介质上的所有数据都将丢失。第一个软盘驱动器是设备 /dev/fd0

     dilbert# mkfs -t minix -c /dev/fd0 1440
     480 inodes
     1440 blocks
     Firstdatazone=19 (19)
     Zonesize=1024
     Maxsize=268966912
     
     160 ...320 ...480 ...640 ...800 ...960 ...1120 ...1296 ...dilbert#

现在挂载软盘,运行备份并进行测试。请注意,挂载点 /A 必须已经存在(请参阅 mount(8))。为了允许普通用户 tale 对此软盘上的文件系统具有写入权限,所有者和组所有者已更改。

     dilbert# mount -t minix /dev/fd0 /A
     dilbert# chown tale.tale /A
     dilbert# ls -ld /A
     drwxr-xr-x   3 tale     tale         1024 Dec  3 21:21 /A
     dilbert#

检查软盘是否已挂载以及是否有可用空间非常有用,例如使用命令 df

     $ df -h
     Filesystem            Size  Used  Avail  Capacity Mounted on
     /dev/sda5              99M   22M    72M     23%   /
     /dev/sda6             964M  565M   349M     62%   /usr
     /dev/sda7             190M   33M   147M     18%   /var
     /dev/sda8             2.7G  1.3G   1.2G     53%   /export
     /dev/sdb2             3.8G  2.4G   1.3G     65%   /export2
     dilbert:/export/home  2.7G  1.3G   1.2G     53%   /amd/dilbert/export/home
     /dev/fd0              1.4M  1.0K   1.4M      0%   /A
     tale@dilbert ~/Work
     $

现在使用 tar 将整个目录树复制到软盘。最好使用 tar,它可以保留文件所有权和权限。如果您尝试使用 cp -r,您会注意到备份并不完全相同。

     $ cd Work 
     tale@dilbert ~/Work
     $ tar cf - ./Debian-doc | ( cd /A ; tar xpBf - ) 
     tale@dilbert ~/Work
     $ ls -l /A
     total 1
     drwxr-xr-x   6 tale     232           320 Dec  3 20:41 Debian-doc
     tale@dilbert ~/Work
     $

您还可以执行 ls -lR /A 以查看所有文件是否都在那里。

在这里,我们将备份恢复到 /tmp/Debian-doc

     $ cd /A  
     tale@dilbert /A
     $ ls -l
     total 1
     drwxr-xr-x   6 tale     232           320 Dec  3 20:41 Debian-doc
     tale@dilbert /A
     $ tar cf - ./Debian-doc | ( cd /tmp ; tar xpBf - )
     tale@dilbert /tmp
     $ ls -l
     total 7512
     drwxr-xr-x   6 tale     tale         1024 Dec  3 20:41 Debian-doc
     -rw-------   1 root     root       599648 Dec  3 22:25 foo.foo
     drwx------   2 tale     tale         1024 Dec  2 20:58 orbit-tale
     -rw-rw----   1 tale     tale      4054572 Nov 24 21:53 tale
     tale@dilbert /tmp
     $ du --summarize --kilobytes Debian-doc/
     1005    Debian-doc
     tale@dilbert /tmp
     $

看起来备份在软盘上,我们甚至可以将其读回。值得检查您的备份方法是否有效,并且备份确实可以恢复。

下一个命令卸载软盘。这非常重要!。如果您挂载了可移动介质,则在将其从驱动器中移除之前,必须卸载它

     dilbert# umount /A
     dilbert#

上述方法可用于其他类型的可移动磁盘驱动器,例如高容量软盘。


12.3.1.2 备份示例 2,适用于磁带介质

作为另一个示例,我们直接将 /etc 备份到 /dev/fd0 设备

     dilbert# cd /
     dilbert# tar czf /dev/fd0 ./etc
     dilbert# tar tzf /dev/fd0 | head
     ./etc/
     ./etc/modules
     ./etc/xemacs/
     ./etc/xemacs/site-start-19.d/
     ./etc/xemacs/site-start-19.d/50dpkg-dev.el
     ./etc/init.d/
     ./etc/init.d/network
     ./etc/init.d/modutils
     ./etc/init.d/kerneld
     ./etc/init.d/kdm
     Broken pipe
     dilbert#

我们可以从软盘读取列表(tar 的选项 t),因此我们可以假设备份没问题。请注意,如果您计划稍后将此软盘读回,请确保您记得软盘是如何写入的。如果您忘记它是用 tar 和压缩写入的,您会花费大量时间来弄清楚。这同样适用于您存储任何较长时间的所有介质,尤其是当您将介质发送给其他人时。

上述方法也适用于磁带驱动器。将设备名称 /dev/fd0 替换为磁带驱动器的设备名称,您就可以将 tar 用作磁带归档器。


12.3.1.3 备份示例 3,适用于带有 DOS 文件系统的磁盘介质

如果您有或想要使用 DOS 格式化的软盘,可以使用示例 1 中的方式使用它们,使用标志 -t msdos 挂载它们以通知 mount 命令。但在本例中,我们使用带有 mtools 命令的 DOS 软盘。

备份不是直接写入软盘,而是首先在 /tmp 目录上创建,然后使用命令 mcopy 从那里复制到软盘。有关更多信息,请使用 info mtools

     $ pwd
     /amd/dilbert/export/home/tale/Work
     tale@dilbert /amd/dilbert/export/home/tale/Work
     $ du -sk Debian-doc
     2399    Debian-doc
     tale@dilbert /amd/dilbert/export/home/tale/Work
     $ tar czf /tmp/Debian-doc.tgz ./Debian-doc
     tale@dilbert /amd/dilbert/export/home/tale/Work
     $ ls -l /tmp/Debian-doc.tgz 
     -rw-rw-r--   1 tale     tale       609296 Dec  5 04:56 /tmp/Debian-doc.tgz
     tale@dilbert /amd/dilbert/export/home/tale/Work
     $ mcopy /tmp/Debian-doc.tgz a:
     tale@dilbert /amd/dilbert/export/home/tale/Work
     $ mdir a:
      Volume in drive A is LINUX BOOT 
      Volume Serial Number is 2410-07EF
     Directory for A:/
     
     DEBIAN~1 TGZ    609296 12-05-1998   4:58  Debian-doc.tgz
             1 file              609 296 bytes
                                 847 872 bytes free
     
     tale@dilbert /amd/dilbert/export/home/tale/Work
     $

当需要在其他计算机上读回备份时,可以使用此方法,不一定运行 Linux。这对于将文件发送给一些没有运行 Linux 的可怜的人也很有用。在这种情况下,最好不要使用 tar,像 zipgzipzoo 这样的程序在大多数操作系统上都可用。


12.3.2 高容量软盘

高容量软盘有

所有这些都与软盘大小差不多,存储 100MBytes 到 200MBytes,并且比软盘驱动器更快更贵。它们连接到 EIDE 端口、并行端口、SCSI 或 USB。LS-120 和 Sony SuperFloppy 可以读取和写入普通 1.4MByte 软盘。

您可以像上述使用软盘的示例中那样使用这些东西,但是您必须先安装设备和设备驱动程序软件才能使用它们。然后设备名称取决于该东西使用的连接类型。

有关在 Linux 上使用上述高容量软盘的更多信息,请参阅 HOWTO 文档。(参考 HOWTO ???)

有上述设备经验的人:请确认我的猜测,或发送有关如何使用它们的信息。


12.3.3 CD-R 和 CD-RW

元数据:容量 <= 640MBytes,速度 150 -- 600KBits/秒。刻录 CD 需要特殊软件。DVD-RAM

CD 刻录机可以用作备份设备。可写 CD 介质要么只能写入一次 (CD-R),要么可擦除和重写 (CD-RW)。CD-R 光盘可以在普通 CD 驱动器上读取,但 CD-RW 光盘需要读取器具有 Multi-Read 功能。如果您计划在其他计算机上读回 CD,则最好了解这一点。

假设 CD 刻录机已正确安装和配置,并且您拥有写入 CD 所需的软件,则进行备份的最佳方法是使用上述软盘示例中的第一种方法,即在 CD 上创建 Linux 文件系统。由于 CD 是磁盘,即随机访问设备,因此以这种方式使用它很容易。只需挂载它并将文件或整个目录树复制到那里即可。

恢复也很简单,因为可以使用普通文件系统命令(如 ls)检查 CD,并且很容易将单个文件复制回来。您还可以使用 diff 例如比较备份中的文件与硬盘中的文件。

CD-R 的问题在于它们的一次写入性质。它们需要一次性全部写入,然后关闭。关闭后,无法修改 CD,因此如果那里有任何问题,则必须将其丢弃。

CD-RW 可以擦除,但我的理解是必须擦除整个光盘。此外,看起来格式化 CD-RW 大约需要一个小时。

看起来写入 CD 的程序是 X-CD-Roast,作为 Debian GNU/Linux 软件包 xcdroast 提供。更多信息请访问 X-CD-Roast 网页


12.3.4 磁带

元数据:流行的备份介质。速度、容量和成本范围广泛。

磁带驱动器是流行的备份设备。介质每千兆字节相对便宜,磁带容量高达数十千兆字节。另一方面,磁带驱动器可能很昂贵,写入速度比磁盘慢。

带有 SCSI 连接器的磁带驱动器应该可以在 Linux 上工作。连接到软盘驱动器接口的所谓软盘磁带驱动器,如果 ftape 驱动程序支持特定型号,则可能可以工作。

写入 SCSI 磁带驱动器就像软盘章节中的示例 2 一样。

我不确定软盘磁带,必须阅读 ftape 文档。


12.4 备份方法和软件

备份方法包括简单地将文件复制到另一个介质,使用 dd、tar 或类似程序创建存档,以及使用特殊的备份程序。


12.4.1 网络备份

在企业环境中,可能有一台备份服务器运行一些网络备份软件。如果该软件有 GNU/Linux 客户端可用,则可以安装它们,在备份服务器上配置客户端计算机,并开始通过网络进行备份。这是一个低成本的解决方案。如果备份服务器已经存在,GNU/Linux 客户端有时可以免费下载。


12.4.1.1 安装 EMC NetWorker 客户端

EMC NetWorker 是一个备份系统,以前称为 Legato。EMC 为 GNU/Linux 提供 NetWorker 客户端,但几乎没有技术支持。这些应用程序以 RPM 二进制软件包的形式从 Legato FTP 站点 提供。tarball 将解压缩为多个 RPM 软件包。一个仅将文件发送到备份服务器的系统将需要 lgtoclnt-7.3-1.i686.rpmlgtoman-7.3-1.i686.rpm

客户端软件包将允许备份服务器连接到您的系统并请求需要备份的文件。配置几乎全部在备份服务器上完成。客户端系统只需要知道允许哪个备份服务器。您的合同应该允许您在您的系统上安装客户端软件包,只要您拥有服务器许可证,但如果您有疑问,请咨询您的 EMC 代表。

要在 Debian GNU/Linux 系统上安装这些软件包,必须将它们转换为 Debian .deb 格式。Legato 提供的文件是可重定位的 .rpm 文件,并且 alien 版本 6.27 及更低版本无法正确转换这些文件。请使用 alien 版本 6.28 或更高版本。

转换软件包像这样进行

     vendredi:/tmp# alien --to-deb lgtoclnt-7.3-1.i686.rpm
     lgtoclnt_7.3-2_i386.deb generated
     vendredi:/tmp# alien --to-deb lgtoman-7.3-1.i686.rpm
     lgtoman_7.3-2_i386.deb generated

然后您可以像这样安装软件包

     # dpkg --install lgtoclnt-7.3-1.i686.deb
     # dpkg --install lgtoman-7.3-1.i686.deb

从 RPM 的转换并不完美,您必须手动执行一些步骤才能使一切正常运行。


12.4.1.2 设置和配置

要使用 Legato 进行备份,备份客户端主机上必须运行 nsrexecd。此进程与 Legato 服务器通信。在仅客户端系统上,不需要其他 Legato 进程,nsrexecd 会在需要时启动它们。

您需要告诉 nsrexecd 它可以接受来自哪个备份服务器的连接。这可以从命令行或从资源文件完成。首选方式是从资源文件

     # mkdir -p /nsr/res
     # echo "backup-server.example.com" > /nsr/res/servers
     # echo "other.example.net"        >> /nsr/res/servers

请注意,NetWorker 使用不符合 lsb 标准的目录 /nsr/。没有记录在案的方法告诉它在 /etc/ 中查找。

如果您正在使用防火墙,则需要打开 NetWorker 端口。NetWorker 使用基于 Sun RPC 的远程过程调用,并带有自己的端口映射器。您需要打开端口映射器端口 (7937:7938) 和 RPC 端口范围 (10001:10100)。使用 shorewall,您可以通过将这些规则放入 /etc/shorewall/rules 中来完成此操作

     # EMC NetWorker (Backups)
     ACCEPT          net fw udp      7937:7938
     ACCEPT          net fw tcp      7937:7938
     ACCEPT          net fw tcp     10001:10100

要检查安装,请手动启动 nsrexecd,检查它是否正在运行,并测试备份服务器可以使用此新客户端做什么。

     vendredi:/tmp/Legato# /usr/sbin/nsrexecd
     vendredi:/tmp/Legato# ps aux | grep nsr
     root      4031  0.5  0.6  1132   768  ?  S    15:48   0:00 /usr/sbin/nsrexecd 
     root      4033  0.0  0.2   848   344  p2 S    15:48   0:00 grep nsr 
     vendredi:/tmp/Legato#

接下来转到备份服务器,并进行测试运行,其中实际上没有任何内容保存到磁带,但 Legato 服务器会联系客户端并探测文件系统。这样,您可以检查大部分功能,并可以看到 Legato 在真正启动时会做什么。

     root@lehmus:/# savegrp -n -p -v -P hplp -c vendredi  Linux_Clients
     vendredi:All                              level=incr
     01/21/99 16:26:17 savegrp: Run up to 12 clients in parallel
     01/21/99 16:26:17 savegrp: vendredi:probe                                started
     savefs -s lehmus -g Linux_Clients -p -n -l full -R -v 
     01/21/99 16:26:20 savegrp: vendredi:probe succeeded.
     rcmd vendredi, user root: `savefs -s lehmus -g Linux_Clients -p -n -l full -R -v'
     nsrexec: authtype nsrexec
     type: NSR client description;
     pools supported: Yes;
     remote user: root;
     groups: daemon, root, bin, sys, adm, tty, disk, lp, mail, news, daemon;
     arch: i586;
     client OS type: Linux;
     CPUs: 1;
     IP address: 172.19.13.36;
     machine type: desktop;
     MB used: 828;
     NetWorker version: Utah.Build.MJFeral_8_11_98_SNAP;
     OS: Linux 2.0.34;
     version: Utah.Build.MJFeral_8_11_98_SNAP;
     save set: path=/, level=full, diskno=0, max_sessions=3, stype=save,\
     path=/var, level=full, diskno=0, max_sessions=3, stype=save,\
     path=/export/home, level=full, diskno=0, max_sessions=3, stype=save ;
     parallelism: 8
     --- Probe Summary ---
     
     vendredi:/                            level=full, dn=0, mx=3, vers=pools, p=4
     vendredi:/              level=full, pool=SMT Workstation, save as of Thu Jan  1 03:00:00 GMT+0300 1970
     vendredi:/var                         level=full, dn=0, mx=3, vers=pools, p=4
     vendredi:/var           level=full, pool=SMT Workstation, save as of Thu Jan  1 03:00:00 GMT+0300 1970
     vendredi:/export/home                 level=full, dn=0, mx=3, vers=pools, p=4
     vendredi:/export/home   level=full, pool=SMT Workstation, save as of Thu Jan  1 03:00:00 GMT+0300 1970
     vendredi:index                       level=full, dn=-1, mx=0, vers=pools, p=4
     vendredi:index          level=full, pool=SMT Workstation, save as of Thu Jan  1 03:00:00 GMT+0300 1970
     
     root@lehmus:/#

如果之前的测试看起来没问题,您可以在服务器上设置自动备份(或要求备份管理员执行此操作)。

Linux 主机上的剩余配置是将 nsrexecd 的启动添加到启动脚本中,例如这样

     #! /bin/sh
     #
     # Script to start EMC Networker backup daemon
     
     PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
     DAEMON=/usr/sbin/nsrexecd
     NAME=nsrexecd
     DESC="legato backup daemon"
     NICE=15
     
     test -f $DAEMON || exit 0
     
     set -e
     
     case "$1" in
       start)
         echo -n "Starting $DESC: $NAME"
         start-stop-daemon --start -N $NICE -o --exec $DAEMON
         echo "."
         ;;
       stop)
         echo -n "Stopping $DESC: $NAME"
         start-stop-daemon --stop -o --name $NAME --exec $DAEMON
         echo "."
         ;;
       restart|force-reload)
         echo -n "Restarting $DESC: $NAME"
         start-stop-daemon --stop -o --name $NAME --exec $DAEMON
         sleep 1
         start-stop-daemon --start -N $NICE -o --exec $DAEMON
         echo "."
         ;;
       *)
         echo "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload}"
         exit 1
         ;;
     esac
     
     exit 0

然后您必须将备份服务添加到启动序列中

     # update-rc.d networker defaults 90

现在应该正确设置了 Legato,并且自动备份按照服务器上的配置运行。


12.4.2 Tar 等

元数据:Tar, dump, dd, cpio

现在是一些示例。

在 Debian GNU/Linux 中,tar 程序是 GNU tar,它具有多个额外的功能。其中包括在创建 tar 文件时支持压缩。平均而言,压缩会将文件大小压缩到未压缩大小的 50% 左右。您的结果可能会有所不同:已经压缩的文件(如 *.zip 和 *.gif 文件)根本不会压缩,而某些文件压缩效果特别好,C 源代码文件可以压缩到未压缩大小的 25%。

从 /export/home 分区获取压缩的 tar 文件,如下所示

     cd /export
     tar czf /tmp/home.tgz ./home

/tmp/home.tgz tar 文件可以复制到另一个磁盘或另一台计算机。如果您没有任何备份设备,但有两台具有可用磁盘空间的计算机,请对最重要的文件进行压缩 tar,并将 tar 复制到另一台计算机。


12.4.3 备份软件

元数据:amanda,Debian 中的其他备份软件

我现在没有时间研究这些,欢迎贡献。


12.5 备份类型

元数据:完整备份,增量备份,差异备份,网络备份,dump 备份,级别 0--9,

有不同类型的备份,以下列出其中一些

完整备份

完整备份意味着备份所有内容。

增量备份

增量备份意味着备份自上次完整备份以来已更改的所有内容。

差异备份

差异备份似乎是增量备份的另一个名称。

网络备份

网络备份通常意味着将客户端备份到备份服务器,这意味着客户端将文件发送到服务器,服务器将它们写入备份介质。

Dump 备份

Dump 备份不是普通的文件逐个备份。整个磁盘分区或文件系统“dump”到备份介质,就像它原来一样。这意味着也必须一次性恢复整个分区或文件系统。Dump 备份可能是磁盘映像,这意味着必须将其恢复到具有相同磁盘几何形状和坏块在相同位置的类似磁盘。请注意这一点。

级别 0 -- 9

级别 0 到 9 备份是更细粒度的增量备份版本。级别 N 备份意味着备份自相同或更低级别备份以来已更改的所有内容。

元数据:检查备份是否可以恢复,并带有原始文件所有者,权限和时间戳。

为了有用,您必须能够恢复备份。通常不仅文件的内容很重要,而且它们的时间戳、权限和所有者也很重要。检查您是否可以恢复备份,以便保留所有这些内容。


[ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 下一页 ]


Debian GNU/Linux 系统管理员手册 (过时文档)

本手册自 2006 年起已过时且已弃用,2009 年 12 月 29 日。请参阅 http://www.de.debian.org/doc/user-manuals#quick-reference。

Ardo van Rangelrooij ardo.van.rangelrooij@tip.nl
Tapio Lehtonen Tapio.Lehtonen@IKI.FI
Oliver Elphick - 前任维护者