rcloneでLinode Object StorageをLinuxサーバにマウントする


# Linodeとは

Linode (https://www.linode.com/) は Akamaiが提供するIaaS (Infrastructure as a Service) プラットフォームプロバイダーのサービスです。リノードと発音します。
Akamaiは2022年2月にLinode社の買収を発表しました。
https://www.akamai.com/ja/newsroom/press-release/akamai-to-acquire-linode
クラウドコンピューティングをよりシンプルに、手頃な価格で、誰もが利用できるようにすることで、イノベーションを加速することができます。
https://www.linode.com/ja/alternative-cloud-provider/


# Linode Object Storageとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/cd7e77ba-cc88-036a-0a94-96f5cc55dff2.png)

Linode Object Storageは様々なリージョンで利用可能なS3互換の低価格なAkamai Cloud Computing Serviceのストレージソリューションです。
ストレージはNVMe SSDにて動作しており、HDDに比べて高いパフォーマンスと低レイテンシーなアクセスを実現することができます。
データ量は250GBから100TB(※1)まで拡張することができ、オブジェクトはリージョン内でレプリケートされており冗長性が担保されています。
インバウンド転送無料、アウトバウンド1TBまでの転送が標準の価格に含まれており、追加の転送料金は1GBあたり0.005ドルとかなり低コストなのが特徴です(※1)。
今後のアップデートではデータ量が最大1PB、オブジェクト数は最大10億に対応する予定があります。

- [Linode Object Storage](https://www.linode.com/ja/products/object-storage/)
- [Enhancing Object Storage Performance](https://www.linode.com/blog/cloud-storage/nvme-object-storage-enhanced-performance/)
- [Akamai Cloud Computing Services(Linode)とは何かをわかりやすく解説](https://qiita.com/isss802/items/5313c7a6da1d9ed50a38)

※1 リージョンによって制限や価格が異なります、詳しくは[こちら](https://www.linode.com/docs/products/storage/object-storage/#specifications)を参照ください。



# rcloneとは
数十種類のクラウドストレージサービスとの間でファイルとディレクトリを同期するためのオープンソースのコマンドラインツールです。

https://github.com/rclone/rclone


# rcloneでLinode Object StorageをLinuxサーバーにマウントする

Linode Object StorageはS3互換のAPIを備えているため、s3がマウントできるrcloneを利用することができます。
今回は、rcloneを利用してサーバーにObject Storageをマウントする手順となります。
サーバーOSに関してはUbuntuを利用します。

## インストール

サーバーにrcloneのインストールを行います。
コマンドが動作することをVersionの表示で確認をします。

```
curl https://rclone.org/install.sh | sudo bash
rclone version
```

## rclone 接続設定

Linode Object Storageに接続するための設定を記載します。
今回はシンガポールリージョンに接続するための設定となります。

```
root@localhost:~# vim /root/.config/rclone/rclone.conf

[linode]
type = s3
provider = Linode
access_key_id = <Access_Key_ID>
secret_access_key = <Secret_Access_key>
endpoint = <Cluster ID>.linodeobjects.com
acl = private
```

各リージョンのCluster IDは[**こちら**](https://www.linode.com/docs/products/storage/object-storage/#availability)から確認できます。

Object StorageのメニューからAPI Keyを発行できます。
このAPI KeyはS3互換のものとなり、アクセスキーの設定方法はS3同様に行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/895ff741-b83e-55bd-be8f-b85d25ee0b1f.png)

## 接続確認

rcloneはファイルの同期だけに利用するのではなく、ファイル操作も行えます。
いくつかのコマンドを利用して接続を確認します。
その他のコマンドも用意されております。

https://rclone.org/commands/

```
# ディレクトリ一覧
rclone lsd linode:<bucket_name>
# ファイル一覧
rclone ls linode:<bucket_name>
# ディレクトリ削除
rclone delete linode:<bucket_name>/test
# ファイル削除
rclone deletefile linode:<bucket_name>/test/test.file
# ディレクトリ/ファイルのコピー
rclone copy <file_path> linode:<bucket_name>/
# ディレクトリの同期
rclone sync <directory_path> linode:<bucket_name>/<directory_path>
```

Bucket Nameはコンソールから確認が可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/4dfe4ce9-a8c2-9edb-e190-945c7027caa5.png)

## rcloneでLinode Object Storageをマウントする

mount コマンドにて利用できるようにsymlinkを作成します。

```
ln -s /usr/bin/rclone /sbin/mount.rclone
```

マウントするディレクトリを作成します。

```
mkdir -p /mnt/data
```

Systemdにマウントする設定を作成します。

```
vim /etc/systemd/system/mnt-data.mount

[Unit]
After=network-online.target
[Mount]
Type=rclone
What=linode:<bucket_name>
Where=/mnt/data
Options=rw,allow_other,args2env,vfs-cache-mode=writes,config=/root/.config/rclone/rclone.conf,cache-dir=/var/rclone
```

自動的にマウントするための設定を作成します。

```
vim /etc/systemd/system/mnt-data.automount

[Unit]
After=network-online.target
Before=remote-fs.target
[Automount]
Where=/mnt/data
TimeoutIdleSec=600
[Install]
WantedBy=multi-user.target
```

サービスを起動、有効化します。

```
systemctl start mnt-data.mount
systemctl enable mnt-data.automount
```

ディスクがマウントされていることを確認します。

```
# df -h
Filesystem                  Size  Used Avail Use% Mounted on
linode:<bucket_name>  1.0P     0  1.0P   0% /mnt/data
```

以上で設定は完了です。

### 動作検証

参考までに、Linode Object Storageをマウントした際のファイル作成、閲覧の時間を確認します。

今回の検証では、シンガポールリージョンにサーバーを立て、同じリージョンにObject Storageを作成し、s3fsでマウントを行っています。

#### 500個のファイルを作成した際の時間

0.1秒ほどで完了しましたが、バックエンド側で作成処理が動いておりました。
表面上の処理は高速のようです。

```
root@localhost:/mnt/data# i=1; time while [ $i -le 500 ]
> do
> touch test_$i > /dev/null 2>&1
> i=$((i+1))
> done

real	0m0.980s
user	0m0.404s
sys	0m0.252s
```

#### 500個のファイルを一覧化する時間

38秒かかりました。

```
root@localhost:/mnt/data# time ls -laR ./ > /dev/null

real	0m38.497s
user	0m0.015s
sys	0m0.020s
```

## まとめ

Linode Object Storageをサーバーにマウントすることで、共有ディスクのような利用方法も検討することができます。
通常のディスクと比べて速度が格段に遅いため、利用用途が適しているか慎重に確認する必要があります。
尚、Linodeがrcloneのツールに関してサポートしているわけではありませんのでご注意ください。


## 関連記事

アカマイ・テクノロジーズ合同会社のQiitaではLinode関連など開発者向けの記事を記載しております。

https://qiita.com/organizations/Akamai