首頁 收藏 QQ群
 網站導航

ZNDS智能電視網 推薦當貝市場

TV應用下載 / 資源分享區(qū)

軟件下載 | 游戲 | 討論 | 電視計算器

綜合交流 / 評測 / 活動區(qū)

交流區(qū) | 測硬件 | 網站活動 | Z幣中心

新手入門 / 進階 / 社區(qū)互助

新手 | 你問我答 | 免費刷機救磚 | ROM固件

查看: 11466|回復: 2
上一主題 下一主題
[其它]

【硬創(chuàng)邦】跟hoowa學做智能路由(十):擴充RAM和FLASH

[復制鏈接]
跳轉到指定樓層
樓主
發(fā)表于 2014-5-30 09:03 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式 | 來自遼寧

前幾篇好多人都說路由器的內存太小了,FLASH太小了怎么辦。那我們這章就介紹下怎么給路由器擴充內存和存儲器。

站在玩家興趣身份上來說,這章的內容會讓以后更精彩,操作技術上也存在一些難度,請大家認真操作一次。

實現原理

在M150開發(fā)板上我們擁有3個USB接口以及1個TF卡接口,這些接口足夠我們連接各種外部存儲設備。

使用Linux的SWAP技術 (交換內存分區(qū)技術,類似Windows虛擬內存) 還可以讓外部存儲設備承擔一部分內存工作,慢是慢了點,但是聊勝于無啊。

至于擴展Flash的容量,我們有兩種技術:

  • 外部磁盤替換/overlay可寫分區(qū),這樣不論多大的數據就都是存儲在外部磁盤上了。
  • 使用16MB的SPI Flash,這樣不用擴展外置磁盤了, 但是要是做網絡存儲還是不夠。
  • 外置磁盤不替換任何存儲,只加載為/mnt/extdisk一個文件夾,需要的數據可以移動到/mnt/extdisk中。

關于供電部分,外置磁盤的供電在開發(fā)板上三個USB口也就差不多1A,移動硬盤要消耗500ma,而外置音箱也要消耗500ma,如果所接入的外置設備比較多,要解決供電問題,唯一的方法就是采用獨立供電。很多外置磁盤帶獨立供電的,可以單獨連接一個電源。

外部磁盤替換FLASH可寫分區(qū)的原理

在我們沒有啟用外置磁盤之前系統是這樣啟動的:

從內核首先啟動加載了只讀分區(qū)部分,然后再掛載可寫分區(qū)部分,一直到之后的亂七八糟工作……


kernel–>rootfs(/rom)–>FLASH可寫分區(qū)(/overlay)–>….. (/overlay=mtd3)


在我們啟動了外置磁盤之后是這樣的順序:

從內核首先啟動加載了只讀分區(qū)部分,然后再掛載可寫分區(qū)部分,在可寫分區(qū)中發(fā)現了fstab(文件系統加載配置)配置,通過該配置掛載外部磁盤為可寫分區(qū)(卸載掉之前掛載的可寫分區(qū)),一直到之后的亂七八糟工作……


kernel–>rootfs(/rom)–>FLASH可寫分區(qū)(/overlay)–>fstab–>外部磁盤(/overlay) (/overlay=/dev/sd[N][X])


最大的區(qū)別在于,當FLASH可寫分區(qū)被掛載之后(外部磁盤模式)將通過fstab重新的將外部磁盤掛載為/overlay替換掉FLASH可寫分區(qū)的位置。

存儲器選型介紹

移動硬盤:在M150的電路板上有三個USB2.0接口均可以用來連接移動硬盤,請使用2.5寸或1.8寸移動硬盤,M150的外部供電至少要達到12V 1A才能帶動一塊硬盤,推薦使用支持獨立供電的移動硬盤。硬盤的優(yōu)勢是,沒有擦寫次數限制,速度快,并且性能也比較好。

FLASH閃存:閃存技術存儲現在很普遍,M150支持TF卡和U盤兩種閃存存儲方式,閃存選購時請注意數據存儲技術有區(qū)別:

  • SLC: Single Layer Cell 單層單元, SLC的特點是成本高、容量小、速度快,每個存儲單元有1bit數據,每個單元可擦寫次數可達到10萬次,一般使用在工業(yè)級產品和服務器級的SSD中,如果你的設備主要提供頻繁擦寫,使用SLC比較適合,但是其價格也要貴很多。
  • MLC: Multi-Level Cell多層單元,在相同的單元密度下可存儲2bit數據,這個是目前市面上消費級SSD使用的最主要存儲技術,但是由于密度增加和算法原因,每個單元理論可擦寫次數為3000-10000次。
  • TLC: Triple-level cell多倍單元,在相同的單元密度下可存儲3bit數據,這個是目前低價位U盤常用的,其特點是密度大成本低,缺點是速度慢,容易損壞,每個單元理論可擦寫次數為500-1000次。

所以在這里hoowa推薦,如果你要做網絡存儲,使用移動硬盤是寫文件最快的(最好獨立給移動硬盤有一個供電),理論連續(xù)寫速度可以達到20MB/s(實際在10MB/s以內,USB的限制);如果使用U盤或TF卡,寫速度相對比較慢,如果不做網絡存儲也無所謂了。

讓系統識別外置磁盤

在這里到以后的操作流程需要保證設備連接外網,如果你的外網連接有問題,請參考前幾章的教程重新排查。

第一步: 安裝驅動和工具包

在保證設備已經能連接外網的情況下執(zhí)行以下指令:


root@SmartRouter:/# opkg update
root@SmartRouter:/# opkg install kmod-usb-core kmod-usb-ohci kmod-usb-uhci kmod-usb2
root@SmartRouter:/# opkg install kmod-usb-storage kmod-usb-storage-extras kmod-fs-ext4 kmod-fs-vfat kmod-nls-utf8 kmod-nls-cp437
root@SmartRouter:/# opkg install usbutils fdisk block-mount e2fsprogs blkid


執(zhí)行過程中會有很多安裝包安裝狀態(tài)提示,只要提示不是報錯就不用理會。

重新啟動系統使相關驅動加載進入內核:


root@SmartRouter:/# reboot


第二步: 檢測外置磁盤

檢測U盤和移動硬盤的方法一樣,直接插入存儲設備,等待片刻后執(zhí)行以下指令看到(40G 1.8寸移動硬盤舉例):


root@SmartRouter:/# fdisk -l

Disk /dev/mtdblock0: 128 KiB, 131072 bytes, 256 sectors
…..

Disk /dev/sdb: 37.3 GiB, 40007759872 bytes, 78140156 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x13015f0b

….


檢測TF卡方式有點區(qū)別,TF卡沒有自動上電功能,首先給開發(fā)板斷電,然后插入TF卡,然后再給開發(fā)板上電,之后執(zhí)行以下指令:


root@SmartRouter:/# fdisk -l

Disk /dev/mtdblock0: 128 KiB, 131072 bytes, 256 sectors
……

Disk /dev/sda: 3.7 GiB, 3995074560 bytes, 7802880 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0×00000000

….


以上檢測其中的Disk /dev/sda的/dev/sda就是外置磁盤的設備符號,這個設備符號不是固定不變的,隨著驅動順序可能會產生變化,但是現在我們要記住這個設備符號。

在我們的開發(fā)板上,設備符號總是以/dev/sd[X][n]方式顯示的。其中X表明設備符號,n表明分區(qū)符號。

每個插入系統的存儲設備根據順序是有變化的,在開發(fā)板上:

  • /dev/sda 第一個插入的USB存儲設備,也可能是TF卡
  • /dev/sda1 第一個插入的USB存儲設備的第一個分區(qū)
  • /dev/sda2 第一個插入的USB存儲設備的第二個分區(qū)
  • /dev/sdb 第二個插入的USB存儲設備,也可能是TF卡
  • /dev/sdc 第三個插入的USB存儲設備,也可能是TF卡
  • …..

切記:

1. 如果設備重啟,順序可能會產生變化,/dev/sda可能會變成/dev/sdb的,不過后續(xù)我們有辦法解決。
2. 在下面的操作流程,不論是TF卡,還是U盤或移動硬盤,都是相同的,唯一不同的就是設備符號,每次檢查設備符號都要使用fdisk -l這個指令。
3. 再嘮叨一次,設備符號是會變化的,每次操作時候要fdisk -l查看。

格式化和分區(qū)

hoowa使用了一個320GB的2.5寸移動硬盤做演示,各位用什么都可以,沒有硬性規(guī)定(硬盤速度快點)。

第一步: 對設備進行分區(qū)

hoowa計劃的分區(qū)結構是這樣:2GB SWAP交換內存分區(qū),余下的容量作為新的外置可寫分區(qū)系統。

我們使用linux下的分區(qū)指令fdisk來進行操作,這次啟動hoowa磁盤被識別成為了/dev/sda(記住這里要看你自己的設備符號是什么,不能直接抄h(huán)oowa的舉例):

輸入p指令查看當前磁盤分區(qū)情況:

輸入d指令刪除掉舊分區(qū)(如果你有多個分區(qū)刪除程序會讓你輸入刪除哪一個范圍是1到4,如果只有一個會默認刪除掉):

一直刪除到沒有分區(qū)為止:

輸入n指令創(chuàng)建分區(qū):

輸入p創(chuàng)建主”分區(qū)1″:

輸入開始位置直接回車,結束位置填寫+2G表示容量為2GB:

輸入t指令修改這個分區(qū)類型為SWAP交換內存(編號為82的分區(qū)類型):

再創(chuàng)建第二個分區(qū):

在結束位置這里直接按回車,表示使用全部容量:

查看當前分區(qū)是否OK:

保存分區(qū)到磁盤上:

重新啟動系統,有時候這一步的操作會出現內核表沒有更新:


root@SmartRouter:/# reboot


第二步: 格式化

sda2分區(qū)是用來存放數據的,因此需要格式化。
hoowa向大家推薦使用ext3或ext4分區(qū)類型進行格式化,這樣速度和穩(wěn)定性都比較好。

由于重新啟動后磁盤的設備符號可能變化,因此這里hoowa又看了一次當前的狀態(tài):


root@SmartRouter:/# fdisk -l
……


這里/dev/sda1的類型為82,Linux swap表示它是交換內存分區(qū);/dev/sda2的類型是83, Linux表示它是文件系統分區(qū)。

使用ext4文件系統格式化/dev/sda2作為外置可寫分區(qū):

格式化swap交換分區(qū)/dev/sda1:

用外置磁盤替換FLASH可寫分區(qū)第一步: 將/overlay內容都復制到外置磁盤上

這里hoowa的外置磁盤上根分區(qū)設備符號為/dev/sda2(記住上面講的,要看你自己的設備符號是什么,不能直接抄h(huán)oowa的舉例sda2)。

創(chuàng)建和掛載外部磁盤的文件分區(qū):


root@SmartRouter:/# mkdir /mnt/extdisk
root@SmartRouter:/# mount /dev/sda2 /mnt/extdisk


復制文件:


root@SmartRouter:/# tar -C /overlay -cvf – . | tar -C /mnt/extdisk -xf -
root@SmartRouter:/# sync


卸載外部磁盤:


root@SmartRouter:/# umount /mnt/extdisk


第二步: 讀取出外置磁盤的UUID編號

使用磁盤設備符號掛載太危險了,因為它可能變化,這次是/dev/sda下次你隨便接入個其他什么設備可能變成/dev/sdb了,這怎么得了啊。

我們要用UUID了,UUID編號的作用就像身份證,不論磁盤的設備符號怎么變化,UUID是不改變的(如果改變了跟順序沒關系,可能是分區(qū)本身有變化了)。

先讀出UUID我們下一步要使用:

每個分區(qū)的UUID都不同,這里我們記住/dev/sda2的,因為這個是我們要準備做可寫分區(qū)的部分。在hoowa的這個硬盤上它是”0af3648e-a204-4e8d-b6a1-31cb6e8ce3ed”,每臺機器不一樣,這玩意不能直接抄啊。

第三步: 設置系統啟動自動掛載外部磁盤

現在我們寫的文件還是FLASH可寫分區(qū)。/etc/config/fstab配置文件是掛載記錄(現在還是修改FLASH可寫分區(qū)的,只有這么修改才能實現轉換,記得10.2咋講的不)。

文件結構:


#自動掛載部分
config global automount
……
#自動交換區(qū)掛載
config global autoswap
……
#靜態(tài)掛載(匿名段配置,可以有多個相同的)
config mount
……


fstab配置config global automount段 可選參數:


鍵 值 必須設置 說明
from_fstab 1 是 在hotplug執(zhí)行的時候掛載,值為1表示打開,可選參數: 0 禁用,1 啟用
anon_mount 0 是 當hotplug執(zhí)行到掛載的時候,自動掛載匿名(無config mount配置)的磁盤到/mnt/下??蛇x參數: 0 禁用,1 啟用

fstab配置global autoswap段 可選參數:
鍵 值 必須設置 說明
from_fstab 1 是 在hotplug執(zhí)行的時候掛載,值為1表示打開,可選參數: 0 禁用,1 啟用
anon_swap 1 是 自動掛載任何一個外置磁盤上的交換區(qū),可選參數: 0 禁用,1 啟用

fstab配置config mount段 該段為匿名段可重復存在,可選參數:
鍵 值 必須設置 說明
target 字符串 是 被掛載的位置
device 字符串 否 被掛載的設備符號,如果采用uuid方式掛載可以不配置,可選參數通過fdisk -l查看具體要掛載設備符號
uuid 字符串 否 被掛載的設備UUID號,不能跟device一起使用。
fstype 字符串 是 分區(qū)文件系統類型,可選參數: ext4 / ext3 / fat32
options 字符串 否 掛載時候所使用的參數,如果是ext3 / ext4 可以填寫: rw,sync 表示同步允許讀寫,如果是只讀修改為ro,sync
enabled 數值 是 是否啟用,可選參數: 0 禁用,1 啟用
enabled_fsck 數值 是 是否在掛載的時候檢測文件系統是否異常,可選參數: 0 禁用,1 啟用


舉例:使用UCI直接修改/etc/config/fstab配置文件

清理掉fstab舊配置:


root@SmartRouter:/# echo > /etc/config/fstab
root@SmartRouter:/# uci set fstab.automount=global
root@SmartRouter:/# uci set fstab.automount.from_fstab=1
root@SmartRouter:/# uci set fstab.automount.anon_mount=0
root@SmartRouter:/# uci set fstab.autoswap=global
root@SmartRouter:/# uci set fstab.autoswap.from_fstab=1
root@SmartRouter:/# uci set fstab.autoswap.anon_swap=1
root@SmartRouter:/# uci add fstab mount  cfg044d78


上面這個cfg044d78是hoowa這臺機器在創(chuàng)建mount時候產生的唯一值,因為mount是屬于匿名段(還記得之前章節(jié)里介紹過UCI部分的匿名段嗎)。也就是說后續(xù)的增加參數操作使用這個cfg044d78代表當前mount操作就行,請注意啊各位,這個cfg開頭的名字在每臺機器上都不一樣各位不要直接抄這部分的指令啊,要變通修改為自己的啊。

UUID填寫剛才blkid取到的那個UUID,其他參考這個設置:


root@SmartRouter:/etc/config# uci set fstab.cfg044d78.uuid=0af3648e-a204-4e8d-b6a1-31cb6e8ce3ed
root@SmartRouter:/etc/config# uci set fstab.cfg044d78.target=/overlay
root@SmartRouter:/etc/config# uci set fstab.cfg044d78.fstype=ext4
root@SmartRouter:/etc/config# uci set fstab.cfg044d78.options=rw,sync
root@SmartRouter:/etc/config# uci set fstab.cfg044d78.enable=1
root@SmartRouter:/etc/config# uci set fstab.cfg044d78.enabled_fsck=0


保存全部fstab的配置:


root@SmartRouter:/etc/config# uci commit fstab


重新啟動系統使一些生效:


root@SmartRouter:/# reboot


/overlay是否已經到磁盤上(如下顯示表示掛載):


root@SmartRouter:/# mount|grep sda2
/dev/sda2 on /overlay type ext4 (rw,sync,relatime,user_xattr,barrier=1,data=ordered)


我們來檢測下是否swap已經工作了(Swap部分的free有了值表示生效):


root@SmartRouter:/# free
total used free shared buffers
Mem: 61664 19184 42480 0 1708
-/+ buffers: 17476 44188
Swap: 1048572 0 1048572


外置磁盤掛載后要注意事項事項A: 事實就是系統已經變了

從本節(jié)開始,到以后我們再也不用操作FLASH原有的可寫分區(qū)了,也就是說同樣的/etc/config/fstab這個文件,上面的修改永久的保存在了FLASH可寫分區(qū)里,下面我們再做修改就都是針對外置磁盤的了。

事項B: 外置磁盤拔掉會如何

如果拔掉了,系統會默認使用FLASH的可寫分區(qū)來作為/overlay掛載,這樣系統將恢復到10.6節(jié)之前的系統了。如果你的系統被玩壞了,你可以重復操作本章的這個流程,這樣就相當于重新做系統了。

事項C: 插入其他設備系統報錯了

這是因為供電和啟動的原因導致磁盤順序瞬間變化,這個時候hoowa建議你關機,再重新開機。UUID會再次找到你的那個磁盤的。

事項D: 檢查你的/etc/config/fstab文件

現在你已經是外置磁盤的文件系統了,而那個文件里可能保留著FLASH上的那個加載/overlay的語法(已經是外置了還加載個鳥)。如果有問題就這么清理(UCI命令舉例):


root@SmartRouter:/# echo > /etc/config/fstab
root@SmartRouter:/# uci set fstab.automount=global
root@SmartRouter:/# uci set fstab.automount.from_fstab=1
root@SmartRouter:/# uci set fstab.automount.anon_mount=0
root@SmartRouter:/# uci set fstab.autoswap=global
root@SmartRouter:/# uci set fstab.autoswap.from_fstab=1
root@SmartRouter:/# uci set fstab.autoswap.anon_swap=1
root@SmartRouter:/# uci commit fstab


重啟生效:


root@OpenWrt:/# reboot


本章尾記:

經過以上操作以后,我們的系統以后安裝軟件都將自動安裝到外置的磁盤上,而內存也通過Swap方式增加了2G容量。為我們后續(xù)玩更多的功能打好了基礎。經過這樣設置后,這個外置磁盤就不能斷開連接,否則系統將崩潰。



上一篇:迅雷路由來了:雙頻千兆還能賺錢
下一篇:360安全路由體驗 連小白都能配置的路由器
沙發(fā)
發(fā)表于 2014-6-2 20:25 | 只看該作者 | 來自江西
學習學習!
回復 支持 反對

使用道具 舉報

板凳
發(fā)表于 2015-3-2 21:54 | 只看該作者 | 來自北京
強烈支持樓主ing……
回復 支持 反對

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

Archiver|新帖|標簽|軟件|Sitemap|ZNDS智能電視網 ( 蘇ICP備2023012627號 )

網絡信息服務信用承諾書 | 增值電信業(yè)務經營許可證:蘇B2-20221768 丨 蘇公網安備 32011402011373號

GMT+8, 2024-12-23 11:22 , Processed in 0.078951 second(s), 15 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報:report#znds.com (請將#替換為@)

© 2007-2024 ZNDS.Com

快速回復 返回頂部 返回列表