OCI Object StorageのバケットをLinux/Windowsのローカルにマウントする

このシリーズの他の記事は、[オラクル・クラウドの個人ブログ一覧 ](https://qiita.com/letian/items/10152a4fec813c1b7d98)からご覧いただけます。

__初めに__
OCI Object Storageのバケットをローカルのファイル・システムにマウントするのは可能です。マウント後、ローカルのフォルダとファイルのように、バケットとオブジェクトを使用できます。今回は、LinuxとWindows両方にマウントする方法を紹介したいと思います。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/49445e29-0bc3-07b1-a140-67f5e3fb0730.png", width="500">

__検証環境__
- OS: Oracle Linux 8, Windows Server 2019 Standard

__各種方法の対比__
|ツール|対応OS|対応リージョン|ライセンス|製品ページ|
|:--|:--|:--|:--|:--|
|s3fs-fuse|Linux, macOS, FreeBSD|全てのリージョン|オープンソース|[リンク](https://github.com/s3fs-fuse/s3fs-fuse)|
|CloudBerry Drive|Windows|<font color=blue>ホームリージョン</font>のみ|15日間トライアル|[リンク](https://www.msp360.com/drive.aspx)|
|Rclone mount|Linux, FreeBSD, macOS, Windows|全てのリージョン|オープンソース|[リンク](https://rclone.org/commands/rclone_mount/)|

__STEP__
- [1. 事前準備](#1-事前準備)
  - [1-1. クレデンシャルの生成](#1-1-クレデンシャルの生成)
  - [1-2 ネームスペースの確認](#1-2-ネームスペースの確認)
- [2. s3fsの利用 (Oracle Linuxの場合)](#2-s3fsの利用-oracle-linuxの場合)
  - [2-1. s3fs-fuseのインストール](#2-1-s3fs-fuseのインストール)
  - [2-2. クレデンシャルの設定](#2-2-クレデンシャルの設定)
  - [2-3. バケットをマウント](#2-3-バケットをマウント)
- [3. CloudBerry Driveの利用 (Windowsの場合)](#3-cloudberry-driveの利用-windowsの場合)
  - [3-1. Cloudberry Driveのインストール](#3-1-cloudberry-driveのインストール)
  - [3-2. ストレージ・アカウントを追加](#3-2-ストレージアカウントを追加)
  - [3-3. ドライブを追加](#3-3-ドライブを追加)
- [4. Rclone mountの利用](#4-rclone-mountの利用)
  - [4-1. Rcloneのインストール](#4-1-rcloneのインストール)
  - [4-2. WinFspのインストール (Windowsの場合)](#4-2-winfspのインストール-windowsの場合))
  - [4-3. バケットをマウント](#4-3-バケットをマウント)
- [追記 - オブジェクトストレージの専用エンドポイント](#追記---オブジェクトストレージの専用エンドポイント)

# 1. 事前準備
### 1-1. クレデンシャルの生成
プロファイル・アイコン(右上) → 自分のプロファイル → 顧客秘密キー → 秘密キーの生成
二度と表示しないので、生成された秘密キー(Secret key)をメモしておいてください。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/b7b0fc0e-4460-359e-38e7-4c2e4f8cd595.png", width="450">

マウスを「アクセス・キー」(Access Key)に移動し、キーをコピーします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/7df44dbb-20ee-5c86-d371-912830340b82.png", width="500">

### 1-2 ネームスペースの確認
プロファイル・アイコン(右上) → テナンシ
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/93885ae5-9758-1351-3a66-498b3955983c.png", width="500">

:::note
- 一部の古いテナンシでは、ネームスペースとテナンシ名は同じですけど、そもそも別物なので、間違いようにご注意ください。
- OCI-CLIを利用する場合、`oci os ns get`で簡単に取得できます。
:::

# 2. s3fsの利用 (Oracle Linuxの場合)
### 2-1. s3fs-fuseのインストール
コマンド：`sudo yum install s3fs-fuse --enablerepo ol8_developer_EPEL`

```bash
[opc@linux8 ~]$ sudo yum install s3fs-fuse --enablerepo ol8_developer_EPEL
Last metadata expiration check: 0:00:41 ago on Sun 15 May 2022 05:40:13 PM CST.
Dependencies resolved.
=================================================================================================================================
 Package                     Architecture           Version                             Repository                          Size
=================================================================================================================================
Installing:
 s3fs-fuse                   x86_64                 1.91-1.el8                          ol8_developer_EPEL                 273 k
Installing dependencies:
 fuse                        x86_64                 2.9.7-12.0.4.el8                    ol8_baseos_latest                   84 k
 fuse-common                 x86_64                 3.2.1-12.0.4.el8                    ol8_baseos_latest                   22 k

Transaction Summary
=================================================================================================================================
Install  3 Packages

Total download size: 379 k
Installed size: 856 k
Is this ok [y/N]: y
......
Installed:
  fuse-2.9.7-12.0.4.el8.x86_64            fuse-common-3.2.1-12.0.4.el8.x86_64            s3fs-fuse-1.91-1.el8.x86_64

Complete!
[opc@linux8 ~]$
```

:::note
s3fs-fuseをインストールするために、Oracle EPEL レポジトリを有効する必要があります。そうしないと、次のようなエラーが発生します。
:::

```bash
[opc@linux8 ~]$ sudo yum install s3fs-fuse
Last metadata expiration check: 3:10:03 ago on Sun 15 May 2022 02:11:38 PM CST.
No match for argument: s3fs-fuse
Error: Unable to find a match: s3fs-fuse
[opc@linux8 ~]$
```

### 2-2. クレデンシャルの設定
__パスワード・ファイルを作成__
パスとファイル名： `${HOME}/.passwd-s3fs`
コマンド：
`echo ACCESS_KEY:SECRET_KEY > ${HOME}/.passwd-s3fs`
`chmod 600 ${HOME}/.passwd-s3fs`

アクセス・キー(ACCESS_KEY)と秘密キー(SECRET_KEY)の真ん中に、<font color=blue>半角のコロン</font>で結合されます。

### 2-3. バケットをマウント
__マウント・ポイントを作成__:
```bash
[opc@linux8 ~]$ mkdir $HOME/mntmybucket
[opc@linux8 ~]$
```

__バケットをマウント__:
`s3fs <bucket_Name> <mount_point> -o url=https://<namespace_name>.compat.objectstorage.<region>.oraclecloud.com -o nomultipart -o use_path_request_style -o endpoint=<region>`

<font color=blue>\<namespace_name></font>をネームスペースに置き換えてください （[STEP 1-2](#1-2-ネームスペースの確認)で確認）。
<font color=blue>\<region></font>をリージョン識別子に置き換えてください。分からない場合は[こちら](https://docs.oracle.com/ja-jp/iaas/Content/General/Concepts/regions.htm)をご確認ください。

```bash
[opc@linux8 ~]$ s3fs MyBucket $HOME/mntmybucket -o url=https://<namespace_name>.compat.objectstorage.ap-tokyo-1.oraclecloud.com -o nomultipart -o use_path_request_style -o endpoint=ap-tokyo-1
[opc@linux8 ~]$ 
```

__検証__:
コマンド： `df -h <mount_point>` or `df -h <mount_dir>`
```bash
[opc@linux8 ~]$ df -h mntmybucket
Filesystem      Size  Used Avail Use% Mounted on
s3fs             16E     0   16E   0% /home/opc/mntmybucket
[opc@linux8 ~]$
```

__バケットをアンマウント__:
コマンド： `fusermount -u <mount_point>`
```bash
[opc@linux8 ~]$ fusermount -u mntmybucket
[opc@linux8 ~]$
```

:::note
__Tips__
- s3fsのコマンドに、`-o allow_other -o umask=000`を付けると、他ユーザーでも使えるようになる。読込と書込権限の設定は、umaskで制御できる。
- /etc/fstabを編集すれば、サーバが再起動されても自動にマウントできる。
:::

# 3. CloudBerry Driveの利用 (Windowsの場合)
### 3-1. CloudBerry Driveのインストール
ダウンロードURL: https://www.msp360.com/drive.aspx
インストール・ファイルを実行して開始します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/98081b76-edb6-aa5a-2c69-b0bf71c270bf.png", width="400">
「インストール」ボタンをクリックして続行します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/0f737232-e30c-25c3-8aeb-d2f999f0e085.png", width="400">
インストール後に再起動する必要があります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/d9f0a48e-142e-5472-d597-67e2152662a7.png", width="400">
「完了」をクリックして、「Cloudberry Drive」を実行します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/2bbe383b-f0db-0159-9f8c-f51f2117c206.png", width="400">
メールアドレスを入力し、「試用開始」をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/fc01f34d-ac8b-4f49-7597-2137fe715ead.png", width="400">

インストール後にPCを再起動します。

### 3-2. ストレージ・アカウントを追加
Task Bar -> Cloudberry Drive Icon -> Options
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/0a19d17a-b22c-b91c-0b96-c3fef1300b54.png", width="300">

「追加」ボタンをクリックして、ストレージ・アカウントを追加します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/a96c12a9-2804-d1e7-3196-d92d8f56c6f8.png", width="400">

以下のように必要な情報を入力し、「Test Connection」をクリックします。
<strong>Storage Provider</strong>: <font color=blue>S3 Compatible</font>
<strong>Display Name</strong>: 好きな名前を付ける
<strong>Service Point</strong>: `<namespace_name>.compat.objectstorage.<region>.oraclecloud.com`
<strong>Access Key & Secret Key</strong>: [STEP 1-1](#1-1-generate-credentials)で生成されたもの
<strong>Signature version</strong>: <font color=blue>4</font>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/04bcec3a-746c-75f7-4973-d6a3d609ee4f.png", width="400">

### 3-3. ドライブを追加
「追加」ボタンをクリックして、ドライブを追加します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/a179aecb-ee61-f291-62fd-33097644e450.png", width="400">

3ドットのボタンをクリックしてパスを選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/59ef13d9-553a-5ee9-f8e0-70718c597646.png", width="400">

リストからバケットを選択し、OKをクリックして戻ります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/73ce2ff5-efec-dc38-943e-4924c77402ca.png", width="300">

「はい」をクリックして変更を保存します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/3cdba1f9-2be6-1ff9-bb2f-577fb02253f3.png", width="400">

OKをクリックして完了します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/c178fa09-0925-f207-7be1-250fba43bd94.png", width="400">

ファイル・エクスプローラーから新しいドライブを確認します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/e2db2ada-9b9e-b18b-41fd-1c1b026b0071.png", width="650">

__検証__
新しいドライブにフォルダとファイルを作成します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/3cb45b1c-b244-9491-c0ed-d48f51bf29e3.png", width="650">

上記のフォルダとファイルはすぐにバケットに同期されます。 OCIコンソールから結果を確認できます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/d5df0fa7-1ada-1e97-9384-ff11e4da5342.png", width="650">

# 4. Rclone mountの利用
追記日: 2023/05/05

[Rclone](https://rclone.org/) は、クラウド・ストレージ上のファイルを管理するコマンドライン・プログラムです。`rclone mount`を使用すると、Linux、FreeBSD、macOS、および Windows で、Rclone のクラウド・ストレージ・システムを FUSE を使用してファイル・システムとしてマウントできます。

これから、Windowsを例にして利用方法を紹介します。

## 4-1. Rcloneのインストール
__Rclone のダウンロード__
ダウンロードURL: https://rclone.org/downloads/
この例では、Windows版 (Intel/AMD - 64 Bit)を使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/19bb62eb-68cd-0242-c62a-46bbf2c4aa0b.png)

__Rclone のインストール__
Zipファイルを解凍した後、`rclone config`を実行し、OCIへの接続をセットアップします。
```batchfile
C:\rclone-v1.62.2-windows-amd64>dir
 Volume in drive C is Windows
 Volume Serial Number is 3271-DFFD

 Directory of C:\rclone-v1.62.2-windows-amd64

05/04/2023  08:55 AM    <DIR>          .
05/04/2023  08:55 AM    <DIR>          ..
05/04/2023  08:55 AM             1,456 git-log.txt
05/04/2023  08:55 AM         2,008,600 rclone.1
05/04/2023  08:55 AM        49,853,952 rclone.exe
05/04/2023  08:55 AM         2,158,094 README.html
05/04/2023  08:55 AM         1,777,393 README.txt
               5 File(s)     55,799,495 bytes
               2 Dir(s)  23,793,926,144 bytes free

C:\rclone-v1.62.2-windows-amd64>rclone config
2023/05/04 08:56:19 NOTICE: Config file "C:\\Users\\opc\\AppData\\Roaming\\rclone\\rclone.conf" not found - using defaults
No remotes found, make a new one?
n) New remote
s) Set configuration password
q) Quit config
n/s/q>
```
※、セットアップの詳細は、[こちら](https://qiita.com/liu-wei/items/937f8f6b69f7ee25d9c1#%E8%BF%BD%E8%A8%98oci%E3%81%B8%E3%81%AE%E6%8E%A5%E7%B6%9A%E6%96%B9%E6%B3%95%E3%81%AE%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88)をご参照ください。

セットアップ後、OCIへ接続を確認します（`Target_Bucket`は既存のバケット）。
```batchfile
C:\rclone-v1.62.2-windows-amd64>rclone lsd oci:
          -1 2023-05-05 09:12:12        -1 Target_Bucket

C:\rclone-v1.62.2-windows-amd64>
```

## 4-2. WinFspのインストール (Windowsの場合)
:::note
Windowsでrcloneを使用する場合は、WinFSP(サードパーティー・ツール)をインストールする必要があります。
:::
以下はrcloneのドキュメントからの抜粋です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/0ae98989-3c67-1438-af4e-fa136aafab81.png)

WinFspの製品ページ：http://www.secfs.net/winfsp/
ダウンロードURL: https://winfsp.dev/rel/
ライセンス：オーペンソース
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/6581b187-8aae-f95f-182f-533f7c1bd95e.png)

ダウンロードしたMSIファイルをダブルクリックして、ウィザードに従ってインストールしてください。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/9b6d6b0b-3eee-e0b3-6d44-35f18d3863f7.png", width="450">

## 4-3. バケットをマウント
コマンド例：`rclone mount oci:/Target_Bucket C:\OCI_Object_Storage\Target_Bucket --vfs-cache-mode writes`

:::note
__注意__
`--vfs-cache-mode` を使用しないと、ファイルを順番に書き込むことしかできません。多くのアプリケーションでマウント・ポイント上のファイルを操作したい場合、`--vfs-cache-mode writes`か`--vfs-cache-mode full`を指定してください。
:::

```batchfile
C:\rclone-v1.62.2-windows-amd64>rclone mount oci:/Target_Bucket C:\OCI_Object_Storage\Target_Bucket --vfs-cache-mode writes
The service rclone has been started.

```
マウント後、次のようにバケットと同じ名前のフォルダが作成されした (親のフォルダ`OCI_Object_Storage`を事前に作成しておく)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/64b82f45-8bb0-2d40-7cd6-305c438d39ce.png)

ローカルの`Target_Bucket`フォルダにファイルをコピーすると、OCIバケットに反映されます。

__アンマウント__
上記のコマンドプロンプトに、`CTRL+C`で抜けると、アンマウントできます。
```batchfile
C:\rclone-v1.62.2-windows-amd64>rclone mount oci:/Target_Bucket C:\OCI_Object_Storage\Target_Bucket --vfs-cache-mode writes
The service rclone has been started.
The service rclone has been stopped.
2023/05/05 09:58:40 ERROR : C:\OCI_Object_Storage\Target_Bucket: Unmounted rclone mount

C:\rclone-v1.62.2-windows-amd64>
```

# 追記 - オブジェクトストレージの専用エンドポイント
上記の例に利用しているオブジェクトストレージのURLパスは、現時点サポートされていますが、新の専用エンドポイントに切り替えることを推奨します。変更理由について、[ドキュメント](https://docs.oracle.com/ja-jp/iaas/Content/Object/Concepts/dedicatedendpoints.htm)の記載をご参照ください。

|APIタイプ| 現在のURL | 新しいURL |
|:--|:-|:-|
|S3-compatible|`$namespace.compat.objectstorage.$region.oraclecloud.com`|`$namespace.compat.objectstorage.$region.oci.customer-oci.com`|

以上です。

----
__改訂歴__
2022年5月：初版作成
2023年5月：追記: Rclone mount の利用
2025年2月：追記: オブジェクトストレージの専用エンドポイト

----
__関連記事__
[オラクル・クラウドの個人ブログ一覧](https://qiita.com/liu-wei/items/10152a4fec813c1b7d98)
[OCIオブジェクト・ストレージへのファイル転送方法のまとめ](https://qiita.com/liu-wei/items/4d955d10aeae4d61eea8)

__MOS(My Oracle Support) ドキュメント__
OCI File Storage Services (FSS) - How to Mount an Object Storage Bucket as Filesystem in Oracle Linux 8 and Above Using s3fs Fuse ([Doc ID 2963975.1](https://support.oracle.com/knowledge/Oracle%20Cloud/2963975_1.html))

Oracle Cloud Infrastructure - How to Mount an ObjectStorage Bucket as Filesystem in Oracle Linux 7 [(Doc ID 2577407.1)](https://support.oracle.com/knowledge/Oracle%20Cloud/2577407_1.html)

__OCIドキュメント__
[オブジェクト・ストレージの専用エンドポイント](https://docs.oracle.com/ja-jp/iaas/Content/Object/Concepts/dedicatedendpoints.htm)

----
__Rclone マニュアル__
[Rclone mount](https://rclone.org/commands/rclone_mount/)