• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

google drive

date: 2022-01-14 excerpt: google driveの仕組みと概要

tag: googlegoogle appsネットワークドライブ


google driveの仕組みと概要

概要

  • google appsのネットワークドライブ
  • S3やGCSに近い仕組みになっており通常のHDDとは異なる
    • HDDのようにして使うとAPI制限にすぐ到達する
  • ファイルが所属するディレクトリのことをparentという
  • GCPの Google Drive APIを利用することでプログラマティックに操作できる

仕組み

  • ファイルとディレクトリには名前とは別にfileIdと呼ばれる固有のハッシュ値のようなものが存在する
  • fileIdがつながることで木構造になりディレクトリ構造を提供している
  • 構造例
    • fileId1(ディレクトリ)
      • fileId2(ファイル)
      • fileId3(ディレクトリ)
        • fileId4(ファイル)
        • fileId5(ファイル)

pythonでファイルのダウンロード

  • GCPでGoogle Drive API を有効化
  • gcloud auth application-default login --scopes="https://www.googleapis.com/auth/drive.readonly,https://www.googleapis.com/auth/cloud-platform" でADCを設定
from googleapiclient.discovery import build
from googleapiclient.http import MediaIoBaseDownload
import google.auth, io, pathlib

FILE_ID = "1QDDZ2IoGN8xOzeu_********"
DEST    = pathlib.Path("video.mp4")

# 「Drive 読み取り専用」スコープで ADC を取得
scopes = ["https://www.googleapis.com/auth/drive.readonly"]
creds, _ = google.auth.default(scopes=scopes)          # ← gcloud で得た資格情報を自動読込 :contentReference[oaicite:0]{index=0}

service = build("drive", "v3", credentials=creds)
request = service.files().get_media(fileId=FILE_ID)

with io.FileIO(DEST, "wb") as fh:
    downloader = MediaIoBaseDownload(fh, request)
    done = False
    while not done:
        status, done = downloader.next_chunk()
        print(f"{status.progress()*100:.1f} % downloaded")
print("✅ 完了:", DEST)

使用できるクライアントソフト

(osx)Google Drive for Desktop

  • 公式クライント
  • osxで実行すると、smbプロトコルで/Volumes/GoogleDrive/にマウントされる模様
  • 公式で実装されているのでCLIでアクセスしても安定している

(Windows)Google Drive for Windows

  • 特徴
    • mac版は/Volumes以下に配置されるが、windows版はGoogle Driveという名前のハードディスクが作成される
    • データの管理方式はストリーミングとミラーリングがある
      • ストリーミング -> アクセス時にデータを取得
      • ミラーリング -> すべてのデータをミラーリング(HDDの消費が激しい)
    • パスの実態
      • C:\Users\<username>\AppData\Local\Google\DriveFSであり張り替えることは可能

/gdrive/

  • linux, osxで使用できるCUIクライアント

どれくらいの容量を契約すればいいのか

  • 結論
    • 最小の契約の100GBで十分
  • 理由
    • そもそもエグレス料金を無視した料金体系なので、金額的に相当マージンを乗せているので他社に比べて高い
    • あふれるようなデータはbackblazeやS3で保存すればよい
    • どうしてもエグレス料金がかさみそうなときは、selfhostで解決する
      • 環境がない場合、/bore/などで自分のコンピュータのポートを公開すれば世界からアクセス可能になる

トラブルシューティング

たくさんのファイルの移動・削除ができない

  • mac, windowsのクライアントで操作すると極端に遅くなるので、WebUIから行う


googlegoogle appsネットワークドライブ Share Tweet