<commit_before>---
layout: post
title: "sshfs"
date: 2020-05-21
excerpt: "sshfs"
tags: ["sshfs", "ssh"]
config: true
sort_key: "2021-12-22"
update_dates: ["2022-06-06","2021-12-22","2020-10-24","2020-05-21"]
comments: false
---

# sshfs

## 概要
 - sshのプロトコルを用いた簡易的な`nfs`のように使えるファイルシステム
 - fuseを利用する

## パフォーマンス
 - デフォルトでは `nfs` より遅い  
 - [パフォーマンスチューニング](https://www.admin-magazine.com/HPC/Articles/Sharing-Data-with-SSHFS)すると、nfsと同じか一部早くなるなど、実用性が高い

## コマンドによるマウント

### 一般的なマウント
```console
$ sshfs -o <option-args> <source> <target>
```
 - オプション凡例
   - `compression=<yes|no>`
	 - データの圧縮の有無
   - `Ciphers=...`
	 - 暗号化方式
   - `cache=<yes|no>`
	 - cacheを使用するかどうか
   - `reconnect`
     - 接続が切断された際に再接続するかどうか

### パフォーマンスを考慮したマウントオプション

```console
$ sshfs -o compression=no,Ciphers=arcfour,large_read,cache=yes,kernel_cache,reconnect <source> <target>
```

---

## fstabを用いた接続
 - [/fstab/](/fstab/)を用いてマウントを自動化できる
 
### 具体例
```config
<username>@<remote>:/home/<username> /home/<username>/.mnt/<remote> fuse.sshfs StrictHostKeyChecking=no,reconnect,identityfile=/home/<username>/.ssh/privatekey 0 0
```

---

## パフォーマンス
## カーネルパラメータを調整する

`/etc/sysctl.conf` に以下を追記する

```config
net.core.netdev_max_backlog = 3000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216<commit_msg>update "sshfs" doc<commit_after>---
layout: post
title: "sshfs"
date: 2020-05-21
excerpt: "sshfs"
tags: ["sshfs", "ssh"]
config: true
sort_key: "2021-12-22"
update_dates: ["2022-06-06","2021-12-22","2020-10-24","2020-05-21"]
comments: false
---

# sshfs

## 概要
 - sshのプロトコルを用いた簡易的な`nfs`のように使えるファイルシステム
 - fuseを利用する

## パフォーマンス
 - デフォルトでは `nfs` より遅い  
 - [パフォーマンスチューニング](https://www.admin-magazine.com/HPC/Articles/Sharing-Data-with-SSHFS)すると、nfsと同じか一部早くなるなど、実用性が高い

## コマンドによるマウント

### 一般的なマウント

```console
$ sshfs -o <option-args> <source> <target>
```
 - オプション凡例
   - `compression=<yes|no>`
     - データの圧縮の有無
     - 圧縮しないほうが早い
   - `Ciphers=<method>`
     - 暗号化方式
     - 暗号化がロバストなほど通信が遅くなる
   - `cache=<yes|no>`
     - cacheを使用するかどうか
   - `dir_cache=<yes|no>`
     - ディレクトリの情報をキャッシュするか
   - `max_conns=<num>`
     - 同時に接続するsshの数
     - プロセスもその分必要となる
   - `reconnect`
     - 接続が切断された際に再接続するかどうか
   - `StrictHostKeyChecking=<yes|no>`
     - 接続先のフィンガープリントの検証を行うかどうか

### パフォーマンスを考慮したマウントオプションスニペット

```console
$ sshfs -o StrictHostKeyChecking=no,reconnect,identityfile=$HOME/.ssh/id_rsa,cache=yes,max_conns=64,dir_cache=yes <source> <target>
```

---

## fstabを用いた接続
 - [/fstab/](/fstab/)を用いてマウントを自動化できる
 
### 具体例
```config
<username>@<remote>:/home/<username> /home/<username>/.mnt/<remote> fuse.sshfs StrictHostKeyChecking=no,reconnect,identityfile=/home/<username>/.ssh/privatekey 0 0
```

---

## パフォーマンス
## カーネルパラメータを調整する

`/etc/sysctl.conf` に以下を追記する

```config
net.core.netdev_max_backlog = 3000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
{'fraction_non_alphanumeric': 0.17902542372881355, 'fraction_numerical': 0.05014124293785311, 'mean_word_length': 4.1602914389799635, 'pattern_counts': {'":': 0, '<': 33, '<?xml version=': 0, '>': 33, 'https://': 2, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6324832', 'n_tokens_mistral': 1741, 'n_tokens_neox': 1576, 'n_words': 158}