BBS水木清华站∶精华区

发信人: cooly.bbs@bbs.im.tku.edu.tw (出  处: cooly@mis.im.tku.edu.t), 看板: Linux 
标  题: 网路备份系统说明文件 
发信站: 渡船头之恋 BBS 站 (Thu Jul 17 11:47:57 1997) 
转信站: sobee!netnews.ntu!news.mcu!news.cs.nthu!UUserv.Net.tw!aidebbs!news.yzi 
 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
□ NBS ( Network Backup System ) 说明文件                                   □ 
□ 原文刊载於 光碟月刊 (Hope Net) 第 37 期 1997 JUNE                        □ 
□ 本文允许有需要者自由散怖 , 但严禁将其转为商业利用 ,如要散布本文也请保留  □ 
□ 本声名 .                                                                 □ 
□                                                                          □ 
□ 作者 : 淡江资管 张钦隆 ( cooly@mis.im.tku.edu.tw )                       □ 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
 
NBS 系统介绍 
------------ 
相信许多管理过 Unix 主机的人都有过因为资料毁损 , 而需重建系统的经验 , 如果资料 
有备份的话 , 事情还好解决 , 最惨痛的就是没有备份资料 , 这时就算你再怎麽高竿 , 
资料要再救回来恐怕也是回天乏术了 , 基於这个原因 , 我便著手开发了这套备份系统 , 
一套好的备份系统应该至少应具备有下面的功能 : 
 
1. 能够在系统 crash 後 , 轻松地将资料「回存」回来 . 
2. 「备份/回存」过程中如果有「错误」出现 , 应能自动重新「备份/回存」 . 
3. 应该能让系统管理员做到「备份自动化」 . 
4. 「备份/回存」资料时 , 必须考虑到资料的「安全性」 . 
 
没有做到这几点的系统 , 并不能说是一个完整的「备份系统」, 因此我在开发NBS时 ,便 
是以以上四点功能来作考量 . 
 
NBS(Network Backup System , 网路备份系统) , 是一个 Unix 上标准的 Client/Server 
架构的系统 , 整个系统分成两个部份 , 即 Client 和 Server , 彼此之间透过 TCP/IP 
的连结来传递资料 , 下面这个图可以清楚地说明这个系统的运作情形 : 
 
------------------------------------------------------------------------------                                                    
                                                           
                                    │                    ┌—————┐ 
                                    │        ┌————┐│ NBS      │ 
                                    ├————┼ 编/解码├┼          │ 
                                    │        └————┘│ Client1  │ 
┌—————┐                      │                    └—————┘ 
│NBS       │┌————┐          │ 
│          ┼┤编/解码 ┼—————┤ 
│Server    │└————┘          │ 
└—————┘                      │ 
                                    │ 
 ( TCP PORT 5000 )                  │ 
                                    │                    ┌—————┐ 
                                    │        ┌————┐│ NBS      │ 
                                    ├————┼ 编/解码├┼          │ 
                                    │        └————┘│ Client2  │ 
                                    │                    └—————┘ 
 
□ The Server's Job(When receive client's request) 
   Step1 . 检查 Client 的 IP Address . 
   Step2 . 检查 Client 的 Password . 
   Step3 . 确认 Client 的服务类型 (备份 or 回存) . 
   Step4 . 提供 Client 所需的服务 . 
 
□ The Client's Job(When request server to provide service) 
   Step1 . 分析备份描述档(何谓备份描述档 , 於稍後再行说明) . 
   Step2 . 送出 Password . 
   Step3 . 送出 Service Type(服务类型) . 
   Step4 . 传递资料 . 
------------------------------------------------------------------------------ 
 
由上图我们可以清楚地看到整个系统的运作情形 , 一台跑 NBS Server 的主机可以同时 
服务多台 NBS Client 端 , 提供「备份/回存」的服务 , 当备份主机(NBS Server) 收 
到来自 Client 端的 request 时 , 它会先检查其「IP Address」是否为系统认可的 IP 
Address , 如果不是的话就拒绝提供服务并关闭连线 , 如果此 IP Address 是 Server 
端认可的 Address , 则检查其传送过来的「密码」是否正确 , 如果密码不正确 , 则一 
样拒绝提供服务并关闭连线 , 如果正确 , 就检查 Client 端所要求的服务为何 , 确认 
服务类型後 , 随即开始提供服务 , 这就是整个 NBS 系统大致的运作状况 , 下面我们 
就来谈谈这个「备份系统」的特色 . 
 
 
NBS 系统特色 
------------ 
1. 集权式的备份管理 . 
 
   NBS Server 有一个设定档 , 里面存有它所认可的「NBS Client」主机的位址和其相 
   关资料 , 且它所认可的 Clients 的「备份资料」都是储存在 NBS Server 里的 , 这 
   种集权式的管理方式的优点就是 : 「管理容易 , 只要把 Client 的资料设定好 , 就 
   可以提供服务了」, 但这种方式也是有其缺点 , 就是 : 「资料集中 , 风险也就集中 
   , 一旦备份主机资料有所毁损 , 所有的资料就有可能毁於一旦」. 
 
   解决这种缺点的方式有两种 , 一种是「备份主机」最好购置容错型的电脑 , 如「磁 
   碟阵列」系统 , 这种方式必须花费高昂的金钱 , 但资料安全性最高 , 另一种就是购 
   买两台以上的备份主机 , 一台专门用来提供备份服务 , 另外的就用来 MIRROR 备份 
   主机的资料 ,这样即可拥有较高安全度的备份 , 一般说来 , 除非您是严谨不允许出 
   差错的机构 , 才须采用如上的策略 , 否则一台「备份主机」应该就以经足够 . 
 
2. 透过「网路」进行备份 . 
 
   这套系统名为 NBS (Network Backup System) ,也就是「网路备份系统」, 顾名思义 
   , 这套系统能够让你透过「TCP/IP」网路协定来传送资料 ,由於是透过「网路」来进 
   行资料的「备份/回存」, 所以系统的「通用性」较高 , 也就是说只要你的主机有透 
   过 TCP/IP 和其它的主机连线 , 你就可以取得你的「备份主机」的服务 . 
 
3. 资料编码传送 . 
 
   由於 NBS 系统是透过 TCP/IP 网路协定来传送资料 , 因此资料的安全问题就是一大 
   必需考虑的问题 , TCP/IP 本身并不是一个安全的通讯协定 , 因此所有的资料一旦 
   需透过网路传送时 , 系统都会先予以编码保护 , 如此一来资料的安全度就增高许多. 
 
4. 线上即时压缩备份 
 
   也就是在压缩资料的同时 , 就将资料传送给 Server 端 , 利用这种线上即时压缩技 
   术来将资料传送给 Server 端 , 将可以减低 Server 端储存空间的消耗 , 也可以避 
   免掉压缩资料时所造成的 Client 端的储存空间的损耗 . 
 
5. 自动化备份 
 
   一旦您将您的设定设好後 , 所有有关备份的资讯都用档案储存著 , 所以你并不需要 
   和程式有任何的互动 , 因此您便可利用 crontab 这个标准的 UNIX 程式来定时执行 
   备份指令来将资料备份到「备份主机」上 , 如此一来 , 除非您想要更动备份设定 , 
   否则资料备份的动作 , 系统自动便会为您来代劳了 . 
 
 
 
NBS 系统需求 
------------ 
1. 一套 Unix 系统(Linux/FreeBSD and Other UNIX) , 系统需提供 Socket 界面 . 
 
2. Client 端必需安装 GNU TAR 和 GNU GZIP , Server 端无此限制 . 
 
 
NBS 的取得 
---------- 
途径有: 
 
1. 本期光碟片里有完整的 Source , 档名 : nbs-1.1b.tgz 
 
2. FTP://mis.im.tku.edu.tw/pub/network/nbs-1.1b.tgz 
 
一旦 NBS 有新的版本 , 就会置於 
FTP://mis.im.tku.edu.tw/pub/network/ 下 , 请尽量取得最新的版本安装 , 需注意的 
是 , 一旦您更换了新的版本 , Client 和 Server 都需同步更新 , 以免造成资料错误. 
 
 
 
NBS 的安装 
---------- 
介绍完这个系统之後 , 现在开始来介绍这个系统的安装 , 一般说来要安装 UNIX 上的 
软体有两种途径 , 一种是 Binary file 的安装 , 也就是直接安装可执行的执行档 , 
另外一种就是所谓的 Source Code 安装 , 也就是拿回来的档案是未经过编译的程式原 
始码 , 这种安装方式较为繁琐一点 , 且需要有较多的经验 , 才比较容易安装完成 , 
基於「可携性」的考量 , NBS 并不提供 Binary file 的安装 , 所以下面要介绍的是如 
何用 Source Code 安装 NBS 系统 . 
 
首先 , 请先确定你的身份 , 如果你不是 root , 请先变成 root 再进行下面的步骤 , 
再来 , 请解开这个压缩档 , 指令为 : 
 
# tar zxvf nbs-1.1b.tgz   ( # 为 shell 提示符号 ) 
 
之後 , 你会看到一个叫 nbs-1.1b 的目录 , 请打 
 
# cd nbs-1.1b 
 
进入这个目录下 , 然後依下面的步骤开始安装系统 . 
 
□ Server 端 : 
 
   要安装 Server 端程式 , 请进入 server 这个目录 , 进去後请先编辑 Makefile 这 
   个档里的一个叫 「INSTALL_DIR」 的「变数」 , 这个变数用来设定编译过後的程式 
   该安装在那个目录下 , 预设目录为「/usr/local/sbin」, 改好後只要打 
 
   # make 
 
   即可完成程式的安装 , 如果预设的目录没变 , 在「/usr/local/sbin」下应该会有一 
   个叫 nbsd 的 Daemon 程式 , 如果你有变更你的预设目录 , 则 nbsd 就会出现在你 
   所设定的目录下 , 找到 nbsd 後请执行之 , 执行後 , 如果你想测试 nbsd 是否可以 
   正常运作时 , 请打 
 
   # telnet <您的 ip address> 5000 
 
   如果出现类似下面的讯息的话 , 表示 nbsd 已经开始正常运作了 : 
 
   Trying 128.1.1.1... 
   Connected to polaris. 
   Escape character is '^]'. 
   Connection closed by foreign host. 
 
   然後 , 请将下面的叙述写入您的「系统初始档」里 , 如 rc.local , 让每次系统一 
   启动就能自动执行此 Daemon : 
 
   echo "Network Backup System Daemon ..." 
   /usr/local/sbin/nbsd 
 
   至此 , Server 端已经安装完成 , 至於要如何使用及设定 NBS Server , 稍後我们 
   会有详细的介绍 . 
 
 
□ Client 端 : 
 
   安装 client 端程式 , 请先进入 client 这个目录 ,进去後请编辑 Makefile 里的一 
   个叫作「INSTALL_DIR」的变数 , 这个变数用来指定 client 端程式该放到那个目录, 
   如有需要请将其改成您所要安装的目录 , 预设的目录为「/usr/local/bin」 , 改好 
   後请在 Shell 提示符号下打  
 
   # make all 
 
   即可将程式编译安装完成 , 装完後 , 如果您没有更改预设的目录 , 则您会在 
   「/usr/local/bin」下看到两个档「nbs」和「setnbs」, nbs 是此系统的 client 端 
   「主程式」, 而 setnbs 则是用来「设定环境」用的 , 关於 client 端的详细用法 , 
   我们稍後会有详细的说明 . 
 
 
 
NBS 的使用 
---------- 
 
进行到这里 , 相信许多读者已经将 NBS 系统安装完成了 , 现在开始最重要的部份 , 
也就是开始来学习使用 NBS 系统 , 使用 NBS 并不难 , 设定也相当简单 ,只要读者能 
把说明看完 , 很快就可以上手 , 下面我们将分成 Client 端的使用和 Server 端的使 
用两大段来介绍如何使用这套系统 :  
 
□ Server 端 : 
 
   如果您的机器是要做为「备份主机」的话 , 请按照安装程序 , 将 server 端主程式 
   编译完成 , 然後您会在「/etc/」这个目录下发现有一个叫做「backup.servers」的 
   档案 , 这个档是用来设定那一台主机可以将资料备份到您的「备份主机」上的 , 这 
   个档主要有三个栏位 , 分别为 (每个栏位都须以『:』隔开) : 
 
   Client 端主机的 IP or Domain Name :备份路径:主机通行密码; 
 
   分述如下: 
 
   1. Client 端的 IP(or DN)  -> 即为 Client 端主机的的 IP 位址或是其 Domain 
                                Name . 
   2. 备份路径               -> 即当 Client 端的主机将资料传过来时要放置其 
                               「备份资料」的目录 . 
   3. 主机通行密码           -> 即 Client 端主机欲取得备份服务时所需传送过来的 
                                密码 . 
 
   每一台 Client 端的主机都需在此档内有一行描述 , 每行描述都须以『;』(分号)作 
   为结尾 , 下面是一个□例 : 
 
   假设有一台主机 ip 位址为「128.1.1.4」, 其「备份资料」将备份至「备份主机」的 
   「/backup/polaris」这个目录下 , 且其密码被设定为「test」 , 则此主机的描述 
   行应该同下 : 
 
   128.1.1.4:/backup/polaris:test; 
 
   当您将您网路上 Client 端主机的描述都写入此档後 , 这些 Client 端主机就可以执 
   行 client 端的程式 , 开始将资料备份过来 . 
 
   至此 Server 端的设定工作已经完成 , 需要注意的是 , 此描述档内的『密码栏位』 
   并未编码储存 , 这是因为 NBS 在传送密码时乃是采用 MD5 的方式来编码再传送 , 
   而MD5 编码法是属於「不可逆推」式的编码法 , 因此如果要检查 Client 所传来的密 
   码是否正确 , 就必需要正确的密码 , 才能检验出来 , 而我们又不希望我们还必须去 
   输入密码给 NBS Server , 因此「密码栏位」我们并未先经编码再行储存 , 而是直接 
   以ASCII 码的方式去储存的 , 因此管理 Backup Server 的管理员需特别注意此档案 
   的权限 , 请将其设为只有 root 可以读写 , 即在 shell 下输入 : 
 
   # chmod 0600 /etc/backup.servers 
 
   否则一旦此档 , 被一般 user 看见 , 而此 user 如果又在某一台主机拥有帐号 , 那 
   麽他就能将其资料备份到此「备份主机」上 , 所以随时保持此档只有 root 能读写是 
   很重要的 , 日後新版的 NBS 将新增一个用来设定此档的工具 , 以避免掉人为设定的 
   疏失 . 
 
   而「密码栏位」的设定可以包括除了『;』(分号)之外的「可见字元」和「空格」, 也 
   就是说您可以设定一「长字串」或「一个句子」当作密码 , 密码的给定需要在 Server 
   端设好 , 也就是说 Backup Server 的管理员必须将密码设定好後 , 再告诉 Client 
   端主机的管理员 , 让其在 client 端作设定 . 
 
   另外 , 「密码栏位」的密码至少需要「4 个字元」, 因为密码是用来当作资料传送时 
   编码和解码用的「KEY」, 所以一定要设定 , 且至少需要 4 个字元 . 
 
   §管理 Backup Server 的注意事项 : 
 
     1. 定时查看记录档 
 
        当您的备份系统 Server 端(nbsd)开始运作後 , 一旦 client 端一有 request 
         , nbsd 会将 client 端的「存取记录」放在「/var/log/nbsd」这个档内 , 备 
        份主机管理员应随时查看这个档 , 以保护系统的安全性 . 
 
     2. 尽量将暂存目录的空间加大 
 
        当 Client 端要将资料备份到 Server 端时 , Server 端会先将资料暂存在一个 
        暂存目录下 , 以 Linux 为例 , 其暂存目录为 /tmp , 等到资料传送完毕 , 再 
        将其移至其「备份路径」下 , 这是为了确保资料在传送时如果有任何错误造成 
        传输失败时 , 旧的备份依然不至於被破坏 , 因此如果暂存目录的空间不够大 , 
        一旦多台 Client 端主机同时备份时 , 可能会因为暂存空间不够大而造成备份 
        失败 , 而暂存目录空间的大小 , 请依照您所服务的 Client 端的数量和其备份 
        资料量的多寡来衡量 , 在这里有一点要强调的是 , 并不是每一种 OS 都是将资 
        料暂存在 /tmp 下的 , 有些是在 /var/tmp 下 , 如 FreeBSD , 这得要看在  
        stdio.h 里的 P_tmpdir 巨集的定义为何了 , 如果您不确定 , 可以先找到  
        stdio.h 这个档 ,然後打下面这一行指令 : 
         
        # grep P_tmpdir stdio.h 
 
        这样就会出现如下的字串(以 Linux 为例) : 
         
        #define P_tmpdir     "/tmp" 
 
        这就表示 Linux 的暂存目录是 /tmp , 此时应将这个目录的空间加大 , 其馀 
        的系统请依您的系统的设定来加大您的暂存目录 . 
 
 
 
□ Client 端 : 
 
   如果您的机器是某台备份主机的 client 端 , 请按照安装程序将 client 程式安装完 
   成 , 在安装完成 client 端程式後 , 请向您的「备份主机」的管理员取得下面的 
   资料 : 
 
   1 . 您的「备份密码」 . 
   2 . 「备份主机」的 IP Address 或 Domain Name . 
 
   取得您所需的资料後 , 就可以开始「设定 client 端」了 , 请依照下面的步骤来做 : 
 
   Step 1 : 
           首先请打 
 
           # setnbs 
 
           此时会出现一个有四个选项的 menu , 如下所示 
 
           -------------------------------- 
             NBS environment setup menu 
           -------------------------------- 
           (1) Setup backup password. 
 
           (2) Setup nbs server's address. 
 
           (3) Setup all. 
 
           (4) Quit. 
           -------------------------------- 
           choice :  
 
           您可以利用这个 menu 来设定您的 nbs , 如果您选择「1」, 就可以设定您 
           的「备份密码」, 这个密码会存於「/etc/config.nbs」里 , 此档只有 root 
           才能读写 , 如果您选择「2」的话 , 就可以设定您的「备份主机」的位址 , 
           此位址可以是「ip」也可以「domain name」, 1.0.1r版以前 , 备份主机的 
           位址是利用系统变数去存取的 , 也因此无法利用 crontab 来定时备份 , 因 
           此现在改用档案来储存此变数 , 备份主机的位址也将存在 /etc/config.nbs 
           里 , 如果你选择「3」, 则可设定两者 . 
 
   Step 2 : 
           在设定完成後 , 再来就是编写『备份描述档』, 这个描述档主要是让您设定 
           「那些目录」要备份 , 备份後的储存在 Server 端的「档名」为何 , 请用您 
           所习惯的文书编辑器来编写这个档 , 『备份描述档』的主要的语法描述如下 : 
      
           #comment --> 以 # 开头的那一行会被当成说明用的叙述 
 
           package --> 一定要以 package 开头 , 否则 { } 内的描述就会被忽略 . 
            { 
              what: /etc; --> 设定那个「目录」要备份 , 需以 『;』做结尾 . 
 
              filename: etc.tgz; --> 设定备份到备份主机上的档名 , 也需以『;』做结 . 
            } 
 
          # another package  
          package 
           { 
             what: /user; 
             filename: user.tgz 
             ; --> 分号也可以打在这里 , 只要有输入分号作结尾即可 .  
           } 
           
      
          注意事项: 
 
          1.「what:」之後的目录不可以为 symbol link 的目录 , 否则会被略过不予 
             备份 , 请输入「绝对路径」. 
      
          2. client 的目录下有一个叫「example」的目录 , 其下有一个参考用的描述 
             档 . 
 
   Step 3 : 
 
          写好描述档後 , 您就可以开始备份了 , 假设『备份描述档』如下 , 且档名 
          为「backup1」: 
          ----------------------------------------------- 
          package 
            { 
              what: /usr/src/linux-2.0.29; 
              filename: kernel.tgz; 
            }  
          ----------------------------------------------- 
          现在假设设定都已经完成 , 则 
 
          「备份」时请在 Shell 题示符号下输入 : 
 
          # nbs -backup backup1 
 
          之後如果出现如下的讯息 , 就表示备份已经完成 . 
          Parsing backup1 ... Done . 
          Connecting to NBS Server [ 128.1.1.1 ] ... Done. 
          [ NBSD ] : Password check ok !! 
          The file will be backuped to BACKUP SERVER is [ kernel.tgz ] 
          The size of DATA to transfer is 6044 KB 
          Backup is success !!      
      
          「回存」描述档内的资料回来时 , 您也只需在 Shell 题示符号下输入 : 
    
          # nbs -restore backup1 / 
 
          之後如果出现如下的讯息 , 就表示资料已经成功地回存回来了 , 需注意的是 
          第三个参数『/』表示资料从「根目录」下回存回来 , 如果您想将资料回存到 
          其它目录只要更改这个参数即可 . 
 
          Parsing backup1 ... Done . 
          Connecting to NBS Server [ 128.1.1.1 ] ... Done. 
          [ NBSD ] : Password check ok !! 
          The file will restore from BACKUP SERVER is [ kernel.tgz ] 
          The size of DATA to transfer is 6044 KB 
          Restore is success !! 
 
 
 
   §使用 Backup Client 的注意事项 : 
 
     1. 利用 crontab 来自动备份 
 
        如果您想让系统自动备份 , 请将您的描述档写好後 , 将「备份指令」写入 
        crontab 里 , 如此系统即可自动定时备份 . 
 
     2. 利用 setnbs 来设定系统 
 
        请尽量不要直接去编辑「/etc/config.nbs」这个档 , 因为这个档存有「备份密 
        码」, 人为的疏失常常会造成「密码」的外漏 , 因此当您要设定系统时 , 请利 
        用 setnbs 这支程式来做 . 
 
     3. 在网路使用率低时备份 
 
        由於 NBS 是透过网路来进行资料的传递 , 因此对於网路的负荷相当地高 ,所以 
        请尽量在网路使用率较低的时段进行备份 ,较不会对您的网路上的使用者造成困 
        扰 , 备份时也可得到较高的传输率 . 
 
 
NBS FAQ 
------- 
 
下面是我收录的几则 FAQ , 希望能对读者有所帮助 , 如果您对 NBS 还是有疑问 , 
请直接 E-Mail 到 cooly@mis.im.tku.edu.tw , 我会尽快给你完整地答覆 .  
 
1. 如果我备份备到一半 , 系统 Crash 掉了 , 旧的备份是否还存在 ? 
   ANS .应该是还在 , 因为如果系统在 Client 和 Server 传送资料的期间出了问题 , 
        Server 端会把在暂存目录下的暂存档删除 , 而不会对旧的备份档有任何存取动 
        作 , 也就是说只有在资料完整地传送完後 , 系统才会更新旧的备份档 . 
 
2. 如果我同时执行两个以上的 nbs (client) 是否会造成资料错乱 ? 
   ANS .不会 , 因为 nbs client 在传送资料时 , 会先在暂存目录下建立一个 name pipe 
        (FIFO)档 , 再利用这个档来传送资料 , 而这个 FIFO 档的档名是依照 process 
        的不同而有所不同 , 因此同时执行两个 nbs client 并不会造成资料错乱 . 
 
3. NBS 支援的平台有那些 ? 
   ANS . 目前经过测试的有 Linux 和 FreeBSD , 其它的 Unix 如果有提供 Socket 界 
         面的话 , 应该也能顺利安装成功 , 需注意的是有些 Unix 所提供的 Socket 
         界面是以附加的 Library 方式提供的 , 因此在编译时需要将此 Library Link 
         进来 , 如何 Link 请依照您的系统所提供的方式 , 当您在 Linux 和 FreeBSD 
         以外的 Unix 编译成功 NBS 系统後 , 也请写一封 E-mail 给作者 , 告知作者 
         您的作业平台和您的编译方法 , 以便日後供其它 User 参考 . 
 
4. NBS 所用的资料编码法为何 ? 
   ANS . NBS 目前所采用的资料编码方式是抓备份密码当 KEY , 然後以 BIT XOR 的方 
         式来编码 , 因此要保护好您的资料就必须保护好您的 KEY 不外漏 . 
 
 
後记 
---- 
 
NBS 这套系统主要是用在需要定时备份的 UNIX 网路主机上的一套备份系统 , 它提供了 
完整的 Server 端管理机制 , 和 Client 的简易设定 , 再加上资料编码传送的支援 ,  
或许目前 NBS 的功能并不算是最强大的 , 但对於需要一套简单易用又安全的备份系统 
的人而言 , NBS 应该可以满足您的需求的 . 
 
-- 
※ 来源:.渡船头之恋 BBS 站 bbs.im.tku.edu.tw.[FROM: cooly@mis.im.tku.edu]  

BBS水木清华站∶精华区