LinuxにGoogleDriveをマウント

基盤:Linux用のプログラム開発環境、Hyper/Vの上のUbuntuですが、仮想ディスクをちっちゃくし過ぎて。開発用のデータが入り切らなそうで。

開発:あちこちへ持って回ったりスナップショット取るのを考えて小さめにしといたと。

基盤:なんかさっき、ホストをリブートした時に壊れて立ち上がらなくなっちゃって。自動チェックポイントとやらで救われましたが。容量の問題もあり、壊れる怖さもあるので、開発するプログラムは外部のドライブに置きたいかなと。

開発:いっそGoogleDriveにという計画でしたが。

基盤:そう、それやってみました。

FUSEマウントはダメっぽい

基盤:とりあえず先人のメモのとおりやって、GoogleDrive をUbuntuにマウントできました。

UbuntuからGoogleDriveをマウント

基盤:ここで気づいたんですが、GoogleDriveは接続時の認証のためにブラウザを(Firefox)を起動しようとするわけです。ところがSSHで入ってるとディスプレイは無いです。するとこんなエラーを出してきます。

u18% google-drive-ocamlfuse
Error: no DISPLAY environment variable specified

開発:DISPLAY環境変数!懐かしいですね。Xにも対応していると。あれ?そういえば10年前も、MacにXサーバ走らせて、DeleGateでXをトンネルしてリモートのFirefoxとかデスクトップ撮影とかしてた記憶が。

基盤:この場合は認証のためにだけに使っているので、特にGUIのブラウザでなくても良さそうですけどね。認証専用のCUIのHTTPクライアントがあると便利そうです。まあ、きっとあるでしょうけど 🙂

開発:ところでこれは、FUSEを使って実現してるんですね。以前試した時、SCP用のMacFUSEでしたけど、異常に遅くてビビったんですが。モデムですか?みたいな。

基盤:そう、それで恐る恐る測ってみたところ、スループット自体は3MB/秒くらい?出る感じなので、まずまずかなと思います。ところが、一つのファイルを作るのに(開くのに)数秒かかるという感じで、コンパイルとかこの上でするのは無理ですね。

開発:どうもFUSEってそういう感じのものなんですかね。

さすがのSMBマウント

基盤:それではということで、ホストマシン上でマウントしたGoogleDriveをSMBでマウントしてみようかと。まず、WindowsのGドライブにマウントされてるGoogleDriveを共有にします。

基盤:でこれをたとえばMacからマウントしてやると、こんなふうに問題なく見えます。

基盤:でここにデータがガンと書き込んでやると、80MB/秒くらいでイケます。

基盤:まあ実際GoogleDriveまで届いてるわけではなく、単にSMBサーバしているWin機に送り終えてるだけですが。でも割と速攻で、前にも測定しましたが10秒くらいしてsyncしてくれるようです。↓

開発:やはり、ローカルで書き込みがあるとすぐに、背景色のついた受信が起きて何やらクラウドとネゴして、10秒後くらいに転送を始める、というパターンですね。

基盤:GoogleDrive上で直に書き込むと、毎秒35ファイルくらい作れますから、FUSEでマウントした場合の1ファイル5秒(0.2ファイル/秒)の100倍以上は速いということになります。作業用のドライブとしても十分使い物になりますね。

基盤:ただどうも、APPLEのCCがハードリンクでも使ってるんでしょうか?ファイルのリネームに失敗してコンパイルできないですね。

開発:まあ、Ubuntuの gcc で出来ればとりあえず良いのでは。

Linux ー SMB ー GoogleDrive

基盤:で、まずSMB(CIFS)がデフォでは入ってないので入れて、マウントします。

u18% sudo apt install cifs-utils
u18% sudo mkdir /GoogleDrive
u18% sudo mount.cifs //192.168.10.10/G /GoogleDrive -o user=xxxx

基盤:で DeleGate を make と… おや?

ar cr libteleport.a teleportd.o vehicle.o qzcode.o
ar: unable to rename 'libteleport.a'; reason: No such file or directory

基盤:おや?

% touch xxx
% mv xxx yyy
mv: cannot move 'xxx' to 'yyy': No such file or directory
% strace mv xxx yyy
...
rename("xxx", "yyy") = -1 ENOENT (No such file or directory)

基盤:renameシステムコール、通らないですね。

開発:確かにリンクの書き換え系全般はダメな感じはあるよね。ハードリンク関係くさい。

基盤:Windows上では通りますしね。

$ pwd
/cygdrive/g/マイドライブ/gdtest
$ echo aaa > a1
$ mv a1 a2
$ strace mv a2 a3
...
mv 328 rename2: 0 = rename(a2,a3)
...
$

開発:うーむ。同じCIFSマウントで、Unix - SMB - WindowsHD なら通り、Unix - SMB - GoogleDrive ではとおらない。クライアント側でのSMBの使い方の問題じゃなく、SMBサーバとGoogleDrive との間の問題みたいですね。

基盤:とりあえずこのくらいにしときますか。

--
2020-0602 SatoxITS