Image for post
Image for post
OpenZFS Logo

The Zettabyte File System (ZFS) is a file system and volume manager in one tool. I’ll be using ZFS to create a NAS from:


In the previous articles, we’ve built the ZFS kernel module to access the new dRAID vdev, setup and mounted our ZFS storage pool, then shared it with the network through NFS. Now, we will optimize and maintain our ZFS storage pool, to both increase performance and to create safety from data loss.

Distributed RAID Theory

Image for post
Image for post
dRAID is the new hotness.

Declustered RAID (dRAID) allows us to distribute parity throughout all disks, but to be effective at doing this, disks are ideally the same size. dRAID has fixed stripe width and pads missing data as zeros. Therefore, it’s best and most efficient to use drives of the same capacity.

Also, dRAID excels more at large file storage rather than small file storage. …


Image for post
Image for post
Git SCM Logo

Github unfortunately does not offer private repositories without a paid account. But you can still set one up on your home server. My Jetson TX2 makes for a great low power server, hosting my home NAS. In this article, we’ll set up our own secure, private Git server to host various code, scripts, and configuration files.

Setting up Git Server

$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys

Create git repository as the root user.

# mkdir /srv/git
# chown -R root:git /srv/git
# chmod -R 0774 /srv/git

Create project repository as the git


Image for post
Image for post
OpenCV Logo

Introduction to OpenCV

OpenCV is for computer vision. There are a number of programming language interfaces: C++, Python, Java and Matlab. OpenCV also runs on various operating systems, such as Windows, Linux, Android and Mac OS, as well as a number of different architectures. The library has a long history of industry adoption and help from Google, Yahoo, Microsoft, Intel, IBM, Sony, Honda, and Toyota, as well as algorithms being implemented from CVPR papers and other academic publications. …


1. Setup Passwordless SSH Access

Try to minimizing your typing and save your fingers some pain. You’ll be connecting a lot to SSH, so setup passwordless access from your client. If you haven’t already, generate your public/private key:

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): (empty)
Enter same passphrase again: (empty)
Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:+GadNpFhcnbE1k2/eNQRBBfeRY1SnyvIjfrcmIVME0k simeon@burmese
The key's randomart image is:
+---[RSA 2048]----+
| E.++@B|
| ..= =.X|
| . =+.. +=|
| . =.+= o o|
| . S o* + + |
| . .+oo o |
| +.=o . |
| o .o.= |
| = . …

Introduction

In this article, we’ll be setting up a VNC server and client on a Jetson Xavier NX that will allow us to connect to an XFCE4 desktop environment. While the tutorial is specific to the aforementioned platform, the instructions should also work for other Jetson products running Ubuntu 18.04.

For most of my development work, SSH terminals are enough to accomplish what I need. But when visualizations are required, or the data output is graphical in nature, then it’s extremely helpful to have a GUI.

TigerVNC

Image for post
Image for post
TigerVNC Logo

Developing on a headless server means that we need to be able to create a desktop environment instance and somehow pipe that monitor over a secure tunnel to the client computer. This is exactly what TigerVNC does, and we’ll be using it to create a remote desktop environment on a Jetson Xavier NX. TigerVNC is also still being actively developed, and so I can expect improvements and security patches as time goes on. …


If you haven’t yet setup a basic ZFS storage pool yet, please do so first by following the article, A Gentle Introduction to ZFS, Part 2: Storage Pools and Hard Disk Drives on the Jetson TX2.

In this article, we’ll be sharing our ZFS storage pool with our home network and also measuring the performance of the network channel. We’ll be developing this solution on Jetpack R32.4.4 (Ubuntu 18.04, aarch64).

What are Network File Systems?

Image for post
Image for post
IETF Logo

The Network File System (NFS) is a standard for accessing server network storage as a local file system on a client. The first version was developed within Sun Microsystems (Oracle), but later released as version 2 in RFC 1094 on March 1989 (if you’ve never read a Request For Comment (RFC) before, think of it as a white paper for the internet). Version 3 added 64-bit addressing and asynchronous writes in RFC 1813 on June 1995. Finally, NFSv4, over time, added in numerous performance improvements, security, and an improved stateful protocol in RFC 7530 by March 2015. The takeaway from this is that NFS represents a well-polished network file system built on over 30 years of research (there are a lot of ITs still rocking NFSv3). We’ll also be using NFSv3 to share our ZFS file system with the rest of our home network, both for compatibility with Windows (only supports NFSv3) and also because only the NFSv3 (arm64) appears to advertise on RPC. …


Image for post
Image for post
ZFS Storage Pool Configurations (Source: Louwrentius)

If you haven’t yet read about ZFS and compiled the source, please do so by following the previous article, A Gentle Introduction to ZFS, Part 1: Compiling ZFS on Ubuntu 18.04 (aarch64), before continuing.

Introduction

ZFS storage pools are very powerful. What used to require proprietary OS support or hardware RAID cards is now freely available as open source software. Democratized RAID for the masses. Let’s set up a storage pool to demostrate the decisions that go into the configuration, both software and hardware.

ZFS Storage Pools

About

Simeon Trieu

Imaging Systems Ninjaneer, Computer Vision, Photographer and Videographer, VR Athlete, Pianist

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store