Journalling Flash File System

From DD-WRT Wiki

(Difference between revisions)
Jump to: navigation, search
Revision as of 02:09, 30 January 2009 (edit)
Skygunner (Talk | contribs)
m (Testing ipkg)
← Previous diff
Revision as of 07:19, 5 June 2009 (edit) (undo)
Ausimus1 (Talk | contribs)
(Removing all content from page)
Next diff →
Line 1: Line 1:
-= Introduction = 
-'''[[Glossary#Journalling Flash File System (JFFS)|Journalling Flash File System]]''' (JFFS/JFFS2) is a re-writable area within a DD-WRT-enabled device. 
-* Located in ''/jffs''. 
- 
-Contents stored: 
-* On DD-WRT Device main flash directly on the device (''/jffs''), or 
-* ''mount --bind /storagelocation /jffs''.<br>Where ''storagelocation'' is 
-** Off-board supplemental flash, see [[SD/MMC_mod]], (''/mmc/jffs''). 
-** Network Area Storage [NAS], or Server. (''//servername/sharename'') 
-** JFFS reports as it's own free space, the free space on Share or SD Card, in the Web Interface 
- 
-'''Examples of the kind of programs and data are''': 
-* Custom configuration files 
-* NoCat splash pages and configuration 
-* [[Ipkg|ipkg]] (Requires JFFS. See ipkg.) 
-* Web-site hosting 
-* Many other things. 
-* JFFS must be Enabled for certain /jffs-dependent applications. 
- 
- 
-= Enable JFFS: Create ''/jffs'' = 
- 
-==Prerequisites== 
- 
-On 4MB routers, enabling JFFS is made possible by using the DD-WRT Standard-NoKaid builds. NoKaid removes a specific XBOX module, leaving room for JFFS. The Mini builds of DD-WRT also work. This leaves between about 320KB - 700KB+ of available re-writable space in /jffs.'' 
- 
-The jffs file structure takes up the first 324k of space. so you need a WRT build that leaves you more room than that.  
- 
-''Very old versions of some Linksys routers (no longer manufactured for many years) contained 8MB of Flash and 32MB of RAM, many DD-WRT-capable devices today contain 4MB of Flash memory; a few models from certain manufacturers contain more flash (La Fonera, [[ASUS WL-500g Premium|ASUS WL-500GP]]), some contain less (2MB). See [[Supported_Devices|Supported Devices]].<br> 
- 
-Note that '''DD-WRT v24sp1 VPN builds have the JFFS feature removed''', presumably due to conflicts that Brainslayer found between JFFS and bandwidth monitoring. See [http://www.dd-wrt.com/phpBB2/viewtopic.php?t=31932&postdays=0&postorder=asc&highlight=jffs+menu&start=0 this thread] for more information. Users interested in v24sp1 can opt: 
- 
-# Use a build other than VPN, both MINI and MEGA still have JFFS 
-# Use an older build of DD-WRT 
-# Use a custom build, either homemade or [http://www.dd-wrt.com/dd-wrtv2/downloads/others/eko/V24_TNG/svn10086/dd-wrt.v24-10086_NEWD_openvpn_jffs_small.bin dd-wrt.v24-10086_NEWD_openvpn_jffs_small.bin], which is described [http://www.dd-wrt.com/phpBB2/viewtopic.php?t=36037&p=200431#200431 here] as missing "snmp, all languages, some GUI styles and more.". 
- 
-== Flash Wear: A Warning == 
-Take care not to store frequently changing files (i.e. often-changing log files) on Flash as this can cause flash wear-out over time. 
-* A journalling flash file system is specifically designed to minimize frequent overwrites. 
-* Files which are read many times but written infrequently work well on main flash.  
-* Using the space provided by [[SD/MMC_mod]] places wear on replaceable secondary flash storage. 
- 
- 
-== Directions for (normal) users: using Web-GUI Interface== 
-''The steps to enable JFFS through the router web page are very specific. To avoid having to reset and reprogram your router, it's smart to make a backup here of your settings. If you follow these steps exactly, it should not lock up.''  
-# On the router web page click on ''Administration''.  
-# Scroll down until you see ''JFFS2 Support'' section. 
-# Click ''Enable JFFS''. 
-# Click ''Save''. 
-# Wait couple seconds, then click ''Apply''.  
-# Wait again. Go back to the ''Enable JFFS'' section, and enable ''Clean JFFS''.  
-# '''Do not click "Save".''' Click '''Apply''' instead.<br><br>The router formats the available space.<br><br> 
-# Wait till you get the web-GUI back, then disable "Clean JFFS" again. 
-# Click "Save". 
-# It may be wise to Reboot the router, just to make sure 
- 
- 
-==Directions for (freaky) Linux Gurus: CLI== 
-Enter the following commands from the CLI: 
-  
- nvram set jffs_mounted=1 
- nvram set enable_jffs2=1 
- nvram set sys_enable_jffs2=1 
- nvram set clean_jffs2=1 
- nvram set sys_clean_jffs2=1 
- nvram commit 
- reboot 
- 
-Note: Device might reboot/hang after cleaning which might take long; be patient. 
- 
-'''WARNING''' 
- 
-A user comments: I tried the previous commands under La Fonera firmware v24 RC4 and corrupted all my settings. I had to recover my unit with the procedures on La Fonera flashing page. I am not sure if this is a bug or these commands are not suited for La Fonera. Please try to use the web interface above. It works for me. 
- 
-To unmount the JFFS:  
- 
- nvram set sys_enable_jffs2=0 
- nvram set sys_clean_jffs2=0 
- nvram set jffs_mounted=0 
- nvram commit 
- reboot 
- 
-Afterwards you can delete these variables with "nvram unset <variable>". 
- 
-=Options for Increasing JFFS Space= 
- 
-== Add a 1GB flash memory card == 
-* Add the [[SD/MMC mod]] 
-** up to (at least) 1GB storage using common swappable SD memory cards (built-in support with DD-WRT v2.4 and later). 
-** create the folder /mmc/jffs 
-::: ''mkdir /mmc/jffs'' 
-:* Use the Mount Bind command to point /jffs to the storage card: 
-::: ''mount --bind /mmc/jffs /jffs'' 
-:* with v24 enable JFFS2 support (tab: Administration -> tab: Management -> section: JFFS2 Support) 
-:: or command ''nvram set sys_enable_jffs2=1'' 
-:* To use ipkg also create folder /jffs/tmp/ipkg 
-:::''mkdir /jffs/tmp'' 
-:::''mkdir /jffs/tmp/ipkg'' 
-* For Windows: [[WinSCP]] can be used to transfer files to and from the router, eliminating the need to pull the card out and put it in a card reader on a PC. 
-* For Linux, Mac OS X: Other SCP transfer applications exist. 
-* Removed cards can be accessed natively in Linux or OS X, or on Windows with the Ext2FS driver ([http://www.fs-driver.org] or [http://ext2fsd.sourceforge.net]).  
-* On older firmware (v2.3), the limited JFFS space can be used to hold the drivers to load support for the SD card. 
- 
- 
-== Add USB Storage == 
-* Routers with USB storage like [[Linksys WRTSL54GS]] or [[ASUS WL-500g Premium]] can have firmware with built-in USB support and then /jffs mounted on the USB device. To enable USB on these devices see: [[USB_storage]] 
-** V24 and later firmware: USB support is available within Mega and some Mini builds. 
- 
-*Using V24SP1 Mega on an Asus WL-500W with external USB HDD: 
- 
-:To mount the USB drive, and enable /jffs 
- mount /dev/scsi/host0/bus0/target0/lun0/part1 /mnt 
- mkdir /mnt/jffs 
- mount /mnt/jffs /jffs 
- 
-*Also enable JFFS2 support in either web-GUI (tab: Administration -> tab: Management -> section: JFFS2 Support) 
-: or with the command  
- nvram set sys_enable_jffs2=1 
-*To use ipkg also create folder /jffs/tmp/ipkg 
- mkdir /jffs/tmp 
- mkdir /jffs/tmp/ipkg 
- 
-==Using [[CIFS]] (Client Samba): Storing ''/jffs'' content remotely== 
-One option is to create a share on the network and mount it on the router at ''/jffs'' using [[CIFS]]. Exact steps at [[CIFS]] 
- 
-Overview: 
-* Enable JFFS in the web-GUI or put the following command in a Script or Startup Command. 
- nvram set sys_enable_jffs2=1 
-* Create a share on a CIFS-capable server called ''jffs''. 
-** Standard Microsoft Windows Shared Folder 
-** Other operating systems may refer to SMB or Samba 
-* In the Web GUI mount the [[CIFS]] share at ''/jffs''. 
-* Folder ''/jffs'' appears locally, while 
-: Content actually saved remotely, on 
-:* NAS (Network Attached Storage) 
-:* Server (PC or some type of file server) 
-* To use ipkg also create folder /jffs/tmp/ipkg 
-::''mkdir /jffs/tmp'' 
-::''mkdir /jffs/tmp/ipkg'' 
-'''Costs:''' 
-* ! Setting up a NAS or Server only for router maybe not economical. 
-** Equipment Costs: Requires existing NAS or PC Server 
-** Electricity Costs: if entire Server is only serving router 
-* Availability Demands: CIFS share must be available 
-** 24/7, or whenever the DD-WRT Device is on, and 
-** Storing JFFS Share on quality equipment is required (i.e. Raid, Power Backup) 
-*** ! Remote storage down means /jffs down, could mean DD-WRT Device down (increases the weak points). 
-* Security Limitations: CIFS is limited to Microsoft's SMB protocol, offering up to only 128-bit security. 
-** Poor Microsoft Protocol Security is not a problem if the LAN is physically and electronically protected from outside or inside intrusion (i.e. Guards, Guns, Locks, Dogs, Mines, Cameras, Firewalls) 
-* LAN Connection Required: NAS cannot be wirelessly attached to DD-WRT Device. 
-* Hassle: Using Microsoft Windows as the ''jffs'' Server 
-** ! Symbolic links in ''/jffs'' may not work. 
-** ! Rename (mv) commands on the ''/jffs'' mount may not work. 
- 
-'''Most people only own an (inexpensive) Windows PC. A common Desktop PC does not a 24/7 Server make.''' 
- 
- 
-'''The following non-updated (as of 20080520) examples may be out of date:''' 
-* CIFS was broken on many builds this update author tried. Although other people have reported it working - It may be a limitation of ''BusyBox'' CIFS when using NTLMv2 and 128-bit encryption. 
-* (Mostly) only structural and spelling mistakes were corrected below (20080522) 
- 
-===Use a Startup Script: Example 1=== 
-# Read how to use [[Startup Scripts]]. Then place the following into your startup script to mount the JFFS partition: 
- 
- umount /jffs #unmounts existing /jffs if existing 
- mount.cifs //<server's IP>/jffs /jffs -o username=<the username>,password=<the password> 
- nvram set sys_enable_jffs2=1 # fake-enable JFFS. Enable but do not commit. Makes ipkg think jffs2 is enabled. 
- 
-NOTE: Username is ''Guest'' when hosted on Windows XP & 'Simple File Sharing' is enabled - This is the default on Windows XP Home. 
- 
-===Use Startup Scripts: Example 2=== 
-This method uses 2 scripts: The first will be started from /tmp/smbshare & mount the samba share under /jffs and start the other script. The second will be started from /jffs and unmount /tmp/sambashare. 
- 
-Instructions: 
- 
-# Enable [[CIFS]] (see also [[Jffs_sharing_in_a_Linux_server]]). 
-# Create a script called "startup.smb.sh" on the share: 
- 
- #!/bin/sh 
-  
- #smb settings: same as the settings in the webgui 
- # change these to mount a different share than the current at /jffs 
- SMBSHARE=`nvram get samba_share` 
- SMBUSER=`nvram get samba_user` 
- SMBPASS=`nvram get samba_password` 
-  
- #script to start in /jffs once we're done mounting 
- JFFS_SCRIPT=startup.jffs.sh 
-  
- #where to log what is happening 
- export SMBLOG=/tmp/smblog 
-  
- ####### ok, here we go... ;) ####### 
- echo "" > $SMBLOG 
- cd / 
-  
- #make sure JFFS is unmounted. 
- echo "umounting /jffs if necessary..." >> $SMBLOG 
- umount /jffs >> $SMBLOG 2>&1 
-  
- #mount our smbshare at /jffs 
- echo "mounting $SMBSHARE at /jffs..." >> $SMBLOG 
- mount.cifs $SMBSHARE /jffs -o username=$SMBUSER,password=$SMBPASS >> $SMBLOG 2>&1 
-  
- #hand over startup to the JFFS part 
- /jffs/$JFFS_SCRIPT & >> $SMBLOG 2>&1 
-4. create a script called "startup.jffs.sh" on the share:<br> 
- #!/bin/sh 
-  
- #wait a sec, just to be sure the smb startup script has quit 
- sleep 1 
-  
- #unmount the smbshare, its identical to /jffs now anyway :) 
- umount /tmp/smbshare 
-  
- #to enable ipkg, we fake JFFS enabled. 
- #since theres no commit, this wont actually create a /jffs at Startup. 
- nvram set sys_enable_jffs2=1 
-  
- #ready to do specific stuff, like starting services 
- #or other commands from /jffs 
-  
-5. in the webinterface, enable [[CIFS]] with appropriate share/user/pass settings from step 2.<br> 
-* Enter "startup.smb.sh" as the script<br> 
-6. Apply Changes<br> 
-7. reboot<br> 
-<br> 
-Now you should have the share configured in the web interface mounted at /jffs and should also be able to run 'ipkg' ! 
- 
-*NOTE: If you are a Linux newbie, and you have problems with file permissions, look at [http://wrt-wiki.bsr-clan.de/index.php?title=Jffs_sharing_in_a_Linux_server this ] 
- 
-*Script files must be saved in UNIX format, not DOS. Windows editors that can do this are UltraEdit. EditPadPro and Crimson Editor, are free. 
-*[[WinSCP]] can be used to easily change the execute flags on the scripts. 
- 
-===Use Startup Script: Example 3 === 
-This method requires 2 shares available for DD-WRT, but allows you to have 2 different areas of storage for the router. Some might find it useful. It is an amalgamation of the previous 2 methods. 
- 
-Things you need: 
- 
-* 2 writeable shares on an NAS or Server. 
- 
-Procedure: 
- 
-1. Enable [[CIFS]]<br /> 
-2. Create a shell script in the network share, as follows:<br /> 
- 
- #!/bin/sh 
- nvram set sys_enable_jffs2=1 # fake-enable JFFS 
- umount /jffs # unmount /jffs if it exists 
- mount.cifs //<server's IP>/<jffs share name> /jffs -o username=<your username>,password=<your password> 
- 
-3. Enter the name of the script in the CIFS-Samba startup script box in the Web Interface.<br> 
-4. Apply changes.<br> 
-5. Reboot 
- 
-As an example network setup: 
- 
-* '''/tmp/smbshare''' located in a shared folder on the NAS called '''ddwrt''', which contains scripts (including '''startup.sh''' containing the above commands), yet to be installed packages and other static data 
-* '''/jffs''' located in a shared folder called '''jffs''', which contains program data for installed packages 
- 
-= Testing [[ipkg]]= 
-Log in to the CLI (via Telnet or SSH) and enter the following commands:<br> 
- cd /jffs 
- mkdir -p /jffs/tmp/ipkg 
- ipkg update 
- ipkg list 
- 
-[[Category:English documentation]] 
-[[Category:Advanced tutorials]] 

Revision as of 07:19, 5 June 2009