TL-WR720N自带的USB接口(原用于3G网卡)可以为我们接入USB存储设备,扩展容量提供极大便利。
这里可以选择大容量的U盘或磁盘,而我本着废物利用的原则选择从旧电脑上拆下的机械硬盘(当然还需要自行准备USB转SATA数据线),然后进行格式化操作。需要注意的是我使用的USB是基于原路由器3G模式的,因此档位要设置正确。
查看磁盘情况
$ fdisk –l
<获得磁盘/dev/sdg>
根据fdisk命令的指导完成分区。
$ fdisk /dev/sdg
Command (m for help): n 创建新分区
Partition type:
p primary (0 primary, 0extended, 4 free)
e extended
Select (default p): p 类型为主分区
Partition number (1-4, default 1): 1 设定分区号
First sector (2048-312581806, default2048): 设置分区起始位置
Using default value 2048
Last sector, +sectors or +size{K,M,G}(2048-312581806, default 312581806): +140G 设置分区大小
此时创建的1号分区用作ext4分区,接下来同理可分得2号分区用作swap分区。
Command (m for help): p 查看已设定的分区信息
Disk /dev/sdg: 160.0 GB, 160041885184 bytes
255 heads, 63 sectors/track, 19457cylinders, total 312581807 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes /512 bytes
I/O size (minimum/optimal): 512 bytes / 512bytes
Disk identifier: 0x3a023a01
Device Boot Start End Blocks Id System
/dev/sdg1 2048 293603327 146800640 83 Linux
/dev/sdg2 293603328 312581806 9489239+ 82 Linux swap / Solaris
Command (m for help): w 保存分区信息
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition tablefailed with error 16: Device or resource busy.
The kernel still uses the old table. Thenew table will be used at
the next reboot or after you runpartprobe(8) or kpartx(8)
Syncing disks.
此时可以不重启,直接更新内核分区表。
$ sudo partprobe
然后利用mkfs和mkswap分别格式化并激活分区。
$ mkfs.ext4 -m 0.5 /dev/sdg1
$ mkswap /dev/sdg2
$ swapon /dev/sdg2
查看交换分区并卸载
$ swapon -s
Filename Type Size Used Priority
/dev/sdg2 partition 9489232 0 -1
$ swapoff /dev/sdg2
注:mkfs命令中的m参数用于设置保留分区所占百分比,默认的5%对于大容量磁盘有些浪费。而对已做好分区的磁盘不想擦除内容而直接升级文件系统为ext4,可以使用tune2fs工具。
接入路由器USB接口后,利用dmesg查询
$ dmesg | gerp ‘usb’
$ [ 4.740000] usbcore: registered new interfacedriver usbfs
[ 4.740000] usbcore: registered new interfacedriver hub
[ 4.750000] usbcore: registered new devicedriver usb
[ 5.140000] usb 1-1: new high-speed USBdevice number 2 using ehci-platform
可以看到为USB2.0接口,需要安装支持USB2.0的模块。
由于OpenWrt编译时默认不会选择USB支持模块,因此需要通过opkg工具联网安装(确保路由器可以正常访问互联网)。
$ opkg update
$ opkg install kmod-usb-storage block-mountkmod-fs-ext4
$ reboot
注:若出现Collected errors:
* satisfy_dependencies_for:Cannot satisfythe following dependencies for kmod-usb-storage:
* kernel(= 3.18.11-1-317527fb328b694536ee00c07026c22c) * kernel (= 3.18.11-1-317527fb328b694536ee00c07026c22c) *
*opkg_install_cmd: Cannot install package kmod-usb-storage.
表明内核版本不匹配,这一般是由于自己编译的社区版本固件更新太快导致。
修改分区映射表并激活
$ vim /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 /
option device /dev/sda1
option fstype ext4
option options rw,sync
option enabled 1
opntion enabled_fsck 0
config 'swap'
option device /dev/sda2
option enabled 1
$ /etc/init.d/fstab enable
挂载磁盘并复制路由器flash中根分区的文件至USB存储设备。
$ mkdir /mnt/sda1
$ mount /dev/sda1 /mnt/sda1
$ mkdir -p /tmp/cproot
$ mount --bind / /tmp/cproot/
$ tar -C /tmp/cproot/ -cvf - . | tar -C/mnt/sda1 -xf -
$ umount /tmp/cproot/
修改欢迎界面后重启检查
$ vim /mnt/sda1/etc/banner
CHAOS CALMER (Bleeding Edge, r45573) boot from usb!
$ reboot
<可以看到欢迎界面出现boot from usb!字样>
$ df –h
<可以检查挂载的USB设备情况>
【1】http://blog.chinaunix.net/uid-23354495-id-1740679.html
【2】http://wiki.openwrt.org/doc/howto/usb.storage
【3】http://wiki.openwrt.org/doc/howto/extroot
【4】http://tieba.baidu.com/p/2130462597