はじめに
Paperspace GradientからGoogle Driveにファイルをアップロードすることはできた.しかしながら,ドライブをマウントできるともっと便利である.google-drive-ocamlfuseやrcloneによりマウントすることを目指す.
結果的には,FUSE(Filesystem in Userspace)のパーミッションエラーが乗り越えられなくて失敗した.
環境
・Win10 PC
・Google Chromブラウザ
・Paperspace Gradient Pro (ターミナルを使うので,無料版では不可)
google-drive-ocamlfuseの場合
google-drive-ocamlfuseは,ブラウザでのドライブの認証が必要である.なのでCUI環境では認証できない.
しかし,以下のサイトの方法は,slack APIを介してGoogle Driveの認証を行う方法なので認証にブラウザを必要としない.
参考サイト:https://qiita.com/cabbage_lettuce/items/c4544b3e5cd28caf04bc
この方法をpaperspaceに適用すればいけると思ったが,ファイルやフォルダの権限を変えても,何をやっても最終的にはマウント時に“failed to open /dev/fuse: Operation not permitted”と表示される.GoogleDriveの認証自体はできたがマウントができない.
ちなみに,上記のサイトで作成するLinuxコマンド化の箇所のスクリプトは,vi を用いて以下の感じでファイル(/usr/local/bin/xdg-open)を作成した.
#!/bin/bash
curl -X POST -H "Content-type: application/json" --data '{"text":"Message from VPS : '"$@"'"}' "https://hooks.slack.com/services/AAAAAA/BBBBB/CCCC" -kLso /dev/null'
read
ここで察したことは,Paperspaceが用意しているコンテナーがFUSEを使えない設定になってる可能性である.
rcloneの場合
rcloneはFUSEを使わないという噂を聞いたので,トライしてみる.
結果としては,マウントした際に,以下のように”Operation not permitted”と表示される.そして,他にもgoogle-drive-ocamlfuseで見たのと同じような文言が出ている.マウント時は,rcloneもFUSEは経由するのね.
結果(マウントは失敗)
FUSEの使用の可否がコンテナー側の設定で制御されていた場合,どうにもならない.マウントは諦めた.
rcloneの設定と副産物
マウントはできなかったが,rcloneを使ってGoogle Driveにアクセスはできた.
以下のサイトを参考にした.
rcloneのインストールと設定
paperspaceのターミナルを開き,以下のコマンドでrcloneをインストールする.以下でインストールできない場合は,rcloneの公式サイトを参考にすること.
sudo -v ; curl https://rclone.org/install.sh | sudo bash
その後,rcloneの設定を行う.
rclone config
まずは以下のように新しいremoteを作成する.
次にremoteの名前を設定する.
次は使用するオンラインストレージの種類を選択する.今回はGoogle Driveなので,該当する番号を入力(今回は18だったが,この値は変動するので自分で確かめること)
次にclient_idを聞かれる.先日の記事で作ったサービスアカウントが再利用できる思ったので,サービスアカウントのclient_idを入力した.client_idは,サービスアカウントの認証ファイル(先日作ったのは,service_account.json)を開けば,”client_id:”の箇所に書いてある.
次にclient_secretを聞かれるが,無いので空のままEnter.
次にScopeを聞かれる.これはGoogle Driveの編集権限みたいなものみたい.フルアクセスしたいので,「1」を入力.
次にservice_account_fileの場所を聞かれるので,先日の記事で作ったjsonファイルを指定する.
その後も,設定項目がいくつか提示されるが,すべて「default」の設定を選んだ.
設定が終わると最初の項目に戻るので,「q」を入力して設定を抜ける.
実行してみた(Google Driveの容量の確認).
Google Driveの容量を確認してみる.以下のコマンドを実行すると確認できる.
rclone about remote名:
コマンドは色々ある.当然コピーとかもできる.ここでは深く紹介しない.
以下がrcloneのリファレンスである.色々コマンドがある.
そして,気づいた.サービスアカウント内のファイルを削除した.
ここで容量が15GiBしかないことに気づいた.私は2TBの契約をしているので,2TBと表示されることを期待した.
先日の記事では,ファイルの送信はサービスアカウントを介して行った.つまり,paperspace側から見えているのは,あくまでもサービスアカウントである.そのため,上記の画像のようにサービスアカウントの容量が表示される形となった.
そして,もう一点気づいた.ディレクトリに存在するファイルを確認できるコマンド「rclone lsd remote名:」を実行したところ,私(2TB)のGoogleドライブ上では削除したファイルが残っていた.つまり,私のドライブから削除しても,サービスアカウントの方には残っているのである.
ファイル自体は,以下のコマンドで消せたが,先日の記事の方法においてサービスアカウントのGoogle Driveの容量がフルになったときの挙動には注意を払いたいと思った(以下のコマンドを実行する前に一回dry-runをして消える予定のファイルを確認した方が良いです.万が一,サービスアカウントでない方のドライブの内容が消えると困るので).
rclone delete remote名:
deleteだとファイルしか消えないかもしれないので,ディレクトリに入ってるファイル等を完全にすべて消したい場合は以下のコマンド.
rclone purge remote名:
ちなみに,サービスアカウントのドライブ内のファイルはすべて不要という前提で消している.念のためdry-runをして消される予定のファイルを確認した後に,上記のコマンドで消した方が良いかも.このサイトとかが参考になる.
rclone --dry-run delete remote名:
ゴミ箱に移動したファイルを消す場合は,さらに以下のコマンドを実施する.
rclone cleanup remote名:
ファイルが残る理由を説明したサイトがあったので,以下に掲載する.
まとめ
rcloneやgoogle-drive-ocamlfuseでpaperspace gradient上にGoogle Driveをマウントすることを試みた.FUSEのパーミッションの関係で,実現できなかった.
一方で,rcloneでサービスアカウント上のファイルの操作はできたので,rcloneは使えそうであると感じた.
コメント