树莓派教程:将树莓派打造成远程下载机

/

树莓派

最近买了一台树莓派来折腾,虽然树莓派的性能还不是非常理想,但是功耗小、省电,非常适合用来 24 小时挂机工作,可以折腾的花样很多,其中最能给人带来幸福感的莫过于将其打造成一台远程下载机了,这样平时看到喜欢的电视剧、电影就能随时随地添加下载,回到家泡杯热腾腾的咖啡就能看了。

供存储的硬盘的文件系统的选择

既然作为下载机,最好能选择大容量的移动硬盘作为存储器,为了保证电源供应,采用独立供电的 USB Hub 外接移动硬盘是必须的。接下来的问题是,硬盘的文件系统选择什么好呢?Ext2、Ext3、Ext4 还是 ntfs?ntfs 需要 ntfs-3g 支持,性能有限,好处是在 Windows 下可识别,另外,一个缺点是 ntfs-3g daemon 即便在空闲的时候也会占用一定的系统资源;Ext3 在 Ext2 的基础上添加了日志功能,牺牲了部分性能来增加稳定性;Ext4 相比 Ext3 在性能上又有了提升,而且可以通过禁止日志功能来获得性能的进一步提升,风险是断电后文件可能会丢失,考虑到存储的不是什么重要文件,所以我选择的是禁止日志功能的 Ext4 文件系统。

#  新建 Ext4 分区
sudo umount /dev/sdaX
sudo mkfs.ext4 -m 1 /dev/sdaX
#  调整分区,禁止日志功能,同时设置卷标为 PI
sudo tune2fs -O ^has_journal -L PI /dev/sdaX
#  检查文件系统
sudo e2fsck -f /dev/sdaX
#  重启
sudo shutdown -r now
#  确认 Ext4 分区已经禁止了日志功能
#  如成功会出现"EXT4-fs (sdaX): mounted filesystem without journal"
dmesg | grep EXT4

设置分区自动挂载

新建 udev 规则 /etc/udev/rules.d/10-usbstorage.rules,对卷标为 PI 的 Ext4 分区自动挂载:

KERNEL!="sd*", GOTO="media_by_label_auto_mount_end"
SUBSYSTEM!="block",GOTO="media_by_label_auto_mount_end"
IMPORT{program}="/sbin/blkid -o udev -p %N"
ENV{ID_FS_TYPE}=="", GOTO="media_by_label_auto_mount_end"
ENV{ID_FS_LABEL}!="PI", GOTO="media_by_label_auto_mount_end"
ENV{ID_FS_LABEL}=="PI", ENV{dir_name}="%E{ID_FS_LABEL}"
ACTION=="add", ENV{ID_FS_TYPE}=="ext4", ENV{mount_options}="noatime,barrier=0"
ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/%E{dir_name}", RUN+="/bin/chown -R pi:pi /media/%E{dir_name}"
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /media/%E{dir_name}", RUN+="/bin/rmdir /media/%E{dir_name}"
LABEL="media_by_label_auto_mount_end"

为了延长硬盘使用寿命,挂载时添加了 noatime 选项,barrier=0 禁用写入屏障,可获得更好的性能。

设置迅雷远程下载工具 Xware

迅雷发布的路由器版远程下载工具 Xware,由于支持 arm,所以可以原生安装在树莓派上。到迅雷官网论坛下载带有 armelglic 字样的最新稳定版本(以 1.0.31 为例),解压后运行 ./portal,连接成功后将打印 THE ACTIVE CODE,将激活码记住,然后登陆 http://yuancheng.xunlei.com/,使用激活码激活,就可以添加下载任务了。

创建一个简单的启动脚本 /etc/init.d/xware

# !/bin/sh
###  BEGIN INIT INFO
#  Provides:          xware
#  Required-Start:    $local_fs $network 
#  Required-Stop:     $local_fs $network 
#  Default-Start:     2 3 4 5
#  Default-Stop:      0 1 6
#  Short-Description: xware
#  Description:
#
###  END INIT INFO

NAME=xware
DAEMON=/home/pi/bin/portal

[ -x "$DAEMON" ] || exit 0

case "$1" in
  start)
    echo "Starting $NAME..."
    sudo -u pi $DAEMON >/dev/null 2>&1 &
    ;;
  stop)
    echo "Stopping $NAME..."
    sudo -u pi $DAEMON -s >/dev/null 2>&1 &
    ;;
  restart)
    $0 stop && sleep 2 && $0 start
    ;;
  *)
    echo "Usage: $0 {start|stop|restart}"
    exit 1
    ;;
esac
exit 0

设置为开机启动:

sudo update-rc.d xware defaults

添加脚本进行监控

本来已经大功告成了,但是 Xware 不是很稳定,所以写了个脚本监控 Xware 进程情况,有异常就重新启动下 Xware:

# !/usr/bin/env bash
p=$(pgrep -f 'vod_httpserver|ETMDaemon|EmbedThunderManager' | wc -l)
if [[ $p -ne 3 ]]; then
    sudo /etc/init.d/xware restart
fi

最后添加到 cron 定期执行:

*/10 * * * * /home/pi/bin/thunder-monitor.sh

Comments