手上有一個樹莓派Raspberry Pi 2,剛好還有一個空閒的行動硬碟,尋思著把這樹莓派Raspberry Pi 和行動硬碟給利用起來,搭建一個低成本的NAS。剛好前段時間折騰著Nextcloud離線下載搭建方法,Aria2安裝在樹莓派Raspberry Pi 也是一個很簡單的事。

然後,在樹莓派Raspberry Pi 掛載行動硬碟,利用Aria2離線掛機下載資源到硬碟中,再利用Kodi播放器可以讀取SFTP、FTP或Http伺服器裡的檔案的特點,直接播放樹莓派Raspberry Pi硬碟中的影片。這樣一個簡單的家庭影視共享NAS儲存就這樣完成了。

實際使用的過程中還是插不錯的,沒錢購買專業的NAS儲存設備,綜合利用一下正在「吃灰」的樹莓派、行動硬碟、網路線等還是挺不錯的。樹莓派Raspberry Pi 安裝過程還挺簡單的,這篇主要是整理一下自己在操作過程中遇到一些問題,例如行動硬碟掛載、USB無線網路卡、讀取權限等。

樹莓派Raspberry Pi 打造低成本NAS儲存的十個問題-掛載硬碟離線下載

更多的有關搭建網路儲存和雲端盤的文章,有興趣的朋友還可以看看:

  1. Nextcloud離線下載建置方法-整合Aria2和AriaNg、Aria2 WebUI實作離線下載
  2. Lsyncd搭建同步鏡像-用Lsyncd實現本地和遠端伺服器之間即時同步
  3. Linux VPS掛載Google Drive與Dropbox-實作VPS主機資料同步備份

一、樹莓派軟體安裝卸載命令

樹莓派官方系統Raspbain Jessie With PIXEL ,就是基於Debain 8深度定制的,所以直接使用我們在Linux VPS上用的命令即可,例如LNMP環境搭建都沒有問題。這裡整理出一些常用的指令:

常用apt指令列表

apt-cache search # ------(package 搜索包)
apt-cache show #------(package 获取包的相关信息,如说明、大小、版本等)
sudo apt-get install # ------(package 安装包)
sudo apt-get install # -----(package - - reinstall 重新安装包)
sudo apt-get -f install # -----(强制安装?#"-f = --fix-missing"当是修复安装吧...)
sudo apt-get remove #-----(package 删除包)
sudo apt-get remove -purge # ------(package 删除包,包括删除配置文件等)
sudo apt-get autoremove --purge # ----(package 删除包及其依赖的软件包+配置文件等(只对6.10有效,强烈推荐))
sudo apt-get update #------更新源
sudo apt-get upgrade #------更新已安装的包
sudo apt-get dist-upgrade # ---------升级系统
sudo apt-get dselect-upgrade #------使用 dselect 升级
apt-cache depends #-------(package 了解使用依赖)
apt-cache rdepends # ------(package 了解某个具体的依赖?#当是查看该包被哪些包依赖吧...)
sudo apt-get build-dep # ------(package 安装相关的编译环境)
apt-get source #------(package 下载该包的源代码)
sudo apt-get clean && sudo apt-get autoclean # --------清理下载文件的存档 && 只清理过时的包
sudo apt-get check #-------检查是否有损坏的依赖

如果使用 apt-get 遇到速度慢或來源不存在等錯誤,可能需要更換來源,請參考(wzfou.com)本文的第二部分。

aptitude 指令

aptitude 與 apt-get 一樣,是 Debian 及其衍生系統中功能極其強大的套件管理工具。與 apt-get 不同的是,aptitude 在處理依賴問題上更佳一些。舉例來說,aptitude 在刪除一個套件時,會同時刪除本身所依賴的套件。這樣,系統中不會殘留無用的包,整個系統更為乾淨。以下是筆者總結的一些常​​用 aptitude 指令,僅供參考。

aptitude update 更新可用的包列表
aptitude upgrade 升级可用的包
aptitude dist-upgrade 将系统升级到新的发行版
aptitude install pkgname 安装包
aptitude remove pkgname 删除包
aptitude purge pkgname 删除包及其配置文件
aptitude search string 搜索包
aptitude show pkgname 显示包的详细信息
aptitude clean 删除下载的包文件
aptitude autoclean 仅删除过期的包文件

當然,你也可以在文字介面模式中使用 aptitude。

deb軟體包

dpkg -i xxx.deb #安装deb软件包 
dpkg -r xxx.deb #删除软件包 
dpkg -r –purge xxx.deb  # 连同配置文件一起删除 
== dpkg -P xxx.deb  # 彻底的卸载,包括软件的配置文件
dpkg -info xxx.deb   # 查看软件包信息
dpkg -L xxx.deb # 查看软件安装到什么地方
dpkg -l # 查看系统中已安装软件包信息 
dpkg -s package # 查看软件包的详细情况,包括版本,依赖之类的
dpkg -S keyword     #搜索所属的包内容
dpkg -c package.deb  #列出 deb 包的内容
dpkg -C #查找只有部分安装的软件包信息
dpkg -p package-name    #显示包的具体信息
dpkg –unpack package.deb     #解开 deb 包的内容
dpkg –configure package  #配置包 
dpkg-reconfigure xxx # 重新配置软件包 

# 清除所有已删除包的残馀配置文件
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
# 如果报如下错误,证明你的系统中没有残留配置文件了,无须担心。
dpkg: –purge needs at least one package name argument

dpkg –clear-avail #删除软件包的Avaliable信息
dpkg –help      #显示帮助信息
dpkg –compare-versions ver1 op ver2 #比较同一个包的不同版本之间的差别
dpkg –licence (or) dpkg –license    #显示dpkg的Licence
dpkg –version #显示dpkg的版本号
dpkg -b direc×y [filename]  #建立一个deb文件

dpkg安裝的可以用apt卸載,反之亦可。

二、樹莓派更換更新來源方法

樹莓派 Raspberry Pi自帶的更新源在國內打不開,我們可以換成國內的鏡像。先編輯 /etc/apt/sources.list 文件,這裡推薦就用系統自帶的 nano 指令編輯,指令如下:

sudo nano /etc/apt/sources.list

進入編輯介面,刪除原有的內容,貼上如下內容:

deb http://mirrors.aliyun.com/raspbian/raspbian/ jessie main non-free contrib rpi
deb-src http://mirrors.aliyun.com/raspbian/raspbian/ jessie main non-free contrib rpi

更新軟體索引清單

sudo apt-get update

比較索引清單更新依賴關係

sudo apt-get upgrade -y

補充:完成上述操作後還需要把sources.list.d資料夾內raspi.list的來源註解掉。 更多的鏡像來源可以在這裡找到:http://www.raspbian.org/RaspbianMirrors

三、樹莓派啟用root登陸帳戶

樹莓派更換更新來源可以解決軟體依賴問題,但是有時我們需要用到Root權限才可以安裝某些軟體。當需要root權限時,由預設帳戶經由sudo執行,Raspberry pi 系統中的Raspbian。 預設主機名稱是 raspberrypi 預設使用者是 pi 密碼為 raspberry

為了方便折騰,建議第一時間啟用 ROOT 帳號,只需要執行兩句指令即可:

// 重新開啟root帳號,可由pi使用者登入後,執行此指令後系統會提示輸入兩次的root密碼,輸入你想設的密碼即可。

pi@raspberrypi:~$ sudo passwd root
Enter new UNIX password:   #输入第一遍密码
Retype new UNIX password:  #输入第二遍密码

// 啟用 root 帳號登入

pi@raspberrypi:~$ sudo passwd --unlock root
passwd: password expiry information changed.

輸入上面第一行程式碼 第二行是提示錯誤的程式碼。原因是 新版本s-s-h預設關閉root登陸 你可以修改s-s-h的設定檔。

pi@raspberrypi:~$ sudo nano /etc/ssh/sshd_config

Ctrl + W 快速鍵搜尋PermitRootLogin without-password,修改PermitRootLogin without-password 為PermitRootLogin yesCtrl + O 快捷鍵儲存,Ctrl + O 鍵退出Nano 編輯器。 執行完之後,用 reboot 指令重啟,這樣就可以解鎖root帳號。

四、樹莓派手動掛載移動硬碟或U盤

Raspberry Pi 官網提供的作業系統目前已經可以自動掛載行動硬碟或USB了,如果你使用的是其它的作業系統無法自動辨識並掛載硬碟或U盤,你可以採用手動掛載的方式。通常我們在 /mnt 或 /media 目錄下新建一個目錄作為掛載點。比如:

sudo mkdir /mnt/1GB_USB_flash
sudo mount -o uid=pi,gid=pi /dev/sda1 /mnt/1GB_USB_flash // 用完之后卸载
sudo umount /mnt/1GB_USB_flash 

sda1 是取決於你的實際情況,a表示第一個硬碟,1表示第一個分割區。

掛載exFAT格式的硬碟

FAT 格式U盤 mount 本身就能支持,但如果你的USB或行動硬碟使用的是 exFAT 格式,mount 會說不支援。沒關係,安裝 exfat-fuse 軟體之後 mount 就支援了。

sudo apt-get install exfat-fuse 

如果想開機自動掛載,而不是每次手動執行,可以編輯 /etc/fstab 檔案。例如在末尾添加一行:

/dev/sda1 /mnt/usbdisk vfat rw,defaults 0 0

掛載NTFS格式的硬碟(讀寫方式掛載)

預設掛載NTFS格式的硬碟只有唯讀權限,需要藉助其它工具實作。

#安装所需软件包
sudo apt-get install fuse-utils ntfs-3g
#加载内核模块
modprobe fuse
#编辑fstab让移动硬盘开机自动挂载
sudo nano /etc/fstab
#在最后一行添加如下内容
/dev/sda1 /mnt/myusbdrive ntfs-3g defaults,noexec,umask=0000 0 0
#保存重启,即可生效 

掛載FAT32格式的硬碟

#创建挂载点
sudo mkdir /mnt/myusbdrive
#编辑fstab让移动硬盘开机自动挂载
sudo nano /etc/fstab
#在最后一行添加如下内容
/dev/sda1 /mnt/myusbdrive auto defaults,noexec,umask=0000 0 0
#保存重启,即可生效 

說明:

sda1是取決於你的實際情況,a表示第一個硬碟,1表示第一個分割區。
umask=0000 0 0
前面四個0就是對所有人,可讀可寫可執行,
後面兩個0,第一個代表dump,0是不備份
第二個代表fsck檢查的順序,0表示不檢查
卸載:sudo umount /mnt/myusbdrive

查看掛載情況可使用以下命令。 cd /mnt/myusbdrive ,然後:ls

五、樹莓派行動硬碟供電不足

我在使用樹莓派2接移動硬碟時出現了供電不足的問題,主要表現就是掛載不穩定,移動硬碟出現「喀喀」的吃虧。目前的解決方法有:

硬體法:買一個USB-HUB,相當於給行動硬碟提供一個電流源。

軟體法1:更改樹莓派配置,路徑是:boot/config.txt,這裡麵包含了一些樹莓派的初始配置。只要最後面加上max_usb_current=1就行了。開啟終端,進入到boot資料夾下,執行如下:sudo nano config.txt

然後加入max_usb_current=1,ctrl+x保存。 輸入reboot重啟,插上移動硬碟,如果沒識別出來,就多插幾次。

軟體法2:在軟體法1的檔案最後加上 safe_mode_gpio=4。 

軟體法3:把你的行動硬碟格式化成ext格式的,ext3或4都可以。這樣插上樹莓派就可以被辨識。

格式化方法如下:

首先,如果行動硬碟已經掛載,先取消掛載:sudo umount /xxxmnt/xxxusb_flash。接著執行sudo fdisk -l查看你的u碟的序號,通常是/dev/sdb之類的,U盤分割區通常是/dev/ sdb1。

最後,執行格式化操作:

sudo mkfs.ext4 /dev/sda1 # 格式化为ext4分区 
sudo mkfs.ext3 /dev/sda1 # 格式化为ext3分区 
sudo mkfs.ext2 /dev/sda1 #格式化为ext2分区

特別注意:格式化後你的行動硬碟時面的東西就都清除了,在格式化以前最好做好備份。

六、樹莓派整合Aria2和AriaNg離線下載

Raspberry Pi 整合Aria2和AriaNg、Aria2 WebUI實作離線下載方法很簡單,參考:在VPS上安裝Aria2。

七、樹莓派搭建FTP伺服器(vsftpd)

如果使用Kodi這樣的播放器是可以直接使用SFTP登入並瀏覽檔案的,但我們也可以使用FTP登入的方式來讀取檔案。首先在樹莓派安裝vsftpd伺服器 (約400KB)

sudo apt-get install vsftpd

啟動ftp服務

sudo service vsftpd start

編輯vsftdp的設定文件

sudo nano /etc/vsftpd.conf

找到以下行,定義一下

anonymous_enable=NO  
表示:不允许匿名访问

local_enable=YES   
设定本地用户可以访问

write_enable=YES
设定可以进行写操作

local_umask=022
设定上传后文件的权限掩码

chroot_local_user=YES

修改存取目錄,新增一行

local_root=/var/www/
# anon_root=/var/www/tmp
# local_root 针对系统用户;anon_root 针对匿名用户

註:FTP用戶根目錄權限是555(dr-xr-xr-x),權限設定成777登陸不了

重啟vsftpd服務

sudo service vsftpd restart

測試一下, OK。 透過ftp連接樹莓派系統,使用者名稱:pi,密碼是raspberry

八、樹莓派搭建NAS伺服器(Samba)

安裝 samba 和 samba-common-bin

sudo apt-get install samba samba-common-bin
sudo apt-get install netatalk (可选,用于支持AFP)
sudo apt-get install avahi-daemon(可选,用于支持网内的计算机自动发现)

配置/etc/samba/smb.conf文件

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup
sudo vi /etc/samba/smb.conf

[share]  
#共享文件的名称,将在网络上以此名称显示
path = /samba                     #共享文件的路径
valid users = root pi             #允许访问的用户,比如我的raspi有
                                  #root 和 pi 两个用户
browseable = yes                  #允许浏览                                 
public = yes                      #共享开放                             
writable = yes                    #可写

啟動 重啟

sudo smbd
sudo smbd restart

九、樹莓派啟用USB無線網卡

Raspberry Pi 2使用Raspbain Jessie With PIXEL 樹莓派官方系統,基於Debain 8,搭配PIXEL圖形介面,下載最新版:https://downloads.raspberrypi.org/raspbian_latest。

經過我的測試,最新版的Raspbain Jessie 作業系統支援360 / 小米 / 百度 隨身wifi,如果你剛好有一個的話插上去就可以使用 USB無線網卡了。

十、總結

我在樹莓派Raspberry Pi 打造低成本NAS儲存作業過程中,首先遇到的問題行動硬碟掛載的問題,預設的NFT格式雖然可以掛載到Raspberry Pi 上,但是由於是Windows硬碟格式,無法在Linux中修改權限,最終導致Aria2離線下載無法往硬碟中寫入資料。

繞好大一個圈,終於決定將行動硬碟格式為Ext4,這樣Raspberry Pi 就可以直接辨識並掛載了。 Windows上讀取Ext4格式的行動硬碟可以使用Ext2 Volume Manager,Ext2Fsd等軟體,支援在Windowsext2/ext3檔案系統的讀寫。

發表評論