OpenWrt中開啟usb存儲和samba服務


在從官網安裝的WNDR3800 15.05.1版本OpenWrt中, 不帶usb存儲支持以及samba, 需要另外安裝

參考的文章

http://www.geektalks.org/setup-usb-drive-and-sambanas-on-openwrt-from-scratch/ 
https://wiki.openwrt.org/doc/howto/usb.essentials USB Basic Support 
https://wiki.openwrt.org/doc/howto/usb.storage   USB Storage 
https://wiki.openwrt.org/doc/uci/fstab fstab Configuration 
https://wiki.openwrt.org/doc/techref/block_mount#block-mount_binary_package Mount Block Storage

安裝過程中需要安裝的包有

#Those are USB drivers
kmod-usb-core kmod-usb2 kmod-usb-storage kmod-usb-storage-extras block-mount kmod-usb-uhci kmod-usb-ohci

#Those are file system support, you may choose only the ones you are using: kmod-fs-exfat kmod-fs-ext4 kmod-fs-ntfs kmod-fs-vfat #IO charset, IMPORTANT kmod-nls-cp437 kmod-nls-iso8859-1 #This one is for auto mount block-mount #These are samba server and web page configuration software: luci-app-samba luci-i18n-samba-en samba36-server 

 

1. 啟用usb支持 

# 每次重啟后, 軟件包都要重新update
opkg update

安裝 kmod-usb-uhci 或者 kmod-usb-ohci, 如果前者不能安裝, 系統會有提示

opkg install kmod-usb-uhci
insmod usbcore
insmod uhci
#在執行后兩個命令時, 一個會提示已經完成, 一個會報不存在, 可能教程里的命令未隨版本更新

opkg update
opkg install kmod-usb-ohci
insmod usb-ohci

安裝usb2

opkg install kmod-usb2
insmod ehci-hcd

2. 啟用usb存儲

需要安裝這些包: kmod-usb-storage, 各種格式 kmod-fs-<fs>, block-mount, kmod-scsi-core

# 查看可以安裝的fs list
opkg list |grep kmod-fs

# 安裝e2fsprogs
opkg install e2fsprogs

# 安裝
opkg install kmod-usb-storage block-mount kmod-fs-ext4 kmod-fs-vfat 
# block-mount 會報一個錯, 這個是/etc/init.d/fstab中報的, 可以忽略

啟用對usb存儲的自動掛載

主要是通過 block detect 產生的 fstab 配置來實現的, 各配置項的說明

# mount swap devices that don't have their own config section
option  anon_swap       '0'
# mount block devices that don't have their own config section   
option  anon_mount      '0'
# automatically mount swap devices when they appear
option  auto_swap       '1'
# automatically mount block devices when they appear
option  auto_mount      '1'
# wait X seconds before trying to mount root devices on boot
option  delay_root      '0'
# run e2fsck on device prior to a mount. e2fsck is used to check the ext2/ext3/ext4 family of file systems
option  check_fs        '0'

fstab配置也可以在luci界面中進行編輯

root@OpenWrt:~# block detect > /etc/config/fstab
root@OpenWrt:~# cat /etc/config/fstab
config 'global'
        option  anon_swap       '0'
        option  anon_mount      '0'
        option  auto_swap       '1'
        option  auto_mount      '1'
        option  delay_root      '5'
        option  check_fs        '0'

config 'mount'
        option  target  '/mnt/sda1'
        option  uuid    '40e0-6302'
        option  enabled '0'

root@OpenWrt:~# /etc/init.d/fstab enable

注: 最后一個 option enabled 改為'1' 就會自動掛載, 重啟后, 用df -h就能看到usb存儲了.

注: 可以將config 'mount'部分刪除, 將 option anon_mount 和 option check_fs 改為 '1' 這樣在啟動時會自動發現usb存儲並掛載

住: ntfs格式的移動硬盤不能自動加載, 需要啟動后, 通過這樣的命令進行掛載

root@WNDR3800:~# ntfs-3g /dev/sda1 /mnt/sda1/
root@WNDR3800:~# ntfs-3g /dev/sda2 /mnt/sda2/

 

配置samba

主要是通過兩個配置文件實現的, 一個是 /etc/config/samba, 

# vi /etc/config/samba
config samba
    option name 'WNDR3800'
    option workgroup 'WORKGROUP'
    option description 'OpenWrt'
    option homes '1'

  config sambashare
      option name 'sda1'
      option path '/mnt/sda1/'
      option read_only 'no'
      option guest_ok 'yes'
      option 'create_mask' '0700'
      option 'dir_mask' '0700'

注: option name 和 option path, 如果直接使用 'mnt' 和 '/mnt/' 會導致服務器對剩余空間大小判斷錯誤而無法寫入稍微大一點的文件.

所以.. 可以一下多配置幾個, 這樣接移動硬盤時, 就不用再改了, 比如這樣

onfig samba
    option name 'WNDR3800'
    option workgroup 'WORKGROUP'
    option description 'OpenWrt'
    option homes '0'

config sambashare
    option read_only 'no'
    option guest_ok 'yes'
    option create_mask '0700'
    option dir_mask '0700'
    option name 'sda1'
    option path '/mnt/sda1/'

config sambashare
    option read_only 'no'
    option guest_ok 'yes'
    option create_mask '0700'
    option dir_mask '0700'
    option name 'sda2'
    option path '/mnt/sda2/'

config sambashare
    option name 'sda3'
    option path '/mnt/sda3/'
    option read_only 'no'
    option guest_ok 'yes'
    option create_mask '0700'
    option dir_mask '0700'

config sambashare
        option name 'sda4'
        option path '/mnt/sda4/'
        option read_only 'no'
        option guest_ok 'yes'
        option create_mask '0700'
        option dir_mask '0700'

 

 

另一個是 /etc/samba/smb.conf, 這是samba服務的標准配置文件, 下面是配置的例子

[global]
        netbios name = |NAME| 
        workgroup = |WORKGROUP|
        server string = |DESCRIPTION|
        syslog = 10
        encrypt passwords = true
        passdb backend = smbpasswd
        obey pam restrictions = yes
        socket options = TCP_NODELAY
        unix charset = utf-8
        preferred master = yes
        os level = 20
        security = user
        guest account = nobody
# For safety, disable root user
#        invalid users = root
        smb passwd file = /etc/samba/smbpasswd

然后 /etc/init.d/samba enable 並重啟路由器就可以了

啟動后, samba會自動更新smb.conf, 將在/etc/config/samba下設置的 [mnt] 附加到文件的后面

 

用 ext4 格式化u盤

# 查看原文件格式df -T參數
df -h -T

# format, 不格式化為ext4不能在Mount Points的添加界面中看到 mkfs.ext4
/dev/sda1
# 或者
mke2fs /dev/sda1 # 如果不行就先掛成swap, 再取消掛載, 再格式化 mkswap
/dev/sda1 swapon /dev/sda1 swapoff /dev/sda1 # 創建掛載點 mkdir -p /mnt/usb

# 設置掛載點為可寫
chmod a+w /mnt/usb
chown -R nobody /mnt/usb

在Luci界面中,

先通過System -> Mount Points 將U盤掛載到 /mnt/usb

再通過Services -> Network Shares 中添加 Shared Directories 將 /mnt/usb 掛載為usb, 勾選Allow Guest

 

在其它設備中, 檢查是否可以連接並且寫入. 然后重啟路由器, 再次確認是否可以連接並且寫入.

在啟動日志中查看usb設備的識別情況

root@WNDR3800:~# dmesg
[   11.460000] uhci_hcd: USB Universal Host Controller Interface driver
[   11.470000] usb-storage 1-1:1.0: USB Mass Storage device detected
[   11.480000] scsi host0: usb-storage 1-1:1.0
[   11.490000] usbcore: registered new interface driver usb-storage
[   11.740000] block: attempting to load /tmp/jffs_cfg/upper/etc/config/fstab
[   11.760000] block: extroot: not configured
[   11.760000] mount_root: switching to jffs2 overlay
[   11.800000] eth0: link down
[   11.820000] procd: - early -
[   11.820000] procd: - watchdog -
[   12.490000] scsi 0:0:0:0: Direct-Access     Generic- SD/MMC           1.00 PQ: 0 ANSI: 0 CCS
[   12.560000] procd: - ubus -
[   13.170000] sd 0:0:0:0: [sda] 30220288 512-byte logical blocks: (15.4 GB/14.4 GiB)
[   13.200000] sd 0:0:0:0: [sda] Write Protect is off
[   13.200000] sd 0:0:0:0: [sda] Mode Sense: 03 00 00 00
[   13.200000] sd 0:0:0:0: [sda] No Caching mode page found
[   13.210000] sd 0:0:0:0: [sda] Assuming drive cache: write through
[   13.240000]  sda: sda1
[   13.250000] sd 0:0:0:0: [sda] Attached SCSI removable disk
[   13.610000] procd: - init -
[   15.110000] NET: Registered protocol family 10
[   15.120000] ntfs: driver 2.1.31 [Flags: R/O MODULE].

 

Update 2017-10-15

對於非usb類型的存儲, 例如sd card/tf card, 其在/dev中自動檢測得到的名稱並非sda, 而是類似於mmcblk0這樣的設備, 這時候block detect能正常工作, 但是/etc/config/samba里面配置的路徑必須設置為(根據/dev/mmcblk0創建后的分區名, 一般為 mmcblk0p1)

      option name 'mmcblk0p1'
      option path '/mnt/mmcblk0p1/'

這樣, fstab才能開機時自動檢測並掛載

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM