web-dev-qa-db-ja.com

Google Colabでドライブをアンマウントし、別のドライブに再マウントする方法は?

[更新]

ノートブックを閉じて1.5時間後にもう一度開いたところ、drive.mount()を実行すると新しいキーが必要になります。待つのに必要な最小時間はわかりません...それが待つのが普通かどうかわかりません...

GoogleドライブアカウントAにマウントしました。アカ​​ウントBに切り替えたいのですが、drive.mount()を実行するときに新しい認証キーを入力する方法がないため、これを行うことはできません。

私が試して失敗したこと:

  1. ブラウザを再起動し、コンピュータを再起動します
  2. drive.mount()force_remount=Trueを使用すると、アカウントAのみが自動的に再マウントされます。新しいマウントターゲットを要求しません。
  3. アカウントの変更パスワード
  4. ランタイムタイプをGPUからNoneに変更し、GPUに戻す
  5. すべてをシークレットモードで開く
  6. すべてのGoogleアカウントからログアウトする

次のことができるAPIはありますか?

  • 以前の認証キーを忘れたので、新しい認証キーを要求しますか?
  • ドライブのマウントを解除して、以前の認証キーを忘れましたか?
10
Raymond Kwok

ランタイムを再起動してアクセスを削除しても、効果はありませんでした。使用していたノートブックがマウントポイントに作成されたディレクトリであることを発見しました:

from google.colab import drive
drive.mount('/content/drive')

Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount("/content/drive", force_remount=True).

最初にマウントポイントのサブディレクトリを削除する必要がありました。まず、ドライブが実際にマウントされていないことを確認してください!

!find /content/drive

/content/drive
/content/drive/My Drive
/content/drive/My Drive/Colab Notebooks
/content/drive/My Drive/Colab Notebooks/assignment4
/content/drive/My Drive/Colab Notebooks/assignment4/output_dir
/content/drive/My Drive/Colab Notebooks/assignment4/output_dir/2020-04-05_16:17:15

上記のファイルとディレクトリは、ドライブをマウントする前にノートブックによって誤って作成されました。ドライブがマウントされていないことを確認したら(Are you sure?)、サブディレクトリを削除します。

!rm -rf /content/drive

この後、ドライブをマウントすることができました。

0
Ryan

drive.mount()関数の現在のコードは https://github.com/googlecolab/colabtools/blob/fe964e0e046c12394bae732eaaeda478bc5fa350/google/colab/drive.py にあります

これは、/ opt/google/drive/driveにあるドライブ実行可能ファイルのラッパーです。実行可能ファイルがフラグ_authorize_new_user_を受け入れ、これを使用して再認証を強制できることがわかりました。

Drive.pyファイルの内容をコピーしてノートブックに貼り付けます。次に、現在189行目にあるd.sendline()の呼び出しを次のように変更します(_authorize_new_user_フラグが追加されていることに注意してください)。

_d.sendline(
      ('cat {fifo} | head -1 | ( {d}/drive '
       '--features=max_parallel_Push_task_instances:10,'
       'max_operation_batch_size:15,opendir_timeout_ms:{timeout_ms},'
       'virtual_folders:true '
       '--authorize_new_user=True '
       '--inet_family=' + inet_family + ' ' + metadata_auth_arg +
       '--preferences=trusted_root_certs_file_path:'
       '{d}/roots.pem,mount_point_path:{mnt} --console_auth 2>&1 '
       '| grep --line-buffered -E "{oauth_Prompt}|{problem_and_stopped}"; '
       'echo "{drive_exited}"; ) &').format(
           d=drive_dir,
           timeout_ms=timeout_ms,
           mnt=mountpoint,
           fifo=fifo,
           oauth_Prompt=oauth_Prompt,
           problem_and_stopped=problem_and_stopped,
           drive_exited=drive_exited))
_

driveモジュールバージョンのflush_and_unmount()または貼り付けたバージョンを呼び出してから、バージョンのmount()を呼び出して、別のユーザーとしてログインします。

0
webMan1