As some of you already know, I do have an old MacBook Air which I use as my main (as in the computer I sit in front of, not the computer I store data on. Laptops can be stolen, you know) machine until I find a new Linux laptop replacement. For this reason I need it to play nice with other machines, and that requires sometimes to mount a fileshare. If the other host is in the same VLAN, that is rather easy because there are ways to mount a Windows (SMB/CIFS) and even a Linux/UNIX (nfs) fileshare without breaking a sweat. But what if the machine is remote? If we can ssh into it, why not then use sshfs?
As we are aware of (since we read the link. There are a few more sshfs examples here), sshfs requires fuse. Since I am using OSX, which at the present time does not have it, I need to install. If you are curious, the one I use is FUSE for MacOS.
Mounting: business as usual
Let's say we are in the machine boris as user pickles trying to mount my home directory off desktop. We create the mountpoint (Let's use /tmp/D or ~/D so it looks more like what we would do in Linux:
boris:Documents pickles$ mkdir /tmp/D; sshfs raub@desktop.in.example.com:. /tmp/D boris:Documents pickles$ df -h Filesystem Size Used Avail Capacity iused ifree %iused Mounted on /dev/disk1 112Gi 79Gi 33Gi 71% 20783599 8546848 71% / devfs 364Ki 364Ki 0Bi 100% 1259 0 100% /dev map -hosts 0Bi 0Bi 0Bi 100% 0 0 100% /net map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% /home raub@desktop.in.example.com:. 492Gi 389Gi 102Gi 80% 408428 32359572 1% /private/tmp/D boris:Documents pickles$
So far so good. To unmount it we can use diskutil, as in (Mac)
boris:Documents pickles$ diskutil umount /tmp/D Unmount successful for /tmp/D boris:Documents pickles$
or (Linux)
fusermount -u /tmp/D
Or go old school (both):
sudo mount /tmp/D
Since boris is a laptop, sometimes if we just let it go to sleep it will unmount it. Then, all we have to do is mount it again.
Mounting again: not so fast
Thing is, sometimes it does not work.
boris:Documents pickles$ mkdir /tmp/D; sshfs raub@desktop.in.example.com:. /tmp/D mkdir: /tmp/D: File exists fuse: bad mount point `/tmp/D': Input/output error boris:Documents pickles$
Ok, maybe it did not automagically unmounted while laptop was off. So, let's tell it to do so:
boris:Documents pickles$ diskutil umount /tmp/D Unmount failed for /tmp/D boris:Documents pickles$
Just before you ask, sudo mount /tmp/D did not work either. What if the old sshfs processes did not cleanly closed and as a result are still lingering? To answer that we must elicit some help from one of grep's cousins, pgrep:
boris:Documents pickles$ pgrep -lf sshfs 384 sshfs raub@desktop.in.example.com:. /tmp/D 1776 sshfs raub@desktop.in.example.com:. /tmp/D 7356 sshfs user@other.in.example.com:. /tmp/D boris:Documents pickles$
Just as we guessed, there are not only but quite a few unhappy sshfs instances. Let's see if we can kill them:
boris:Documents pickles$ kill 384 1776 7356 boris:Documents pickles$ pgrep -lf sshfs 384 sshfs raub@desktop.in.example.com:. /tmp/D 1776 sshfs raub@desktop.in.example.com:. /tmp/D boris:Documents pickles$ kill 384 boris:Documents pickles$ pgrep -lf sshfs 384 sshfs raub@desktop.in.example.com:. /tmp/D 1776 sshfs raub@desktop.in.example.com:. /tmp/D boris:Documents pickles$ kill 1776 boris:Documents pickles$ pgrep -lf sshfs 384 sshfs raub@desktop.in.example.com:. /tmp/D 1776 sshfs raub@desktop.in.example.com:. /tmp/D boris:Documents pickles$Hmmm, this is going nowhere slowly. Let's crank up a notch and force it to kill the mount.
boris:Documents pickles$ kill -9 1776 boris:Documents pickles$ pgrep -lf sshfs 384 sshfs raub@desktop.in.example.com:. /tmp/D boris:Documents pickles$ kill -9 384 boris:Documents pickles$ pgrep -lf sshfs \boris:Documents pickles$
Sounds like we got them all. Now, let's try and mount once more:
boris:Documents pickles$ mkdir /tmp/D; sshfs raub@desktop.in.example.com:. /tmp/D mkdir: /tmp/D: File exists raub@desktop.in.example.com's password: boris:Documents pickles$
I think we have a winner!