Saving to Network Storage (NFS)

mtrovato

New member
Hi all,

I am using a Chronos 2.1-HD High Speed Camera. I followed instructions in https://www.krontech.ca/wp-content/uploads/2021/09/Network-Control-v0.6.5-1.pdf and, when connecting my computer with an ethernet cable, I have access to the camera via the assigned IP. However, I don?t know how to save the footage over the network via NFS protocol. In page 29-30 of the manual (https://www.krontech.ca/wp-content/uploads/2021/09/RE-PDEV-10009-Chronos-User-Manual-Full-Software-Version-0.7.0.pdf) it is stated that step-by-step instructions are given in https://www.krontech.ca , but I have failed to find them. Can you please help?

Also notice that I can successfully share files between two laptops via NFS

Thanks
Best,
Marco
 
I have absolutely no experience with Sharing Folders / Storage for this Camera or File Transfer over Network, but the closest thing i could find from a ~2 Minute Search on the Website is this:
https://www.krontech.ca/wp-content/uploads/2021/09/Chronos-SMB-Share-Setup-Guide-1.pdf
I hope this helps, else somebody else Please Help.
 
There are also these Forum Posts / Threads, which one off is still on a pretty dated Firmware version, and both seem to use Some Linux OS, from flying over it very quickly. But maybe you can get some information out of there, or if not send a Personal Message to anyone in there, that got it to work aparently.
https://forum.krontech.ca/index.php?topic=567.0
https://forum.krontech.ca/index.php?topic=561.0
 
Nikon1 said:
There are also these Forum Posts / Threads, which one off is still on a pretty dated Firmware version, and both seem to use Some Linux OS, from flying over it very quickly. But maybe you can get some information out of there, or if not send a Personal Message to anyone in there, that got it to work aparently.
https://forum.krontech.ca/index.php?topic=567.0
https://forum.krontech.ca/index.php?topic=561.0

I have done exactly what is in the first link and I didn't suceed to establish the connection. I will try it again and, if not successful, send a PM to gcp5017, who seems to have succeeded.
I haven't tried SMB but that is definitely another option.
I will keep you posted.
Thanks
 
I have connected the camera and my desktop through a router and the NFS share works perfectly . Let me share what I have so others may benefit from this thread.

- Host: laptop with centos7

ifconfig [network] [192.168.0.XXX] netmask 255.255.255.0
followed server instructions in https://www.howtoforge.com/nfs-server-and-client-on-centos-7 . Among other things I have created shared dir /dir

- Client: Chronos Camera 2.1

Utils -> Network -> NFS Network Storage
Address: 192.168.0.XXX
Mount: /dir

Test and Apply

Thanks for your help
Best,
Marco
 
I've been unable to make this work, as the NFS server here requires authentication.  Is there any config in the Chronos to set that up?
 
Setup:
NFS Server: Windows Server 2025, Kerberos deactivated, anonymous and UID/GID access tested, acts as domain, dns and DHCP server

Chronos 1.4: Firmware 0.7.2, reachable by the server over ping

I want to set up a nfs share on my Windows 2025 Server. It uses nfs Version 4.1 and the connection is allowed for the IP of the camera.
My Windows PC can mount the share, but the chronos gives me an error mount.nfs: mount system call failed.

I looked through the firewall setup and found that for the inbound connection port 111 for UDP and TCP is missing so I added it.

Now the camera takes a really long time to check the connection and is not responsive, but ultimatly fails with mount.nfs:Connection timed out.
Windows Server says the adress is <servername>:/<sharename>, but i put into the chronos ip adress and under mount the share name.

The camera can connect to my QNAP NAS just fine.


Does anyone have an idea?
 
Try logging into your Chronos via SSH if you're comfortable with that. From there you could try querying the NFS shares your Windows server is exporting:

showmount -e {SERVER_IP}

The command the LCD interface triggers internally follows. You could try running it manually with verbose (-v) enabled for more info on what might be going wrong

mount -t nfs {SERVER_IP}:{SHARE} {MOUNT}

If you use the settings for configuring the NFS connection on the camera's LCD interface, it will make your Chronos routinely try to reconnect to the share, which as you've seen can cause the UI to hang, especially on initial camera startup.
 
Try logging into your Chronos via SSH if you're comfortable with that. From there you could try querying the NFS shares your Windows server is exporting:

showmount -e {SERVER_IP}

The command the LCD interface triggers internally follows. You could try running it manually with verbose (-v) enabled for more info on what might be going wrong

mount -t nfs {SERVER_IP}:{SHARE} {MOUNT}

If you use the settings for configuring the NFS connection on the camera's LCD interface, it will make your Chronos routinely try to reconnect to the share, which as you've seen can cause the UI to hang, especially on initial camera startup.
Thanks for the fast answer!

This is my share on windows Server:
1782890697342.png
Choosing the "Anonymous" option will lead to me beeing able to mount it on a win11 machine but not able the write on it.

I tried mounting the share on the camera via ssh, but that didnt help either:

I created a directory on the camera to mount to:
mkdir /mnt/CAMshare

And then I tried to actually mount the nfs share:
mount -t nfs <serverip>:CAMshare /mnt/CAMshare -v
mount.nfs: timeout set for Wed Jul 1 08:47:23 2026
mount.nfs: trying text-based options 'vers=4,addr=<ServerIP>,clientaddr=>CamIP>'
mount.nfs: mount(2): Input/output error
mount.nfs: mount system call failed

The same share works on my Windows PC in the same domain via CLI:
mount -o anon \\<ServerIP>\CAMshare T:

I tried to setup a WSL NFS Server, but I wasnt lucky doing so. I can only connect to it from the same server via the VM-ip address.
 
Last edited:
Thanks for the fast answer!

This is my share on windows Server:
View attachment 2071
Choosing the "Anonymous" option will lead to me beeing able to mount it but not able the write on it.
I tried mounting via ssh, but that didnt help either:

I created a directory on the camera to mount to:
mkdir /mnt/CAMshare

And then I tried to actually mount the nfs share:
mount -t nfs <serverip>:CAMshare /mnt/CAMshare -v
mount.nfs: timeout set for Wed Jul 1 08:47:23 2026
mount.nfs: trying text-based options 'vers=4,addr=<ServerIP>,clientaddr=>CamIP>'
mount.nfs: mount(2): Input/output error
mount.nfs: mount system call failed

The same share works on my Windows PC in the same domain via CLI:
mount -o anon \\<ServerIP>\CAMshare T:

I tried to setup a WSL NFS Server, but I wasnt lucky doing so. I can only connect to it from the same server via the VM-ip address.
Also where should I mount it in order to access it from the CAM GUI?
 
Thanks for the fast answer!

This is my share on windows Server:
View attachment 2071
Choosing the "Anonymous" option will lead to me beeing able to mount it but not able the write on it.
I tried mounting via ssh, but that didnt help either:

I created a directory on the camera to mount to:
mkdir /mnt/CAMshare

And then I tried to actually mount the nfs share:
mount -t nfs <serverip>:CAMshare /mnt/CAMshare -v
mount.nfs: timeout set for Wed Jul 1 08:47:23 2026
mount.nfs: trying text-based options 'vers=4,addr=<ServerIP>,clientaddr=>CamIP>'
mount.nfs: mount(2): Input/output error
mount.nfs: mount system call failed

The same share works on my Windows PC in the same domain via CLI:
mount -o anon \\<ServerIP>\CAMshare T:

I tried to setup a WSL NFS Server, but I wasnt lucky doing so. I can only connect to it from the same server via the VM-ip address.
I deactivated the windows firewall and now am able to mount the nfs share via ssh if i use nfs version 3:
Port 2049 was free before so I do not understand why it helped.

root@chronos:~# mount -t nfs -o vers=3 <ServerIP>:CAMshare /mnt/CAMshare -v
mount.nfs: timeout set for Thu Jul 2 09:58:04 2026
mount.nfs: trying text-based options 'vers=3,addr=<ServerIP>'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: trying <ServerIP> prog 100003 vers 3 prot TCP port 2049
mount.nfs: prog 100005, trying vers=3, prot=17
mount.nfs: trying <ServerIP> prog 100005 vers 3 prot UDP port 2049

The only problem now is I cannont save onto it.
 
Last edited:
Hello! Did you have any luck with resolving this?

The SSH commands I suggested were mostly for troubleshooting. The Chronos 1.4 mounts NFS shares at /media/nfs. Once mounted successfully, it should become a saving destination option.

One sort of quirk which actually may be helpful in your case is mounting the share via the camera's web interface. Unlike the camera's LCD interface, the web interface forces NFS version 4.0, which you might have better luck in combination with Windows Server
 
Hello! Did you have any luck with resolving this?

The SSH commands I suggested were mostly for troubleshooting. The Chronos 1.4 mounts NFS shares at /media/nfs. Once mounted successfully, it should become a saving destination option.

One sort of quirk which actually may be helpful in your case is mounting the share via the camera's web interface. Unlike the camera's LCD interface, the web interface forces NFS version 4.0, which you might have better luck in combination with Windows Server
Hey,

the connection is only possible with nfs version 3 put in the ssh command.
mount -t nfs -o vers=3 <ServerIP>:CAMshare /media/nfs -v

Version 4 does not work
mount -t nfs -o vers=4 <ServerIP>:CAMshare /media/nfs -v

mount.nfs: timeout set for Mon Jul 20 04:31:38 2026
mount.nfs: trying text-based options 'vers=4,addr=<ServerIP>,clientaddr=192.168.100.207'
mount.nfs: mount(2): Input/output error
mount.nfs: mount system call failed



I am then able to see the network location in the Camera and can also save to this share. The information will be lost after reboot obviously.

The camera will not save automatically onto the share when connected via SSH. Web interface does not work unfortnunately.
The webinterface says Version 0.7.0, the camera says 0.7.2
 
Hmmm... well at least it sounds like you have a solution now. You could modify the "mountNetDrive.sh" to match your parameters
...and then call it remotely through the "netShare" cgi script (which is what the web interface does):

Unfortunately, modifying the parameters the camera's LCD interface uses would require recompiling the chronos-cam-app, which has a significantly more involved development environment setup process.

As for the 0.7.0 vs 0.7.2 differences- yeah, it looks like the engineering team forgot to update the numbers reported by the REST API. Older Chronos software versions are even more inconsistent.
 
I got one step closer to actually using NFS as my saing method.
The program I am using to analyse the video is triggering the record via the REST API. The video record starts an can be saved to the nfs location. The videos however are now write protected and my program needs to change the attributes to give them some additional information. Is this a feature of the camera?

I will write which files i actually changed on the camera in another post. Maybe this is interesting for some else as well.
The cam will now mount nfs shares with version 3 and this is persistent even after a reboot.
 
I got help from Claude and changed the standard mounting from nfs 4 to nfs 3 for the webinterface.
Here is what Claude suggested:
My NFS server (Windows Server 2025) only accepts NFSv3, and the camera's built-in mount logic (both LCD and web interface) is hardcoded to attempt NFSv4, which fails for me.

This gets you:
  • A working NFSv3 mount, reachable from both the camera GUI's storage picker and SSH
  • The mount automatically re-established on every reboot, no manual SSH step required
  • No recompiling of chronos-cam-app required
Camera: Chronos 1.4, firmware 0.7.2
NFS Server: Windows Server 2025

All commands below are run as root over SSH.

1. Patch the NFS mount command to force vers=3​

Why: mountNetDrive.sh (the script that actually performs the mount — used by both the web interface's "Network Storage" form and by any manual call to the netShare CGI endpoint) hardcodes mount -t "nfs4". That's the root cause of the mount failing outright against servers that don't support/allow NFSv4.
What it does: From now on, any mount triggered through this script (web UI or CGI) uses vers=3 instead of the broken default.
Code:
# locate the script (should be here on 0.7.x firmware)
find / -iname "mountNetDrive.sh" 2>/dev/null
# -> /var/camera/scripts/mountNetDrive.sh

# back it up first
cp /var/camera/scripts/mountNetDrive.sh /var/camera/scripts/mountNetDrive.sh.bak

# change the nfs4 mount to nfs vers=3
sed -i 's/mount -t "nfs4" \${params\[2\]}:\${params\[3\]} \/media\/nfs/mount -t "nfs" -o vers=3 \${params[2]}:\${params[3]} \/media\/nfs/' /var/camera/scripts/mountNetDrive.sh

# verify only that one line changed
diff /var/camera/scripts/mountNetDrive.sh.bak /var/camera/scripts/mountNetDrive.sh

2. Restart the service so the patched script is actually used​

Why: mountNetDrive.sh doesn't run standalone — it's the long-running process behind the netDriveHelper.service systemd unit (ExecStart=/var/camera/scripts/mountNetDrive.sh). It watches /tmp/mountRequest.nf via inotifywait for the rest of its life; editing the file on disk doesn't affect the already-running instance.
Code:
systemctl restart netDriveHelper
systemctl status netDriveHelper   # should show active (running), new PID, inotifywait child process

3. Trigger the mount (this is what the web UI does internally)​

Why: The netShare CGI script (called by the web interface's storage form) just writes the mount request into /tmp/mountRequest.nf; mountNetDrive.sh picks it up via its file watch and performs the actual mount. You can call it directly to mount without using the web UI at all — and it's what our boot automation (step 4) uses too.
Note: curl is not installed on the camera; use wget instead.
Code:
wget -qO- "http://127.0.0.1/cgi-bin/netShare?nfs=<your-server-ip>&mount=/<your-share-name>"
Expected response: {"Status": "succeeded"}. Confirm:
Code:
mount | grep nfs
# should show vers=3 in the options
At this point the share should also show up as a storage target in the camera's GUI under Util -> Storage.
It can be used by REST API with the tag nfs from now on.

4. Make it survive a reboot​


Why: The mount itself is, of course, not persistent — nothing remounts it automatically after a reboot unless you set that up. There's also a timing dependency: the mount can only succeed once the network interface actually has an IP and once netDriveHelper.service (and thus mountNetDrive.sh's file watch) is up and running.

Rather than editing any vendor-owned files for this part, create a separate systemd unit (this survives future chronos-http package updates, since those only touch /lib/systemd/system/, not /etc/systemd/system/):
Notes on the specific settings:
  • After=NetworkManager-wait-online.service ensures we don't even try before the network is actually up (on this camera, eth0 is managed by NetworkManager, and this wait-online unit exists and works for that purpose).
  • ExecStartPre=/bin/sleep 30 and the retry loop (10 tries, 2s apart) exist because of the issue in step 5 below — without this margin, the mount attempt can race against (and get undone by) the camera's own LCD-interface logic
Code:
cat > /etc/systemd/system/chronos-nfs-automount.service << 'EOF'
[Unit]
Description=Auto-mount NFS share for Chronos camera after boot
After=netDriveHelper.service NetworkManager-wait-online.service
Wants=NetworkManager-wait-online.service
Requires=netDriveHelper.service

[Service]
Type=oneshot
ExecStartPre=/bin/sleep 30
ExecStart=/bin/bash -c 'for i in $(seq 1 10); do result=$(/usr/bin/wget -qO- "http://127.0.0.1/cgi-bin/netShare?nfs=<your-server-ip>&mount=/<your-share-name>"); echo "Attempt $i: $result"; if [[ "$result" == *succeeded* ]]; then exit 0; fi; sleep 2; done; echo "All attempts failed"; exit 1'
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable chronos-nfs-automount.service

5. Disabeling nfs v4 automount triggered by chronos-cam-app​

Why this step exists: Even with steps 1–4 in place, the mount would disappear again a few seconds after boot. The chronos-cam-app has its own, separate, hardcoded NFS mount attempt that runs once, ~15 seconds after camera the UI starts (checkForNfsStorage() in cammainwindow.cpp, wired up via QTimer::singleShot(15000, ...)). If it finds a stored NFS address/mount point in its settings, it force-unmounts /media/nfs and tries to mount it itself — with no version flag at all, defaulting to whatever the system negotiates (which fails against a server that requires v3), and it pops up a blocking "Mount failed" / "not reachable" dialog on the physical touchscreen.

It gets triggered because mountNetDrive.sh writes the mount details to /var/camera/webNfsMount.txt after every successful mount, and a separate 5-second timer in the chronos-cam-app (checkForWebMount()) reads that file and stores the values permanently in the app's settings (/var/camera/Settings/KronTech/camApp.conf) — which is exactly the trigger condition for the problematic 15-second boot check.

Two-part fix:
a) Stop it from happening again — prevent mountNetDrive.sh from writing that file (we don't need it; the LCD app doesn't need to know about a web-triggered mount for it to keep working):
Code:
grep -n "webNfsMount" /var/camera/scripts/mountNetDrive.sh
# note the line number of: echo "${params[2]} ${params[3]}" > /var/camera/webNfsMount.txt
# (line 114 on my 0.7.2 firmware — check yours before running this!)

sed -i '114s/^/#/' /var/camera/scripts/mountNetDrive.sh
sed -n '110,118p' /var/camera/scripts/mountNetDrive.sh   # confirm only that one line got commented out

systemctl restart netDriveHelper
b) Clean up the setting that's already stored from previous mount attempts (otherwise the 15-second check still fires once more on the next boot using stale data):
Code:
cat /var/camera/Settings/KronTech/camApp.conf | grep -i nfs
# shows e.g. nfsAddress=192.168.100.6 / nfsMount=/CAMshare

echo "" > /var/camera/webNfsMount.txt
sleep 6   # give the LCD app's 5s poll timer a chance to pick up the empty file and clear its settings

cat /var/camera/Settings/KronTech/camApp.conf | grep -i nfs
# should now show empty values

5. Verify​

Code:
reboot
After reboot:
Code:
mount | grep nfs
# should show vers=3

cat /var/camera/webNfsMount.txt
# should be empty

cat /var/camera/Settings/KronTech/camApp.conf | grep -i nfs
# should be empty

journalctl -b -u chronos-nfs-automount.service --no-pager
Also check the physical screen — no "Mount failed"/"not reachable" popup should appear anymore.

  • A future chronos-http package update will likely overwrite /var/camera/scripts/mountNetDrive.sh with the original (unpatched) version, since it's owned by that Debian package. The chronos-nfs-automount.service unit itself (under /etc/systemd/system/) won't be touched, but the NFSv3 fix and the webNfsMount.txt suppression would need to be reapplied. A backup of the patched script is at /var/camera/scripts/mountNetDrive.sh.bak in case you want to diff against a future update.
  • This only addresses the web/CGI mount path. The LCD interface's own "Utils → Network → NFS Network Storage" screen still can't mount NFSv3 on its own (that would require patching/recompiling chronos-cam-app itself, which is a much bigger undertaking per the earlier discussion in this thread).

Thanks for all the help so far. resolving the write protection on the files will enable me to get rid of the old unsecure smb1 storage solution.
 
Excellent work! My guess is Windows Server is responsible for the permission issues you're encountering. Do you see -readonly in the output of showmount? That command may be executed from your Chronos, or from the Windows Server command prompt (however you may need to enable the "Client for NFS" option within the "Turn Windows features on or off" settings in order to use it).

Be very careful which directory you grant NFS client write access to. You may want to configure a list of allowed client addresses, and only enable the NFS server when needed, as some minimal security precautions.

Here's an example of NFS export configured to be writable by only the IP address of my Chronos:

Bash:
showmount -e 192.168.1.20

Export list for 192.168.1.20:
/chronos  192.168.1.101,192.168.1.101,-maproot:0,-alldirs,-range

I don't have a Windows Server to test with, but from what I've read, Windows NFS Server "squashes" root access (maps UID 0 to Anonymous/nobody) for security by default.
 
Excellent work! My guess is Windows Server is responsible for the permission issues you're encountering. Do you see -readonly in the output of showmount? That command may be executed from your Chronos, or from the Windows Server command prompt (however you may need to enable the "Client for NFS" option within the "Turn Windows features on or off" settings in order to use it).

Be very careful which directory you grant NFS client write access to. You may want to configure a list of allowed client addresses, and only enable the NFS server when needed, as some minimal security precautions.

Here's an example of NFS export configured to be writable by only the IP address of my Chronos:

Bash:
showmount -e 192.168.1.20

Export list for 192.168.1.20:
/chronos  192.168.1.101,192.168.1.101,-maproot:0,-alldirs,-range

I don't have a Windows Server to test with, but from what I've read, Windows NFS Server "squashes" root access (maps UID 0 to Anonymous/nobody) for security by default.
I solved it yesterday, but didn't have time to set up a post. It was the user access rights (as you have now also suggested in your post) that do not get transferred correctly from a UNIX to a Windows system. A systemd-Override did not work, but a Watcher-Service now writes 666 (rw-rw-rw) over all videos.
Code:
cat > /etc/systemd/system/chronos-nfs-permfix.service << 'EOF'
[Unit]
Description=Auto-chmod new files on NFS share to 666 (Windows read-only workaround)
After=chronos-nfs-automount.service
Requires=chronos-nfs-automount.service

[Service]
Type=simple
ExecStart=/bin/bash -c 'inotifywait -m -e close_write --format "%%f" /media/nfs | while read file; do chmod 666 "/media/nfs/$file" 2>/dev/null; done'
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable chronos-nfs-permfix.service
systemctl start chronos-nfs-permfix.service
 
Just as a side note.
I tried to get better write times out of the camera, but found that 18,7 MB/s was my maximum with a gigabit ethernet connection. It seems the camera CPU is already at its limit. smb is even slower (14,1 MB/s). This is probably quite unfair, since the smb share is on another server, but there does not seem to be a huge optimization potential.
 
Back
Top