TL-WR720N与OpenWrt(三)

五、挂载USB存储设备

TL-WR720N自带的USB接口(原用于3G网卡)可以为我们接入USB存储设备,扩展容量提供极大便利。

1.准备磁盘

这里可以选择大容量的U盘或磁盘,而我本着废物利用的原则选择从旧电脑上拆下的机械硬盘(当然还需要自行准备USB转SATA数据线),然后进行格式化操作。需要注意的是我使用的USB是基于原路由器3G模式的,因此档位要设置正确。

2.分区与格式化

查看磁盘情况

$ 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工具。

3.查询USB接口类型

接入路由器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的模块。

4.安装USB与大容量存储设备的支持模块

由于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.

表明内核版本不匹配,这一般是由于自己编译的社区版本固件更新太快导致。

5.构建分区映射并移植根分区至USB存储设备

修改分区映射表并激活

$ 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/

6.检测是否挂载成功

修改欢迎界面后重启检查

$ 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

你可能感兴趣的:(Unix)