zoukankan      html  css  js  c++  java
  • 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才能开机时自动检测并挂载

  • 相关阅读:
    三大主流负载均衡软件对比(LVS+Nginx+HAproxy)
    nginx 提示the "ssl" directive is deprecated, use the "listen ... ssl" directive instead
    centos安装nginx并配置SSL证书
    hadoop创建目录文件失败
    The server time zone value 'EDT' is unrecognized or represents more than one time zone.
    脚本启动SpringBoot(jar)
    centos做免密登录
    数据库远程连接配置
    Bash 快捷键
    TCP三次握手四次断开
  • 原文地址:https://www.cnblogs.com/milton/p/6259894.html
Copyright © 2011-2022 走看看