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