用 router 做 backup server (dd-wrt + rsync)

註: 非教學, 純記錄用途作參考用, 不清楚請不要試.. 如有任何意外導致損失本人一概不負責

Router: Buffalo WZR-HP-G300NH2

DD-WRT version: DD-WRT v24SP2-MULTI (06/03/12) std

注: 這是 Aeothos chipset 用的方法

USB storage setup

  1.  準備已 format USB drive, 插router
  2. Router GUI:
    • Services -> USB -> Enable: Core USB support, USB Storage Support, Automatic Drive Mount;
    • Disk Mount Point: /mnt
  3. [optional] Router GUI: Services -> NAS -> FTP/Samba setup

Enable SSH

  1. Router GUI: Services -> Services -> Secure Shell -> Enable: SSHd, Password Login (強烈建議disable password login, 轉用 key)
  2. Router GUI: Administration -> Remote Access -> Enable SSH Management (強烈建議換個 remote port)

Install Optware

(reference: http://www.dd-wrt.com/phpBB2/viewtopic.php?t=86912)

  1. SSH 入 router
  2.  準備 USB storage
    cd /mnt
    mkdir /sda_part1
    cd /mnt/sda_part1
    mkdir etc opt root
    touch optware.enable
    chmod 755 etc opt root
    mkdir opt/lib
    chmod 755 opt/lib
    cp -a /etc/* /mnt/sda_part1/etc/
    mount -o bind /mnt/sda_part1/etc /etc
    mount -o bind /mnt/sda_part1/opt /jffs
  3. 下載並安裝package
    cd /tmp
    wget http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/libc_0.9.33.2-1_ar71xx.ipk
    wget http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/opkg_618-3_ar71xx.ipk
    ipkg install libc_0.9.33.2-1_ar71xx.ipk opkg_618-3_ar71xx.ipk

    注意: 版本可能有變, 需到 http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages 查看最新版本

  4. 建立設定檔 /etc/opkg.conf
    src/gz snapshots http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages
    dest root /opt
    dest ram /opt/tmp
    lists_dir ext /opt/tmp/var/opkg-lists
  5. **Checkpoint**
    umount /jffs
    mount -o bind /mnt/sda_part1/root /tmp/root
    mount -o bind /mnt/sda_part1/opt /opt
    export LD_LIBRARY_PATH='/opt/lib:/opt/usr/lib:/lib:/usr/lib'
    opkg update

    會見到:

    Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/Packages.gz.
    Inflating http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/Packages.gz.
    Updated list of available packages in /opt/tmp/var/opkg-lists/snapshots.
  6. Router GUI: Administration -> 輸入 Commands 再按 “Save Startup”:
    #!/bin/sh
    
    sleep 5
    if [ -f /mnt/sda_part1/optware.enable ]; then
    mount -o bind /mnt/sda_part1/etc /etc
    mount -o bind /mnt/sda_part1/root /tmp/root
    mount -o bind /mnt/sda_part1/opt /opt
    else
    exit
    fi
    
    if [ -d /opt/usr ]; then
    export LD_LIBRARY_PATH='/opt/lib:/opt/usr/lib:/lib:/usr/lib'
    export PATH='/opt/bin:/opt/usr/bin:/opt/sbin:/opt/usr/sbin:/bin:/sbin:/usr/sbin:/usr/bin'
    else
    exit
    fi

    註: 可能要改做 sleep 10

  7. 回到SSH, /mnt/sda_part1/root/.profile:
    export LD_LIBRARY_PATH='/opt/lib:/opt/usr/lib:/lib:/usr/lib:/opt/usr/local/lib'
    export PATH='/sbin:/opt/bin:/opt/usr/bin:/opt/sbin:/opt/usr/sbin:/bin:/usr/bin:/usr/sbin:/opt/usr/local/bin'
    export PS1='[33[01;31m]u@h [33[01;34m]W $ [33[00m]'
    export TERMINFO='/opt/usr/share/terminfo'
  8. reboot

Install rsync

Reference: http://www.dd-wrt.com/wiki/index.php/Rsync_Backup_Server

註: 有點不同..

  1. 下載並安裝 libc
    cd /tmp
    wget http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/libc_0.9.33.2-1_ar71xx.ipk
    opkg install libc_0.9.33.2-1_ar71xx.ipk

    注意: 其實跟安裝optware時一樣, 只是今次用opkg 而不是ipkg

  2. 安裝 rsync:
    opkg update
    opkg install rsync

原本應該設定 /etc/rsyncd.conf 的, 但我發覺這個 rsyn 經常 ignore 我的 config file .. 直接用 ~root 做backup location.. 所以我決定直接在 ~root 放symbolic link 到 USB storage 算了..

後記: 用 non-root account 做backup:

  1. 修改 /etc/passwd 加 user, 指定 backup 用的 folder 做 home, 如:
    myUser:*:1000:1000:My user for rsync:/mnt/sda_part1/rsync/myUser:/bin/sh

    這個即是說要加一個user 叫 myUser, home 是 /mnt/sda_part1/rsync/myUser

  2. 如用 rsync over ssh, 可以將 public key 抄到 user home 的 .ssh folder (當然要先開folder)
  3. chown -R myUser <path_to_user_home>

Backup 方法:

rsync -azv -e "ssh -i <private_key> -p <port>" <from_path> myUser@host:<to_path>

  • 請自行研究可用option..
  • <to_path> 是指 myUser 的 home 之下的 relative path
  • ssh 的 user 要跟 rsync 的 user 一樣

發表迴響