fuseMk5A git_repo
Brought to you by:
jwagnerhki
========================================================== Filesystem in Userspace for Mark5A/B/C dispacks Light the fuse! ;-)) http://fusemk5a.sourceforge.net/ Lincense: GNU LGPL Copyright (C) 2007 Jan Wagner <jwagner@kurp.hut.fi> Version 1.1.7 ========================================================== The fuseMk5A userspace filesystem provides read-only access to the scans on the diskpack. The scans will be visible as normal files in a normal directory, and they can be used just like any normal files from any program you like. 1 -- Install FUSE FUSE is a general file system layer that file system providers such as fuseMk5A, sshfs, obexfs and others use. If you are installing on a Haystack Mark5 and/(or...) kernel 2.4, and quite probably you are, then see either README-SargePreparations.txt or README-RedhatPreparations.txt If you have a 2.6 kernel, then install FUSE utilities version 2.6.x. Use the official packages provided in your Linux distro. Note: the FUSE 2.6 and 2.7 kernel module versions have not been tested yet with fuseMk5A. The code may or may not compile. It's recommended you use FUSE kernel module version 2.5.x 2 -- Compile and install fuseMk5A Make sure that you have the 'g++' compiler version 3.3 installed. The StreamStor SDK libraries are for version g++ 3.3. You may have to edit the Makefile. The line SSD = /usr/local/src/streamstor/linux/ has to contain the directory in which the StreamStor SDK has been installed. Depending on the SDK version the following subdirs and files should be present under the $(SSD) directory: lib/gcc_v3/ libssapi.a include/ xlrapi.h xlrtypes.h xlrdbcommon.h driver/lib/ libwdapi*.so (you can try 'locate libssapi.a') On the LDFLAGS line, if you have SDK 9.x or 8.x you need to apped the newest -lwdapiXXX version, such as -lwdapi921, -lwdapi910 or -lwdapi801 or newer: LDFLAGS = $(LDPATHS) ... -lssapi -lwdapi921 To compile fuseMk5A finally run $ make To install it and do some extra steps run: $ sudo make install This copies fuseMk5A into /usr/bin/ and performs the steps in section 3 -- Usability tuning. It also edits /etc/rc.local (Redhat) or /etc/modules (Debian) to load the 'fuse' kernel module automatically on boot. 3 -- Some usability tuning Optional! These steps are already done during the 'sudo make install'. You _may_ follow these manually as well. The 'fuse' kernel module must be loaded for any fuse programs to work. First time: $ sudo modprobe fuse Optional: you can make 'fuse' to be modprobed automatically at system boot. RH9: root$ echo "modprobe fuse" >> /etc/rc.local Debian: root$ echo "fuse" >> /etc/modules Now create a mount point for fuseMk5A and allow normal users to unmount it: $ sudo mkdir /mnt/diskpack $ sudo chmod a+rwxt /mnt/diskpack $ sudo chown oper:users /mnt/diskpack ($ sudo chown oper:oper /mnt/diskpack ) Update /etc/group and add 'oper' to the 'fuse' group: fuse:x:107:oper (or similar) After editing /etc/group you need to log out and back in again to apply your fuse group membership. 4 -- Typical usage To start: You must stop the Mark5 software before starting fuseMk5A. Use Enddim, edrs, EndM5 or other. oper@Mark5-637[1]% ./fuseMk5 /mnt/diskpack FuseMk5A will then start and stay in the foreground. You should not stop fuseMk5 with Control-C. Instead unmount it from another console window: oper@Mark5-637[1]% fusermount -u /mnt/diskpack Mount options: fuseMk5 [-v|--verbose] [-s|--silent] [-R|--noreset] [-r|--reset] [-b <0,1,2>|--bank=<0,1,2>] [-m <0,1>|--machine=<0,1>] [-c <bytes>|--cachesize=<bytes>] </mnt/where> [FUSE_options] -v --verbose run in foreground mode, verbosely (default) -s --silent run in foreground mode, but with less output -r --reset performs initial XLRCardReset, sometimes needed -R --noreset does not do any card reset at start (default) -b --bank specify the bank to use (0=A, 1=B, 2=dual; default is 0) -m --machine specify Mark5 type (0=Mark5A/5B(-), 1=Mark5B+/5C; default is 1) -c --cachesize size of the read cache (default is 16777216 bytes) FUSE_options additional options for FUSE 'fusermount' like -oallow_root Usage: # in own terminal: oper@eff-mark5c-1:~$ fuseMk5 --bank=2 /mnt/diskpack # in other terminal: oper@eff-mark5c-1:~$ ll /mnt/diskpack total 0 -r--r--r-- 1 oper oper 25G 1969-12-31 19:00 dualbank02.m5b -r--r--r-- 1 oper oper 101G 1969-12-31 19:00 dualbank03.m5b -r--r--r-- 1 oper oper 2.9G 1969-12-31 19:00 dualbank04.m5b -r--r--r-- 1 oper oper 204G 1969-12-31 19:00 dualbank05.m5b -r--r--r-- 1 oper oper 604G 1969-12-31 19:00 dualbank11.m5b oper@eff-mark5c-1:~$ /usr/bin/time cat /mnt/diskpack/dualbank04.m5b > /dev/null 0.58user 5.86system 0:25.80elapsed 25%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+171minor)pagefaults 0swaps oper@eff-mark5c-1:~$ dd if=/mnt/diskpack/dualbank04.m5b of=/dev/null bs=1M 2944+1 records in 2944+1 records out 3087435440 bytes (3.1 GB) copied, 14.63 s, 211 MB/s Note: probably due to memcpy()'s done between the user program (dd), the FUSE kernel module and the FUSE fuseMk5 file system, the throughput reported in the fuseMk5 verbose output log is twice faster than the actual rate seen in the user program like dd. You can test the maximum possible StreamStor raw read speed by running the included program "./maxspeed"; fuseMk5A and Mark5 software must not must be running simultaneously. If you want to test maxspeed with an extra memcpy() step, look at maxspeed.c and change "#define DO_MEMCPY" from 0 to 1. To unmount the diskpack: oper@Mark5-637[113]% fusermount -u /mnt/diskpack 4 -- Troubleshooting If there are FUSE errors when you try fuseMk5A, your FUSE setup might not be correct. You can test by trying other FUSE programs, the easiest would be 'sshfs', usage is similar to: $ sshfs username@my.observatory.org:~/somedir/ /mnt/test/ There may be some issue with permissions of the StreamStor kernel module. Confirm that you have 'rw' permission for all users: oper@Mark5-637% ll /dev/windrvr6 crw-rw-rw- 1 root root 254, 0 Sep 28 00:26 /dev/windrvr6 If there are other problems, post to the projects sourceforge forum or send an email to the developers. Include the output of: $ uname -a $ g++ --version $ fusermount --version $ /sbin/modinfo fuse